1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [§ 3] [méně komfortní] 2 00:00:03,000 --> 00:00:05,000 >> [Nate Hardison] [Harvard University] 3 00:00:05,000 --> 00:00:08,000 >> [To je CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:10,000 >> Dobře, pojďme začít. 5 00:00:10,000 --> 00:00:13,000 Vítejte do týdne 4 CS50. 6 00:00:13,000 --> 00:00:19,000 Pokud jste otevřít webový prohlížeč a otevřít PSet 3, 7 00:00:19,000 --> 00:00:23,000 Scramble s CS50, budeme začít chodit 8 00:00:23,000 --> 00:00:26,000 prostřednictvím sekce otázek tam. 9 00:00:26,000 --> 00:00:32,000 Stejně jako minulý týden, budeme pracovat v CS50 Spaces, 10 00:00:32,000 --> 00:00:35,000 pokud budete také vytáhnout, že se stejně, 11 00:00:35,000 --> 00:00:43,000 a pokud budete pokračovat a navštivte tento odkaz, na který jsem dostal tady nahoře. 12 00:00:43,000 --> 00:00:45,000 Je čas začít. 13 00:00:45,000 --> 00:00:51,000 Máme naši malou hi programu zde. Nic blázen. 14 00:00:51,000 --> 00:00:55,000 Jedna z prvních věcí, které chci udělat s vámi dnes probrat několik řešení 15 00:00:55,000 --> 00:00:58,000 k problému Set 1, takovým příkladem řešení, 16 00:00:58,000 --> 00:01:03,000 jen tak můžete získat pocit, pro to, co druhy kódu zaměstnanců je psaní, 17 00:01:03,000 --> 00:01:07,000 jaké studentů kódu ostatních píší, 18 00:01:07,000 --> 00:01:10,000 a máte se na to podívat, protože vím, že je to divné 19 00:01:10,000 --> 00:01:14,000 když zadáte řešení problému nastavení a získat připomínky 20 00:01:14,000 --> 00:01:18,000 na své vlastní verzi, ale někdy je to užitečné vidět, jak ostatní lidé dělali to, 21 00:01:18,000 --> 00:01:22,000 zejména ty, které jsou pěkně vypadající. 22 00:01:22,000 --> 00:01:27,000 Pro nejvíce se rozdělit, byl jsem opravdu ohromen s řešením, které jste produkoval. 23 00:01:27,000 --> 00:01:31,000 Ještě jsem začal hledat na seznam 2s Problem Set, ale v případě, že jste něco jako první, 24 00:01:31,000 --> 00:01:34,000 znamená to, že nic, ale dobré věci. 25 00:01:34,000 --> 00:01:40,000 >> Pokud se podíváte na mé verzi, začněme celou cestu dolů na revize 1, 26 00:01:40,000 --> 00:01:47,000 a budeme se rychle podívat na řešení Mario. 27 00:01:47,000 --> 00:01:54,000 Pokud budete tahat doplnila, tyto programy, které budeme prezentovat jsou správné. 28 00:01:54,000 --> 00:01:56,000 Nebylo správnost problémy s těmito problémy, ale spíše, 29 00:01:56,000 --> 00:01:59,000 chceme mluvit trochu o různých konstrukčních problémů 30 00:01:59,000 --> 00:02:03,000 , které byly použity zde. 31 00:02:03,000 --> 00:02:08,000 Jedna z věcí, která byla zajímavá o řešení 32 00:02:08,000 --> 00:02:11,000 je to, že používá tento nový konstrukt s názvem libra definovat, 33 00:02:11,000 --> 00:02:15,000 někdy také označována jako hash definovat. 34 00:02:15,000 --> 00:02:18,000 Dovolte mi, abych se zaměřit na to tady. 35 00:02:18,000 --> 00:02:24,000 # Define umožňuje dát jména těchto čísel v programu. 36 00:02:24,000 --> 00:02:28,000 V tomto případě je maximální výška pyramidy v Mario 37 00:02:28,000 --> 00:02:34,000 byl 23 a spíše než dávat 23 v mém kódu, 38 00:02:34,000 --> 00:02:37,000 bychom odkazují k tomu, jak pevný kódování 23 - 39 00:02:37,000 --> 00:02:43,000 Namísto toho dává název MAX_HEIGHT na toto číslo, 40 00:02:43,000 --> 00:02:48,000 tak, aby se tady v mém do-while 41 00:02:48,000 --> 00:02:51,000 můžete vlastně se odkazovat na MAX_HEIGHT 42 00:02:51,000 --> 00:02:55,000 místo toho, aby počet 23 palců 43 00:02:55,000 --> 00:02:57,000 [Student] Jaká je výhoda dělat, že? 44 00:02:57,000 --> 00:02:59,000 To je velká otázka. 45 00:02:59,000 --> 00:03:03,000 Jedním z nich je čitelnost. 46 00:03:03,000 --> 00:03:08,000 Výhodou použití tohoto # define je čitelnost. 47 00:03:08,000 --> 00:03:11,000 Když čtu tento kód, vidím, co se děje. 48 00:03:11,000 --> 00:03:15,000 >> Vidím v tomto stavu zde testujeme 49 00:03:15,000 --> 00:03:19,000 pro výšku je <0, které jsme také mohl definovány 50 00:03:19,000 --> 00:03:22,000 být minimální výška nebo min výška. 51 00:03:22,000 --> 00:03:25,000 Další výhodou je, že se může potom přečíst zbytek řádku vidět 52 00:03:25,000 --> 00:03:30,000 že jsme také kontrolu, aby se ujistil, že výška není větší než výška max., 53 00:03:30,000 --> 00:03:35,000 protože budeme pokračovat, zatímco výška je větší než výška max. 54 00:03:35,000 --> 00:03:40,000 Další výhodou je, když jsem vzdálíte trochu sem- 55 00:03:40,000 --> 00:03:49,000 když jsem spustit tento program, a já jej spustit, řekněme, s 23 právě teď, 56 00:03:49,000 --> 00:03:52,000 vám vypíše všechny řádky 23 jen jako, že. 57 00:03:52,000 --> 00:03:54,000 Ale říct, že jsem chtěl změnit výšku max, 58 00:03:54,000 --> 00:03:57,000 a teď chci omezit maximální výšku pyramid 59 00:03:57,000 --> 00:04:06,000 být pouze říci-man, který byl zděšený. 60 00:04:06,000 --> 00:04:14,000 # Include , # define MAX_HEIGHT, 61 00:04:14,000 --> 00:04:18,000 a řekněme, že jsme chtěli nastavit výši 10. 62 00:04:18,000 --> 00:04:22,000 V tomto okamžiku, vše, co jsem musel udělat, bylo změnit v tomto jednom místě. 63 00:04:22,000 --> 00:04:27,000 Mohu překompilovat kód, a teď, když se snažím a zadejte 12, 64 00:04:27,000 --> 00:04:30,000 to bude výzva mě znovu. 65 00:04:30,000 --> 00:04:33,000 V tomto případě, jsme pouze pomocí MAX_HEIGHT jednou. 66 00:04:33,000 --> 00:04:37,000 Není to tak velký potíží jít 67 00:04:37,000 --> 00:04:40,000 a změnit ji v cyklu while, pokud potřebujete. 68 00:04:40,000 --> 00:04:44,000 Ale v programech, kde jste odkazující na stejné magické číslo 69 00:04:44,000 --> 00:04:47,000 znovu a znovu, to # define mechanismus je opravdu šikovný 70 00:04:47,000 --> 00:04:52,000 protože stačí změnit to jednou v horní části souboru je obvykle kam jste je uložili, 71 00:04:52,000 --> 00:04:57,000 a změna prosakuje přes zbytek souboru. 72 00:04:57,000 --> 00:05:02,000 >> Další věci, které jsem chtěl poznamenat, v tomto úkolu, že jsem si myslel, vypadal opravdu pěkné, 73 00:05:02,000 --> 00:05:05,000 jeden byl pojmenování proměnných. 74 00:05:05,000 --> 00:05:14,000 Vidíte zde, že máme celočíselné proměnné s názvem řádku a tzv. výšku. 75 00:05:14,000 --> 00:05:20,000 Prostory, křížky, to pomáhá, aby se kód trochu čitelnější, 76 00:05:20,000 --> 00:05:25,000 dělá to trochu srozumitelnější, co se vlastně děje. 77 00:05:25,000 --> 00:05:31,000 Toto je v kontrastu k používání, řekněme, náhodná písmena 78 00:05:31,000 --> 00:05:35,000 nebo jen hatmatilka úplně. 79 00:05:35,000 --> 00:05:39,000 Poslední věc, kterou jsem si zdůraznit, je, že v pro smyčky, 80 00:05:39,000 --> 00:05:45,000 často tyto iterátor proměnné, tyto pulty, které používáte ve vaší pro smyčky, 81 00:05:45,000 --> 00:05:51,000 je to standardní a konvenční start je buď i a potom j a pak k 82 00:05:51,000 --> 00:05:54,000 a jít na odtamtud, pokud potřebujete více proměnných, 83 00:05:54,000 --> 00:05:56,000 a to je jen konvence. 84 00:05:56,000 --> 00:05:58,000 Existuje spousta úmluv. 85 00:05:58,000 --> 00:06:00,000 To závisí na programovacím jazyku, který používáte. 86 00:06:00,000 --> 00:06:04,000 Ale v C, jsme obvykle začínají s i. 87 00:06:04,000 --> 00:06:08,000 To nedává smysl používat, řekněme, nebo b 88 00:06:08,000 --> 00:06:13,000 v závislosti na situaci. 89 00:06:13,000 --> 00:06:15,000 To je to pro tento jeden. 90 00:06:15,000 --> 00:06:25,000 Pokud nyní vytáhnout Revize 2, uvidíte další Mario, 91 00:06:25,000 --> 00:06:29,000 a toto je podobná té druhé, které jsme právě viděli, 92 00:06:29,000 --> 00:06:32,000 ale to dělá něco docela fajn. 93 00:06:32,000 --> 00:06:38,000 Podíváme-li se v této sekci tady uvnitř vnitřní smyčky for, 94 00:06:38,000 --> 00:06:44,000 že používáte nějaký šílený hledáte syntaxe tu právě v tomto oboru. 95 00:06:44,000 --> 00:06:47,000 Toto se nazývá ternární operátor. 96 00:06:47,000 --> 00:06:53,000 Je-li else zhuštěné do jednoho řádku. 97 00:06:53,000 --> 00:06:57,000 Podmínkou je tato část v závorkách. 98 00:06:57,000 --> 00:07:05,000 Je to jako tvrdit, pokud j 00:07:10,000 A co pak obsah, že pokud blok by být se prostor 100 00:07:10,000 --> 00:07:16,000 a pak obsah toho, co jiného by se tato #. 101 00:07:16,000 --> 00:07:20,000 Je to v podstatě přiřazení prostor do této proměnné. 102 00:07:20,000 --> 00:07:24,000 Je to uvedení prostor v obsahu bloku proměnné, 103 00:07:24,000 --> 00:07:29,000 Pokud je tato podmínka splněna, a pokud podmínka není splněna, 104 00:07:29,000 --> 00:07:32,000 pak blok proměnná dostane to #. 105 00:07:32,000 --> 00:07:37,000 A pak, samozřejmě, místo toho, aby budování celý řetězec 106 00:07:37,000 --> 00:07:43,000 a tisk všechno ven na konci toto řešení vytiskne to jeden znak v čase. 107 00:07:43,000 --> 00:07:48,000 Docela v pohodě. 108 00:07:48,000 --> 00:07:53,000 >> Ještě pár věcí, které se dívají na. Budeme se přesunout na chamtivý. 109 00:07:53,000 --> 00:07:58,000 Nyní, když se podíváme na chamtivý, to první řešení 110 00:07:58,000 --> 00:08:00,000 používá tyto # definuje docela dost. 111 00:08:00,000 --> 00:08:06,000 Máme ještě jednu konstantu definovanou pro každý z různých čísel v tomto programu. 112 00:08:06,000 --> 00:08:12,000 Máme jednu pro centů za dolar, jeden pro čtvrtletí, desetníky, nickels, a haléře, 113 00:08:12,000 --> 00:08:15,000 a teď, když jsme se posunout dolů a kód přečíst, 114 00:08:15,000 --> 00:08:22,000 můžeme vidět standardní do-while smyčky tisk všechno ven. 115 00:08:22,000 --> 00:08:25,000 Druh jádru tohoto problému bylo si uvědomil, že 116 00:08:25,000 --> 00:08:29,000 jste potřebovali převést plovák, který budete číst od uživatele na celé číslo 117 00:08:29,000 --> 00:08:32,000 přesně si to spočítejte, a to je proto, že 118 00:08:32,000 --> 00:08:36,000 s plovoucí desetinnou čárkou, jako bychom mluvili o v přednášce krátce, 119 00:08:36,000 --> 00:08:41,000 to není možné přesně vyjádřit každý jednu hodnotu na číselné ose 120 00:08:41,000 --> 00:08:47,000 protože existuje nekonečně mnoho hodnot mezi 3 a, řekněme, 3,1 i. 121 00:08:47,000 --> 00:08:54,000 Můžete mít 3,01 a 3,001 a 3,0001, a můžete jít dál. 122 00:08:54,000 --> 00:09:00,000 Ukázalo se, že vždy, když pracujete s penězi, si často chcete převést 123 00:09:00,000 --> 00:09:05,000 do formátu integer, takže nejste ztráty haléře a takové věci. 124 00:09:05,000 --> 00:09:09,000 Dělat, že a zaokrouhlení byl klíč. 125 00:09:09,000 --> 00:09:14,000 Toto řešení používá dokonale jednoduchý, skvělý algoritmus, 126 00:09:14,000 --> 00:09:17,000 které sníží počet zbývajících centů, nejprve čtvrtiny, 127 00:09:17,000 --> 00:09:19,000 pak desetníky, pak nickels, pak mincí, 128 00:09:19,000 --> 00:09:24,000 a přidávat k počtu mincí každý čas. 129 00:09:24,000 --> 00:09:31,000 >> Dalším řešením, které uvidíme, jak jsem oddálit a jít k revizi 4, 130 00:09:31,000 --> 00:09:40,000 měl velmi podobný začátek, ale místo toho používá div a mod 131 00:09:40,000 --> 00:09:44,000 přímo tady pro výpočet počtu centů. 132 00:09:44,000 --> 00:09:50,000 Toto je počet čtvrtiny se rovná počtu centů dělený 25, 133 00:09:50,000 --> 00:09:53,000 a důvod, proč to funguje, je proto, že děláme celočíselné dělení, 134 00:09:53,000 --> 00:09:58,000 tak je to vyřazení všechny zbytky. 135 00:09:58,000 --> 00:10:02,000 [Student] Musíme ji komentovat vyhledávání? 136 00:10:02,000 --> 00:10:05,000 To opravdu záleží. 137 00:10:05,000 --> 00:10:08,000 [Student] Jsi komentovat více než kód tady. 138 00:10:08,000 --> 00:10:16,000 Jo, a tak, že jsou banda různé filosofie na toto téma. 139 00:10:16,000 --> 00:10:21,000 Můj osobní filozofie je, že váš kód je opravdu pravda, 140 00:10:21,000 --> 00:10:24,000 jako váš kód je to, co je skutečně vykonávající na počítači, 141 00:10:24,000 --> 00:10:29,000 a tak váš kód by měl být čitelné a co nejpřehlednější, že nebude vyžadovat tolik komentářů. 142 00:10:29,000 --> 00:10:33,000 To znamená, že když děláte věci, které jsou trochu složitější matematicky 143 00:10:33,000 --> 00:10:38,000 nebo algoritmicky, je dobré, aby se vyjádřil ty, takže můžete 144 00:10:38,000 --> 00:10:43,000 přidat další rozměr, další vrstvu na toho, kdo čte váš kód. 145 00:10:43,000 --> 00:10:49,000 V těchto řešení, často jsou komentovány více těžce jen proto, že 146 00:10:49,000 --> 00:10:52,000 Chceme být schopni distribuovat a lidé vyzvednout 147 00:10:52,000 --> 00:10:56,000 a číst je docela snadno. 148 00:10:56,000 --> 00:11:05,000 Ale určitě bych se shodují, že je to těžké. 149 00:11:05,000 --> 00:11:07,000 [Student] Ale v případě pochybností, jít těžší? 150 00:11:07,000 --> 00:11:10,000 Pokud jste na pochybách, jděte těžší. 151 00:11:10,000 --> 00:11:17,000 Někteří lidé budou někdy říkají vrácení 0, nebo něco takového. 152 00:11:17,000 --> 00:11:20,000 Myslím, že je to směšné komentář. 153 00:11:20,000 --> 00:11:22,000 Je zřejmé, že to, co se děje. 154 00:11:22,000 --> 00:11:25,000 Nepotřebuji English se mi říct, že. 155 00:11:25,000 --> 00:11:28,000 Někdy lidé budou psát věci jako "kthxbai!" 156 00:11:28,000 --> 00:11:32,000 To je rozkošný, ale také ne- 157 00:11:32,000 --> 00:11:35,000 že to nedělá rozdíl mezi komentování bodů, nebo ne. 158 00:11:35,000 --> 00:11:41,000 Tyto druhy komentáře jsou jen ha, ha. 159 00:11:41,000 --> 00:11:43,000 Cool. 160 00:11:43,000 --> 00:11:48,000 >> V tomto bodě, pojďme začít pracovat na problému Nastavit 3 část otázek. 161 00:11:48,000 --> 00:11:52,000 Pokud jste stiskl znovu, 162 00:11:52,000 --> 00:11:55,000 stejně jako u minulého týdne, nebudeme sledovat šortky v této sekci. 163 00:11:55,000 --> 00:12:00,000 Necháme vás chlapi, že ve svém volném čase, a mluvit o otázkách. 164 00:12:00,000 --> 00:12:05,000 Ale teď v této sekci se budeme věnovat trochu více času 165 00:12:05,000 --> 00:12:11,000 mluví o méně kódovacích základy 166 00:12:11,000 --> 00:12:15,000 jako jsme to udělali minulý týden, a místo toho, budeme více soustředit na 167 00:12:15,000 --> 00:12:22,000 trochu více teorie, tak mluví o binární vyhledávání a poté třídění. 168 00:12:22,000 --> 00:12:27,000 Z těch z vás, kteří byli po spolu s přednáškou, 169 00:12:27,000 --> 00:12:30,000 může někdo dát mi rekapitulaci, jaký je rozdíl 170 00:12:30,000 --> 00:12:35,000 mezi binární vyhledávání a lineární vyhledávání? 171 00:12:35,000 --> 00:12:37,000 Co se děje? Jistě. 172 00:12:37,000 --> 00:12:42,000 Lineární vyhledávání prohledá každý prvek v tříděném seznamu 173 00:12:42,000 --> 00:12:45,000 jeden po druhém po druhém jeden po druhém, 174 00:12:45,000 --> 00:12:50,000 a binární vyhledávací rozděluje seznam na 2 skupiny, 175 00:12:50,000 --> 00:12:57,000 kontroly, zda klávesy hodnoty, které hledáte, je větší nebo menší než na střed hodnota 176 00:12:57,000 --> 00:13:00,000 že jste právě našli, a pokud je to méně, než to jde s nižším seznamu 177 00:13:00,000 --> 00:13:03,000 a pak rozdělí to znovu, to samé funkce 178 00:13:03,000 --> 00:13:07,000 celou cestu dolů, dokud se najde střed se rovná hodnotě samotného. 179 00:13:07,000 --> 00:13:10,000 Právo. 180 00:13:10,000 --> 00:13:12,000 >> Proč nás zajímá? 181 00:13:12,000 --> 00:13:20,000 Proč mluvíme o binární vyhledávání oproti lineární hledání? 182 00:13:20,000 --> 00:13:22,000 Jo. 183 00:13:22,000 --> 00:13:24,000 Binární je mnohem rychlejší, takže pokud zdvojnásobíte velikost problému 184 00:13:24,000 --> 00:13:27,000 trvá ještě jeden krok, spíše než dvakrát tolik. 185 00:13:27,000 --> 00:13:29,000 Přesně tak. 186 00:13:29,000 --> 00:13:31,000 To je skvělý odpověď. 187 00:13:31,000 --> 00:13:36,000 Lineární vyhledávání je velmi kontrole jeden prvek v době, 188 00:13:36,000 --> 00:13:39,000 a jak jsme viděli v první den přednášky 189 00:13:39,000 --> 00:13:42,000 když David šel přes jeho příkladu telefonního seznamu 190 00:13:42,000 --> 00:13:45,000 a vytrhl jednu stránku z telefonního seznamu v době 191 00:13:45,000 --> 00:13:47,000 a stále dělá, že znovu a znovu a znovu, 192 00:13:47,000 --> 00:13:51,000 to bude trvat ho opravdu dlouho najít nikoho v telefonním seznamu, 193 00:13:51,000 --> 00:13:55,000 pokud, samozřejmě, hledal někoho na samém počátku abecedy. 194 00:13:55,000 --> 00:14:00,000 S binární vyhledávání, můžete jít mnohem rychleji, 195 00:14:00,000 --> 00:14:05,000 a není to jen dvakrát tak rychle nebo 3 krát tak rychle, nebo 4 krát tak rychle. 196 00:14:05,000 --> 00:14:13,000 Ale problém dostane menší a menší a menší mnohem rychleji. 197 00:14:13,000 --> 00:14:17,000 Pro ilustraci, začneme mluvit o tom, co se děje 198 00:14:17,000 --> 00:14:21,000 když píšeme binární vyhledávání. 199 00:14:21,000 --> 00:14:27,000 Problém po ruce, je, že když mám řadu čísel, 200 00:14:27,000 --> 00:14:40,000 říkají, 1, 2, 3, 5, 7, 23, 45, 78, 12323, 201 00:14:40,000 --> 00:14:47,000 a pak 9 s tunou 0s po tom, 202 00:14:47,000 --> 00:14:52,000 chceme být schopni zjistit, opravdu rychle, co je v 203 00:14:52,000 --> 00:14:57,000 Toto pole čísel. 204 00:14:57,000 --> 00:15:00,000 Vím, že to vypadá trochu hloupě a trochu nepřirozený, 205 00:15:00,000 --> 00:15:02,000 protože teď je to. 206 00:15:02,000 --> 00:15:05,000 Máme pole, které nemá velmi mnoho prvků v něm, 207 00:15:05,000 --> 00:15:08,000 a když se zeptám, jeden z vás přijít na to, zda je či není 208 00:15:08,000 --> 00:15:11,000 23 je v poli, může to udělat docela rychle 209 00:15:11,000 --> 00:15:16,000 jen tím, že se podíval na to a říkal mi ano nebo ne. 210 00:15:16,000 --> 00:15:20,000 Analogový, aby zvážila, představte si, že by tomu tak bylo, řekněme, 211 00:15:20,000 --> 00:15:27,000 tabulkového procesoru Excel s 10.000 řádků, 20.000 řádky. 212 00:15:27,000 --> 00:15:31,000 Samozřejmě, můžete to udělat na příkazové F nebo ovládací F a podívejte se něco vymyslet. 213 00:15:31,000 --> 00:15:33,000 Můžete také použít filtry a vyhledávání další věci, 214 00:15:33,000 --> 00:15:37,000 ale pokud jste měli dívat přes ten soubor řádek po řádku po řádku, 215 00:15:37,000 --> 00:15:40,000 to bude trvat vám dlouho najít. 216 00:15:40,000 --> 00:15:42,000 Je to něco jako v příkladu telefonního seznamu, i tam, kde 217 00:15:42,000 --> 00:15:44,000 nikdo se dívá přes jedno telefonní stránku knihy najednou. 218 00:15:44,000 --> 00:15:47,000 Typicky, oni otevřít do středu, 219 00:15:47,000 --> 00:15:50,000 nebo v případě mnoha telefonních seznamů a slovníků kde 220 00:15:50,000 --> 00:15:54,000 jste skutečně to nedočkavý na první písmeno, 221 00:15:54,000 --> 00:16:01,000 překlopení tohoto prvního písmene a otevřít a začít procházet tam. 222 00:16:01,000 --> 00:16:03,000 >> Připomeňte mi své jméno znovu. >> Sam. 223 00:16:03,000 --> 00:16:05,000 Sam. 224 00:16:05,000 --> 00:16:11,000 Stejně jako Sam řekl, že lineární procesu hledání bude opravdu pomalé, 225 00:16:11,000 --> 00:16:15,000 a místo toho s binární vyhledávání, to funguje tak, že 226 00:16:15,000 --> 00:16:21,000 pokaždé, když jsme se projít iterace našeho hledání algoritmu, 227 00:16:21,000 --> 00:16:27,000 budeme rozdělit seznam na polovinu, v podstatě, 228 00:16:27,000 --> 00:16:33,000 do dvou menších seznamů. 229 00:16:33,000 --> 00:16:39,000 A pak na další iteraci smyčky, budeme rozdělovat znovu 230 00:16:39,000 --> 00:16:44,000 do jiných menších seznamů. 231 00:16:44,000 --> 00:16:48,000 Jak můžete vidět, problém je čím dál menší a menší 232 00:16:48,000 --> 00:16:55,000 protože zachováváme Škrt polovinu seznamu pokaždé. 233 00:16:55,000 --> 00:16:59,000 Jak to discard práci? 234 00:16:59,000 --> 00:17:05,000 Stejně jako připomínka, co budeme dělat, když jsme byli počítač 235 00:17:05,000 --> 00:17:11,000 a my jsme byli, řekněme, vyhledáváme pro číslo 5 v tomto seznamu 236 00:17:11,000 --> 00:17:15,000 je to, že bychom si vybrat číslo uprostřed. 237 00:17:15,000 --> 00:17:26,000 Ve středu tohoto seznamu, protože tam jsou 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 čísel, 238 00:17:26,000 --> 00:17:32,000 bychom vybrat číslo buď na 4. místě nebo na 5. pozici, 239 00:17:32,000 --> 00:17:38,000 a my bychom zavolat, že uprostřed našeho seznamu. 240 00:17:38,000 --> 00:17:42,000 Vyberte číslo uprostřed. 241 00:17:42,000 --> 00:17:51,000 Pak, stejně jako Sam řekl, budeme testovat, zda toto číslo se rovná 242 00:17:51,000 --> 00:17:59,000 na číslo, které chceme získat nebo si požadované číslo. 243 00:17:59,000 --> 00:18:06,000 Pokud je to stejné, pak jsme ho našli. Vyhráli jsme. 244 00:18:06,000 --> 00:18:12,000 Pokud to není stejné, pak existuje pár případů. 245 00:18:12,000 --> 00:18:15,000 Tyto dva případy jsou buď počet musí být větší než počet díváme, 246 00:18:15,000 --> 00:18:19,000 nebo je to méně než. 247 00:18:19,000 --> 00:18:25,000 Pokud je to větší, jsme se přesunout doprava. 248 00:18:25,000 --> 00:18:33,000 A pokud je to méně, jsme se přesunout doleva. 249 00:18:33,000 --> 00:18:41,000 A pak jsme celý proces opakovat znovu 250 00:18:41,000 --> 00:18:48,000 buď na pravé, nebo na levé poloviny poloviny seznamu. 251 00:18:48,000 --> 00:18:51,000 >> První problém v dnešním oddílu je zjistit, 252 00:18:51,000 --> 00:18:55,000 jak můžeme skutečně začít vyjadřovat toto v C kód. 253 00:18:55,000 --> 00:18:58,000 Máme pseudokódu zde. 254 00:18:58,000 --> 00:19:04,000 Co budeme začít dělat je, že jsem si vytáhnout zcela nový prostor, 255 00:19:04,000 --> 00:19:09,000 uložit tuto revizi tak, že máme tyto poznámky na později, 256 00:19:09,000 --> 00:19:20,000 budeme mazat, to vše a potom zkopírovat a vložit z problémového souboru 257 00:19:20,000 --> 00:19:26,000 tato informace do našich prostor, a doufejme, že to nepraskne. 258 00:19:26,000 --> 00:19:28,000 Perfect. 259 00:19:28,000 --> 00:19:33,000 Pokud jste vše dělat, zkopírujte a vložte tento kód do nového prostoru, 260 00:19:33,000 --> 00:19:43,000 do prázdnou. 261 00:19:43,000 --> 00:19:47,000 Pojďme zkusit Daniel. Pokud zkompilovat a spustit tento program, to funguje? 262 00:19:47,000 --> 00:19:49,000 Ne >> Co to říká? 263 00:19:49,000 --> 00:19:53,000 To říká, že kontrolní dosáhne konce non-void funkce. 264 00:19:53,000 --> 00:19:55,000 Jo, tak mi dovolte zkuste ji spustit. 265 00:19:55,000 --> 00:19:59,000 Už jste viděli tohle? Víte, co to znamená? 266 00:19:59,000 --> 00:20:01,000 Dobře, pojďme rozebrat to trochu. 267 00:20:01,000 --> 00:20:10,000 Je to řekl na file.c na řádku 9, sloupec 1 máme chybu, stejně jako jste řekl, 268 00:20:10,000 --> 00:20:16,000 a říká, že je to vyplývající z chyby varování a zpáteční typu varování. 269 00:20:16,000 --> 00:20:18,000 Vypadá to, že se něco děje s návratový typ, který dává smysl. 270 00:20:18,000 --> 00:20:21,000 Máme non-void funkci, což znamená, že máme funkci 271 00:20:21,000 --> 00:20:24,000 že nevrací neplatné. 272 00:20:24,000 --> 00:20:27,000 Void funkce je ten, který vypadá takto: 273 00:20:27,000 --> 00:20:35,000 void foo (), a je to neplatná, protože návratový typ je void, 274 00:20:35,000 --> 00:20:38,000 což znamená, že pokud bychom měli něco tady 275 00:20:38,000 --> 00:20:45,000 jako návrat 1, měli bychom se chyba kompilátoru pro to. 276 00:20:45,000 --> 00:20:49,000 Nicméně, máme non-void funkce. 277 00:20:49,000 --> 00:20:51,000 Naše non-void funkce v tomto případě je naše vyhledávací funkce 278 00:20:51,000 --> 00:20:56,000 protože má návratový typ bool. 279 00:20:56,000 --> 00:20:59,000 Když to říká, že kontrolní dosáhne konec non-void funkce, 280 00:20:59,000 --> 00:21:02,000 je to proto, že hledání nemá return. 281 00:21:02,000 --> 00:21:04,000 Není to vrací nic typu bool. 282 00:21:04,000 --> 00:21:09,000 >> Můžeme opravit to, a co vy na to 283 00:21:09,000 --> 00:21:13,000 vyhledávání by se měl vrátit ve výchozím nastavení? 284 00:21:13,000 --> 00:21:16,000 Jaký by měl být výchozí návratová hodnota hledání? 285 00:21:16,000 --> 00:21:19,000 Vzhledem k tomu, že to, co můžeme dát na konec. 286 00:21:19,000 --> 00:21:21,000 Charlotte, máš nějaké-? 287 00:21:21,000 --> 00:21:23,000 Pravda nebo lež? >> Pravda nebo lež. 288 00:21:23,000 --> 00:21:26,000 Který z nich? 289 00:21:26,000 --> 00:21:28,000 False. Nevím. 290 00:21:28,000 --> 00:21:30,000 False? Pojďme to zkusit. 291 00:21:30,000 --> 00:21:32,000 Proč si to return false? To je skvělé intuici. 292 00:21:32,000 --> 00:21:35,000 [Charlotte] Nevím. 293 00:21:35,000 --> 00:21:39,000 Budeme se vrátit false v tomto případě, protože to bude náš výchozí 294 00:21:39,000 --> 00:21:44,000 pokud z nějakého důvodu je seznam prázdný, nebo je jehla 295 00:21:44,000 --> 00:21:46,000 že jsme hledali neexistuje. 296 00:21:46,000 --> 00:21:50,000 Pak na samém konci, když nemáme vrátí true dříve v této funkci, 297 00:21:50,000 --> 00:21:55,000 vždy víme, že tato funkce bude říkat Ne, to není v poli. 298 00:21:55,000 --> 00:21:58,000 Není to v kupce sena. 299 00:21:58,000 --> 00:22:03,000 Nyní, když jsme se sestavit a spustit to, dovolte mi, abych uložit to tak můžeme vytáhnout ho nahoru. 300 00:22:03,000 --> 00:22:08,000 Nyní, když jsme se sestavit a spustit náš program, buduje. 301 00:22:08,000 --> 00:22:12,000 Dostaneme naši malou řádku. 302 00:22:12,000 --> 00:22:20,000 Pokud jsem trefil 4-uh-oh. 303 00:22:20,000 --> 00:22:25,000 Nebylo vytisknout nic. Vypadá to jako všechno skončilo dobře. 304 00:22:25,000 --> 00:22:35,000 Musíme vyplnit tento palců 305 00:22:35,000 --> 00:22:39,000 Mluvili jsme o tom algoritmu v pseudokódu trochu dříve. 306 00:22:39,000 --> 00:22:44,000 Ukažte, uložte tento, 307 00:22:44,000 --> 00:22:49,000 a já vytáhnout, že algoritmus opět probudí. 308 00:22:49,000 --> 00:22:51,000 Jdeme toho chlapa. Ne. 309 00:22:51,000 --> 00:22:58,000 Tady to je. 310 00:22:58,000 --> 00:23:03,000 Jak to uděláme? 311 00:23:03,000 --> 00:23:11,000 Co by být dobrá strategie pro rozjíždění tento kód? 312 00:23:11,000 --> 00:23:16,000 Musíte vybrat číslo uprostřed. 313 00:23:16,000 --> 00:23:23,000 Jak jsme si vybrat číslo uprostřed pole? 314 00:23:23,000 --> 00:23:25,000 Nějaké návrhy? 315 00:23:25,000 --> 00:23:27,000 [Student] strlen děleno 2. 316 00:23:27,000 --> 00:23:32,000 Strlen děleno 2. To je veliký. 317 00:23:32,000 --> 00:23:35,000 Strlen práce s speciálními druhy polí. 318 00:23:35,000 --> 00:23:38,000 Jaké druhy polí? 319 00:23:38,000 --> 00:23:44,000 String pole, pole znaků. 320 00:23:44,000 --> 00:23:48,000 Je to ten samý druh konceptu, který chceme použít, 321 00:23:48,000 --> 00:23:52,000 ale nemůžeme použít strlen, protože nemáme pole znaků. 322 00:23:52,000 --> 00:23:55,000 Máme řadu ints. 323 00:23:55,000 --> 00:23:58,000 Ale co strlen si pro nás? 324 00:23:58,000 --> 00:24:01,000 Víte, co to bude pro nás? 325 00:24:01,000 --> 00:24:03,000 [Student] strlen získá nám délku. 326 00:24:03,000 --> 00:24:05,000 Přesně tak, to bude nám délku. 327 00:24:05,000 --> 00:24:09,000 Strlen dostane délku pole pro nás. 328 00:24:09,000 --> 00:24:14,000 >> Jak jsme se dostali, že v našem programu binární vyhledávání? 329 00:24:14,000 --> 00:24:18,000 Jak byste si délku pole? 330 00:24:18,000 --> 00:24:20,000 [Student] strlen? 331 00:24:20,000 --> 00:24:25,000 Můžete si délku správně formátovaný pole řetězce C s strlen. 332 00:24:25,000 --> 00:24:31,000 Problém však je, že nemáme pole řetězců. 333 00:24:31,000 --> 00:24:36,000 Podíváme-li se zpět na tento kód, máme tuto integer pole. 334 00:24:36,000 --> 00:24:38,000 Jak můžeme vědět, jak dlouho to je? 335 00:24:38,000 --> 00:24:44,000 [Student] Je tam ekvivalent jeden pro koncový bod, jako je int l nebo tak něco? 336 00:24:44,000 --> 00:24:49,000 Ukazuje se, že ve skutečnosti není, a tak v jistém smyslu to je 337 00:24:49,000 --> 00:24:52,000 jedna z těch věcí, které je jen dobré vědět o C, 338 00:24:52,000 --> 00:24:57,000 že neexistuje žádný způsob, jak dostat délku pole 339 00:24:57,000 --> 00:24:59,000 pokud vše, co jsem vám je pole. 340 00:24:59,000 --> 00:25:02,000 Důvod, proč pracuje s řetězci, důvod strlen práce, 341 00:25:02,000 --> 00:25:06,000 Je tomu tak proto, pokud řetězec je správný formát, 342 00:25:06,000 --> 00:25:12,000 bude mít zvláštní, že \ 0 znak na samém konci. 343 00:25:12,000 --> 00:25:16,000 >> Můžete si také představit, pokud máte nesprávně formátovaný řetězec 344 00:25:16,000 --> 00:25:20,000 a není tam žádný \ 0 znak tam, pak celá věc nefunguje. 345 00:25:20,000 --> 00:25:22,000 [Student] Můžete přidat \ 0? 346 00:25:22,000 --> 00:25:24,000 My by v tomto případě. 347 00:25:24,000 --> 00:25:29,000 Mohli bychom přidat nějaký \ 0 348 00:25:29,000 --> 00:25:33,000 nebo nějaký znamenat charakter a pak ji využít. 349 00:25:33,000 --> 00:25:36,000 Ale to není úplně to fungovat 350 00:25:36,000 --> 00:25:40,000 protože \ 0 je pro char typu, 351 00:25:40,000 --> 00:25:43,000 a tady máme ints. 352 00:25:43,000 --> 00:25:46,000 Druhá věc je, pokud bychom měli použít speciální hodnotu 353 00:25:46,000 --> 00:25:49,000 jako -1 označit konec pole 354 00:25:49,000 --> 00:25:54,000 pak bychom mohli po uložení -1 v našich celočíselných polí. 355 00:25:54,000 --> 00:25:56,000 Měli bychom být přilepená. 356 00:25:56,000 --> 00:26:00,000 Ukazuje se, že jediný způsob, jak se dostat na délku 357 00:26:00,000 --> 00:26:03,000 z pole v C je skutečně pamatovat 358 00:26:03,000 --> 00:26:08,000 když jej nastavit a pak projít kolem s poli 359 00:26:08,000 --> 00:26:14,000 tak, že kdykoli mám funkci, která to udělá nějakou práci 360 00:26:14,000 --> 00:26:18,000 na pole celých čísel nebo plováky nebo čtyřhra, nebo to, co jste, 361 00:26:18,000 --> 00:26:22,000 Také jsem dát tato funkce Array na délku, 362 00:26:22,000 --> 00:26:26,000 a to je přesně to, co jsme udělali tady v vyhledávací funkce. 363 00:26:26,000 --> 00:26:30,000 Když se podíváte, co jsme udělali, když jsme se projít v našem poli tady, 364 00:26:30,000 --> 00:26:36,000 jsme také projít v délce, velikosti. 365 00:26:36,000 --> 00:26:41,000 Prostě se to stane, že jsme nazvali tuto proměnnou zde, 366 00:26:41,000 --> 00:26:43,000 tento parametr nebo argument. 367 00:26:43,000 --> 00:26:46,000 To se nazývá funkce, je seznam argument nebo parametr seznam, 368 00:26:46,000 --> 00:26:51,000 a tito jsou také nazýváni argumenty nebo parametry. 369 00:26:51,000 --> 00:26:53,000 Lidé používají různé termíny v různých časech. 370 00:26:53,000 --> 00:26:55,000 Někdy střídat je sám. 371 00:26:55,000 --> 00:27:00,000 To jen tak se stane, že tato proměnná je zde pojmenovány podobně 372 00:27:00,000 --> 00:27:03,000 k tomu # define tady. 373 00:27:03,000 --> 00:27:06,000 Ale nejsou to samé. 374 00:27:06,000 --> 00:27:11,000 Kapitalizace záleží. 375 00:27:11,000 --> 00:27:14,000 >> Pokud se podíváte na to, co se zde děje, prohlašujeme 376 00:27:14,000 --> 00:27:18,000 naše int pole, které jsme jen čísla. 377 00:27:18,000 --> 00:27:23,000 Dali jsme to na naši velikost, která odpovídá našemu # definovat až na vrcholu. 378 00:27:23,000 --> 00:27:27,000 Bude to být 8. 379 00:27:27,000 --> 00:27:35,000 A pak, když jsme se pak zavolat na naši funkci vyhledávání dole, 380 00:27:35,000 --> 00:27:40,000 jsme se projít v počtu chceme hledat, které jsme vyzváni, 381 00:27:40,000 --> 00:27:43,000 dostal od uživatele. 382 00:27:43,000 --> 00:27:46,000 Míjíme v poli, tento čísla, 383 00:27:46,000 --> 00:27:51,000 a pak také musíme projít ve velikosti pole, 384 00:27:51,000 --> 00:27:57,000 a pak je hodnota velikosti 8 je uložena 385 00:27:57,000 --> 00:28:01,000 nebo předány k této celočíselné proměnné nazvané velikosti. 386 00:28:01,000 --> 00:28:08,000 Máme velikost pole. 387 00:28:08,000 --> 00:28:11,000 Nyní, když se vrátíme k tomu, co mluvili dříve, 388 00:28:11,000 --> 00:28:14,000 Myslím, že Missy vychován myšlenku, že to, co jsme potřebovali udělat, je dostat délku pole 389 00:28:14,000 --> 00:28:20,000 a rozdělit ji 2, a že nám dá polovinu. 390 00:28:20,000 --> 00:28:22,000 Pojďme se podívat,. 391 00:28:22,000 --> 00:28:25,000 Mohu mít někdo napsat, a uložte jej ve svém vesmíru? 392 00:28:25,000 --> 00:28:27,000 Jak o Leila? 393 00:28:27,000 --> 00:28:31,000 Mohu mít píšete to v? 394 00:28:31,000 --> 00:28:35,000 Napište první řádek, kde budete mít délku pole a získat polovinu 395 00:28:35,000 --> 00:28:41,000 a uložit jej do nové proměnné. 396 00:28:41,000 --> 00:28:44,000 Dám vám pár sekund. Jste připraveni? 397 00:28:44,000 --> 00:28:46,000 [Student neslyšitelný] 398 00:28:46,000 --> 00:28:50,000 Jistě, mohl jsem tě vypočítat střed 399 00:28:50,000 --> 00:28:55,000 z haystack pole uvnitř vyhledávací funkce 400 00:28:55,000 --> 00:29:03,000 pomocí délku haystack pole, což je velikost variabilní? 401 00:29:03,000 --> 00:29:08,000 Nic složité tady. 402 00:29:08,000 --> 00:29:12,000 [Leila] Jen velikost / 2 a just- 403 00:29:12,000 --> 00:29:17,000 A uložit jej, a udeřil na tlačítko Uložit tady nahoře, 404 00:29:17,000 --> 00:29:19,000 a my vytáhněte ji. 405 00:29:19,000 --> 00:29:22,000 Perfect. 406 00:29:22,000 --> 00:29:28,000 Tam jdeme. Awesome. 407 00:29:28,000 --> 00:29:30,000 >> Jak je, že se to sestavit? 408 00:29:30,000 --> 00:29:32,000 [Leila] No, to musí být vyšší. 409 00:29:32,000 --> 00:29:34,000 [Nate] Jo, tak co budeme dělat? 410 00:29:34,000 --> 00:29:36,000 [Leila] Jako int střed, nebo tak něco. 411 00:29:36,000 --> 00:29:41,000 Awesome. Jo, pojďme to udělat, int midpoint = velikost. 412 00:29:41,000 --> 00:29:44,000 Bude to sestavit? 413 00:29:44,000 --> 00:29:47,000 Pojďme smazat tento komentář a dostat ji z cesty. 414 00:29:47,000 --> 00:29:50,000 Co se to zkompilovat o tom? 415 00:29:50,000 --> 00:29:52,000 Neděláme nic s integer, 416 00:29:52,000 --> 00:29:55,000 takže musíme ji vytisknout, nebo něco takového. 417 00:29:55,000 --> 00:29:58,000 Jo, přesně tak. 418 00:29:58,000 --> 00:30:00,000 Dostaneme nepoužívané proměnné. 419 00:30:00,000 --> 00:30:02,000 Co jiného se nebude pracovat o to? 420 00:30:02,000 --> 00:30:06,000 Myslím, že jsi říkal něco, Sam. Středníky. 421 00:30:06,000 --> 00:30:08,000 Jo, jsem tu chybí ty středníky. 422 00:30:08,000 --> 00:30:14,000 Je to bude konstantní věc v celém průběhu funkčního období. 423 00:30:14,000 --> 00:30:17,000 Poslední věc udělám je, že jsem si dal nějaký bílý prostor na obou stranách 424 00:30:17,000 --> 00:30:23,000 tohoto operátora zde, protože to je obvykle, jak to děláme 425 00:30:23,000 --> 00:30:26,000 podle našeho stylu průvodce. 426 00:30:26,000 --> 00:30:29,000 Máme polovinu našeho pole. 427 00:30:29,000 --> 00:30:32,000 Nyní, když si vzpomeneme zpět do našeho algoritmu, 428 00:30:32,000 --> 00:30:37,000 co byl druhý krok, který jsme museli dělat, když máme střed? 429 00:30:37,000 --> 00:30:42,000 [Student] Pokud to je větší [neslyšitelné]. 430 00:30:42,000 --> 00:30:48,000 Jo, takže musíme udělat nějaký srovnání, a to, co jsme porovnáním tady? 431 00:30:48,000 --> 00:30:53,000 Říkal jste, že pokud je větší než. Co je v této větě na mysli? 432 00:30:53,000 --> 00:30:57,000 Počet, že přijde, pokud je to větší než středu, pak se do pole? 433 00:30:57,000 --> 00:31:05,000 Přesně tak, číslo, které přichází, když jsme- 434 00:31:05,000 --> 00:31:10,000 Jehla, takže jsme ve srovnání s jehlou, 435 00:31:10,000 --> 00:31:12,000 a co jsme porovnáním proti jehly? 436 00:31:12,000 --> 00:31:15,000 Vzhledem k tomu, jehla je to, co jsme hledali. 437 00:31:15,000 --> 00:31:18,000 Jsme srovnání se dostat do středu. 438 00:31:18,000 --> 00:31:21,000 >> Ale to smysl zkontrolovat, 439 00:31:21,000 --> 00:31:27,000 Pokud needle = střed? 440 00:31:27,000 --> 00:31:32,000 Dává to smysl? 441 00:31:32,000 --> 00:31:35,000 Má někdo nesouhlasí? 442 00:31:35,000 --> 00:31:40,000 Pojďme to zkusit, pokud (jehla == střed). 443 00:31:40,000 --> 00:31:42,000 [Student] Líbí printf jste ji našli. 444 00:31:42,000 --> 00:31:51,000 [Nate] printf ("Našli jsme ji \ n!"); 445 00:31:51,000 --> 00:31:56,000 Jinak-Jdu začít dělat něco jiného tady. 446 00:31:56,000 --> 00:32:00,000 Chystám se začít dávat rovnátka kolem if celou dobu 447 00:32:00,000 --> 00:32:05,000 jen proto, že když přidáme další věci, pak 448 00:32:05,000 --> 00:32:07,000 nemáme se kompilátory. 449 00:32:07,000 --> 00:32:09,000 Jo, Sam. Máš pravdu. 450 00:32:09,000 --> 00:32:12,000 Problém je, že střed představuje pozici v poli, 451 00:32:12,000 --> 00:32:15,000 ale můžete dostat která představuje hodnotu v této poloze v poli. 452 00:32:15,000 --> 00:32:17,000 To je skvělé místo. 453 00:32:17,000 --> 00:32:19,000 Bylo všichni slyšeli, co řekl Sam? 454 00:32:19,000 --> 00:32:22,000 On říkal, že střed, jak je 455 00:32:22,000 --> 00:32:28,000 představuje jen místo v poli, ale není to skutečný prvek pole. 456 00:32:28,000 --> 00:32:30,000 Pokud si myslíte, že informace o kódu, jako písemné teď, 457 00:32:30,000 --> 00:32:35,000 Podíváme-li se na tomto poli se sem, který má 8 elementy v tom, 458 00:32:35,000 --> 00:32:39,000 co je hodnota střed bude v této funkci? 459 00:32:39,000 --> 00:32:41,000 [Student] 4. 460 00:32:41,000 --> 00:32:45,000 [Nate] 4. 461 00:32:45,000 --> 00:32:51,000 Podíváme-li se na čísla 4 - 462 00:32:51,000 --> 00:32:54,000 a my můžeme jen spustit tento kód a dát trochu smutný obličej v tu 463 00:32:54,000 --> 00:32:58,000 protože jsme nenašli to, když narazíme tento kód 464 00:32:58,000 --> 00:33:04,000 jak je teď, nahrát, stavebniny, dovolte mi, abych přejděte dolů, 465 00:33:04,000 --> 00:33:09,000 a když se podíváme na čísla 4, 466 00:33:09,000 --> 00:33:18,000 jsme ho našli, ale my jsme nedostali to printf ano. 467 00:33:18,000 --> 00:33:23,000 Jedním z důvodů je to, že jsme neměli vrátit true, 468 00:33:23,000 --> 00:33:26,000 ale jsme opravdu najít číslo 4? 469 00:33:26,000 --> 00:33:28,000 A Sam se říkat ne. 470 00:33:28,000 --> 00:33:31,000 Co jsme zjistili? 471 00:33:31,000 --> 00:33:35,000 Jsme opravdu našli střed, který, pokud se díváme na pole tady dole, 472 00:33:35,000 --> 00:33:38,000 to bude prvek na indexu 4, že se díváme na, 473 00:33:38,000 --> 00:33:42,000 která je 23. 474 00:33:42,000 --> 00:33:46,000 >> Jak se vlastně dostat, že prvek ve středu 475 00:33:46,000 --> 00:33:48,000 a ne jen střed sám? 476 00:33:48,000 --> 00:33:52,000 [Student] Rádi bychom zadat char, nebo tak něco? 477 00:33:52,000 --> 00:33:55,000 Co by to bylo, jen ze zvědavosti? 478 00:33:55,000 --> 00:33:57,000 Můžete upřesnit, trochu víc? 479 00:33:57,000 --> 00:34:02,000 Musíte změnit pozici v počtu, 480 00:34:02,000 --> 00:34:05,000 takže musíš dělat některé připojení Myslím, že je to char, ale to nemusí být. 481 00:34:05,000 --> 00:34:07,000 Jo, to je dobrá připomínka. 482 00:34:07,000 --> 00:34:12,000 Dělali jsme hodně tohoto konvertujícího pozic do znaků, tyto znaky, 483 00:34:12,000 --> 00:34:14,000 v prvních dvou problémových souborů. 484 00:34:14,000 --> 00:34:18,000 Ukazuje se, že zde je to téměř podobné 485 00:34:18,000 --> 00:34:24,000 přístup k Ith znak v řetězci, pokud to dává smysl. 486 00:34:24,000 --> 00:34:30,000 Zde chceme získat přístup k midpoint prvek. 487 00:34:30,000 --> 00:34:34,000 Jak to uděláme? 488 00:34:34,000 --> 00:34:39,000 Kevin, máte nějaké návrhy, jak bychom mohli udělat, že? 489 00:34:39,000 --> 00:34:44,000 Dalo by se to kupka sena, otevřený držák, střední, uzavřená držák. 490 00:34:44,000 --> 00:34:46,000 Můžete napsat, že pro nás? 491 00:34:46,000 --> 00:34:51,000 Uložte ho tady, a my vytáhnout, že až. 492 00:34:51,000 --> 00:34:56,000 Díváme se na tomto řádku 9, 493 00:34:56,000 --> 00:34:59,000 a my jsme si uvědomili, že nechceme srovnávat jehlu do středu, 494 00:34:59,000 --> 00:35:03,000 ale místo toho, chceme porovnat jehlu 495 00:35:03,000 --> 00:35:07,000 k prvku v poloze středu v naší haystack pole. 496 00:35:07,000 --> 00:35:10,000 Cool. 497 00:35:10,000 --> 00:35:12,000 Tam jdeme. 498 00:35:12,000 --> 00:35:15,000 Jo, to vypadá docela dobře, pokud (jehla == haystack [midpoint]). 499 00:35:15,000 --> 00:35:18,000 Našli jsme ho. 500 00:35:18,000 --> 00:35:22,000 Nyní, když jsme se spustit kód-Dáme zpět do trochu- 501 00:35:22,000 --> 00:35:26,000 sestavuje, běží, a teď když se podíváme na 4, 502 00:35:26,000 --> 00:35:30,000 nenašli jsme ho, protože teď jsme vlastně stále číslo 23. 503 00:35:30,000 --> 00:35:33,000 Jsme získání hodnoty 23, a to je to, co jsme v porovnání s naší jehly. 504 00:35:33,000 --> 00:35:35,000 Ale to je dobře. To je krok správným směrem. 505 00:35:35,000 --> 00:35:37,000 >> To je to, co se snažíme dělat. 506 00:35:37,000 --> 00:35:40,000 Nesnažíme porovnání jehlu proti pozic v poli 507 00:35:40,000 --> 00:35:44,000 ale proti skutečných prvků v poli. 508 00:35:44,000 --> 00:35:49,000 Podíváme-li se zpět hned na další krok v našem algoritmu, 509 00:35:49,000 --> 00:35:51,000 jaký je další krok? 510 00:35:51,000 --> 00:35:57,000 Leila již zmínil krátce. 511 00:35:57,000 --> 00:36:00,000 [Student] Zkontrolujte, zda je to větší nebo menší než a pak se rozhodnout, jakým způsobem se pohybovat. 512 00:36:00,000 --> 00:36:03,000 [Nate] Jo, to by tak jak to uděláme? 513 00:36:03,000 --> 00:36:07,000 Můžete dát do nějaké-Já zachránit tuto revizi, 514 00:36:07,000 --> 00:36:13,000 a pak, když dáte v některých linek, které budou dělat, že. 515 00:36:13,000 --> 00:36:15,000 Jo, Charlotte. >> Mám dotaz. 516 00:36:15,000 --> 00:36:19,000 Neměl by to být střed - 1, protože první věc, kterou je 517 00:36:19,000 --> 00:36:26,000 je to 0 indexovány, takže když dáme 4, že to není ve skutečnosti charakter jsme hledali? 518 00:36:26,000 --> 00:36:30,000 Ano, a další problém s tím je- 519 00:36:30,000 --> 00:36:35,000 to je skvělý úlovek, protože to, co se chystá skončit se děje možná 520 00:36:35,000 --> 00:36:42,000 pokud budeme dál a my už nikdy nastavit původně? 521 00:36:42,000 --> 00:36:46,000 Myslím, že to, co bychom mohli skončit dělat se pokouší získat přístup 522 00:36:46,000 --> 00:36:49,000 prvek na 8. pozici pole, 523 00:36:49,000 --> 00:36:53,000 který je v tomto případě neexistuje. 524 00:36:53,000 --> 00:36:56,000 Budeme chtít udělat nějaké účetnictví za to, 525 00:36:56,000 --> 00:36:59,000 že máme nějakou nulovou indexování. 526 00:36:59,000 --> 00:37:05,000 [Charlotte] Omlouvám se, myslel jsem polovinu - 1 v hranatých závorkách. 527 00:37:05,000 --> 00:37:08,000 Můžeme to udělat, že. 528 00:37:08,000 --> 00:37:10,000 Vrátíme se k této otázce v jen trochu. 529 00:37:10,000 --> 00:37:13,000 Jakmile začneme se dostat do skutečné smyčky, 530 00:37:13,000 --> 00:37:16,000 to je, když budeme opravdu vidět vstupují do hry. 531 00:37:16,000 --> 00:37:21,000 V současné době, můžeme to udělat, ale ty jsi naprostou pravdu. 532 00:37:21,000 --> 00:37:28,000 To nula indexování bude mít vliv, že musíme činit. 533 00:37:28,000 --> 00:37:30,000 Pojďme se podívat,. 534 00:37:30,000 --> 00:37:34,000 >> Jak je větší než a menší než-? 535 00:37:34,000 --> 00:37:36,000 [Student] jsem si, jak to udělat větší než a menší než druhé. 536 00:37:36,000 --> 00:37:41,000 Jen jsem si nebyl jistý, co tisknout, pokud zjistíte, že je to méně než haystack středu nebo větší než. 537 00:37:41,000 --> 00:37:43,000 Zde mohu zachránit, co I've- 538 00:37:43,000 --> 00:37:47,000 [Nate] Jo, pokud si zachránit to, co máte, a my vytáhněte ji. 539 00:37:47,000 --> 00:37:49,000 Tam jdeme. 540 00:37:49,000 --> 00:37:51,000 [Student] A dal jsem otazníky, co jsem nevěděl. 541 00:37:51,000 --> 00:37:54,000 [Nate] To vypadá skvěle. 542 00:37:54,000 --> 00:37:58,000 Zde máme otazníky, protože stále nevíme 543 00:37:58,000 --> 00:38:06,000 co budeme dělat docela ještě. 544 00:38:06,000 --> 00:38:12,000 Co bychom chtěli dělat, pardon, máme nějaké závorky všichni funky na nás. 545 00:38:12,000 --> 00:38:15,000 Budeme opravit tyto rovnátka. 546 00:38:15,000 --> 00:38:19,000 Tam jdeme. 547 00:38:19,000 --> 00:38:22,000 A tak to, co chceme dělat, podle našeho algoritmu, 548 00:38:22,000 --> 00:38:27,000 pokud nebudeme najít jehlu? 549 00:38:27,000 --> 00:38:32,000 Řekněme, že v případě, že jehla je menší než to, co jsme při pohledu na. Kevin. 550 00:38:32,000 --> 00:38:34,000 Jen se podívat na levé polovině. 551 00:38:34,000 --> 00:38:40,000 Dobře, takže budeme dát komentář zde říká "podívej se na levé polovině." 552 00:38:40,000 --> 00:38:46,000 A v případě, že jehla je větší než kupce sena na středu, co chceme dělat? 553 00:38:46,000 --> 00:38:48,000 [Student] Pak se podíváte na pravé polovině. 554 00:38:48,000 --> 00:38:53,000 Podívejte se na pravé polovině, "podívej se na pravé poloviny." 555 00:38:53,000 --> 00:38:58,000 Není tak špatný. 556 00:38:58,000 --> 00:39:05,000 Dobře, takže v tomto bodě, co se hledá docela dobře. 557 00:39:05,000 --> 00:39:13,000 Problém s kódem psaným je to, co? 558 00:39:13,000 --> 00:39:15,000 [Student] Nemáte koncové body pro polovin. 559 00:39:15,000 --> 00:39:18,000 Dobře, nemáme koncové body pro polovin. 560 00:39:18,000 --> 00:39:20,000 Také jsme se jen jít přes to jednou. 561 00:39:20,000 --> 00:39:23,000 Jsme teprve ve chvíli, se podívat na jeden střed. 562 00:39:23,000 --> 00:39:27,000 Buď prvek je tam, nebo to není. 563 00:39:27,000 --> 00:39:34,000 V zájmu dokončení tohoto, budeme muset udělat nějaké opakování. 564 00:39:34,000 --> 00:39:39,000 Musíme neustále opakují, dokud nezjistíme, že 565 00:39:39,000 --> 00:39:43,000 buď element je tam proto, že jsme zúžil a nakonec zjistil, že je, 566 00:39:43,000 --> 00:39:46,000 nebo je to tam není, protože jsme se podíval přes všechny věci, 567 00:39:46,000 --> 00:39:52,000 v příslušných polovin pole a zjistil, že nic je tam. 568 00:39:52,000 --> 00:39:56,000 >> Kdykoliv jsme dostali toto opakování děje, co budeme používat? 569 00:39:56,000 --> 00:39:58,000 [Student] smyčka. 570 00:39:58,000 --> 00:40:00,000 Nějaký smyčky. Ano. 571 00:40:00,000 --> 00:40:03,000 [Student] Můžeme udělat do-while, a mít to dělat, a pak při 572 00:40:03,000 --> 00:40:10,000 jehla není rovno-nejsem jistý, kde jsem šel s tím. 573 00:40:10,000 --> 00:40:18,000 Ale něco jako to, že tak dlouho, jak to dělá ne stejná hodnota, kterou uživatel vstup. 574 00:40:18,000 --> 00:40:21,000 Jo, tak se pojďme podívat, jak to může psát sám? 575 00:40:21,000 --> 00:40:23,000 Říkal jsi, že jdeme použít do-while. 576 00:40:23,000 --> 00:40:26,000 Kde se to začalo? 577 00:40:26,000 --> 00:40:33,000 [Student] Hned po velikost / 2. 578 00:40:33,000 --> 00:40:42,000 [Nate] Dobře, a co budeme dělat? 579 00:40:42,000 --> 00:40:44,000 Budeme vyplnit chvíli později. 580 00:40:44,000 --> 00:40:46,000 Co budeme dělat? 581 00:40:46,000 --> 00:40:49,000 [Student] Copak chceme dělat všechny ty věci, které máme v případě části? 582 00:40:49,000 --> 00:40:52,000 [Nate] Do všechny ty věci, skvělé. 583 00:40:52,000 --> 00:40:55,000 Kopírování a vkládání. 584 00:40:55,000 --> 00:40:59,000 Oh, člověče. 585 00:40:59,000 --> 00:41:03,000 Uvidíme, jestli to funguje, jestli to půjde karta to znovu. 586 00:41:03,000 --> 00:41:08,000 Krásné. 587 00:41:08,000 --> 00:41:16,000 Dobře, a šetříme to tak vy si to. 588 00:41:16,000 --> 00:41:21,000 Dobře, a my se chystáme udělat to při- 589 00:41:21,000 --> 00:41:25,000 to, co bylo, když podmínka, že jsi po? 590 00:41:25,000 --> 00:41:31,000 [Student] Zatímco se jehla není rovno, tak jako vykřičník. 591 00:41:31,000 --> 00:41:37,000 Ale nejsem si jistý, co přesně to je ještě. 592 00:41:37,000 --> 00:41:39,000 [Nate] Jo, to je jeden způsob, jak to udělat. 593 00:41:39,000 --> 00:41:41,000 Sam, máte napsat komentář? 594 00:41:41,000 --> 00:41:43,000 [Sam] jsem si vzpomněl, když jsem se podívala na videa, 595 00:41:43,000 --> 00:41:48,000 Vzal jsem si screenshot z jednoho z-jako když jsme dělali pseudokódu pro to, 596 00:41:48,000 --> 00:41:52,000 tam byl nějaký vztah mezi max. a min. 597 00:41:52,000 --> 00:41:58,000 Myslím, že to bylo něco jako když max je stále méně než min. 598 00:41:58,000 --> 00:42:00,000 Mám to. 599 00:42:00,000 --> 00:42:04,000 [Sam] Nebo jako když max není menší než min nebo něco takového, 600 00:42:04,000 --> 00:42:06,000 protože to by znamenalo, že jste hledali všechno. 601 00:42:06,000 --> 00:42:13,000 >> Jo, tak co to znít jako max a min byly na mysli? 602 00:42:13,000 --> 00:42:16,000 [Sam] Hodnoty že-celá čísla, které se chystáte změnit 603 00:42:16,000 --> 00:42:18,000 vzhledem k místu, kde jsme dali polovinu. 604 00:42:18,000 --> 00:42:20,000 Přesně tak. 605 00:42:20,000 --> 00:42:24,000 [Sam] V tomto bodě, bude to [neslyšitelné] výpočet max. a min. 606 00:42:24,000 --> 00:42:29,000 Střed je to max a min nápad. 607 00:42:29,000 --> 00:42:35,000 Dává to smysl, aby lidi? 608 00:42:35,000 --> 00:42:39,000 Pokud bychom měli začít uvažovat o tom, jak budeme dělat tuto iteraci, 609 00:42:39,000 --> 00:42:43,000 máš naprostou pravdu, že chceme použít nějaký do-while. 610 00:42:43,000 --> 00:42:49,000 Ale myslím, že pokud bychom si vzpomenout, co se děje na místě tohoto pole 611 00:42:49,000 --> 00:42:53,000 a co se vlastně děje, já se chystám napsat sem- 612 00:42:53,000 --> 00:42:58,000 při prvním opakování binárního vyhledávání, máme- 613 00:42:58,000 --> 00:43:05,000 Budu používat B a E k označení začátku. 614 00:43:05,000 --> 00:43:10,000 A pak konec našeho pole. 615 00:43:10,000 --> 00:43:14,000 Víme, že začátek je na 4 támhle, 616 00:43:14,000 --> 00:43:18,000 a víme, že konec je na 108. 617 00:43:18,000 --> 00:43:23,000 Řekněme, že hledáte pro číslo 15. 618 00:43:23,000 --> 00:43:27,000 Poprvé jsme to, jak jsme viděli dříve, 619 00:43:27,000 --> 00:43:30,000 střed je buď bude 16 nebo 23 620 00:43:30,000 --> 00:43:34,000 v závislosti na tom, jak vypočítat věci. 621 00:43:34,000 --> 00:43:37,000 Vzhledem k tomu, rovnoměrně rozdělit v polovině by nám tento prostor 622 00:43:37,000 --> 00:43:42,000 mezi 16 a 23, nemůžeme rovnoměrně rozdělit 623 00:43:42,000 --> 00:43:47,000 nebo rozdělit a dostat na pravé středu. 624 00:43:47,000 --> 00:43:49,000 My se podíváme na 16. 625 00:43:49,000 --> 00:43:55,000 Budeme si uvědomit, "Hey, 16> 15, které jsme hledali." 626 00:43:55,000 --> 00:43:59,000 Poté pohled na levé polovině pole 627 00:43:59,000 --> 00:44:03,000 co skončíme dělá, je odhazovat 628 00:44:03,000 --> 00:44:07,000 celý tento horní část 629 00:44:07,000 --> 00:44:16,000 a řekl: "Dobrá, nyní naše koncový bod bude tady." 630 00:44:16,000 --> 00:44:22,000 Další iterace našeho smyčky, jsme nyní podíváme na tomto poli, 631 00:44:22,000 --> 00:44:25,000 efektivně, co jste vyloučili tuto část, protože teď 632 00:44:25,000 --> 00:44:30,000 pokud budeme brát polovinu být rozdíl mezi začátkem a koncem, 633 00:44:30,000 --> 00:44:34,000 najdeme naše střed na 8, 634 00:44:34,000 --> 00:44:40,000 které pak můžeme otestovat 8 vidět, kde je ve vztahu k počtu jsme hledali, 635 00:44:40,000 --> 00:44:44,000 15, zjistíme, že 15 je větší, 636 00:44:44,000 --> 00:44:49,000 takže se musíme přesunout do pravé části seznamu, 637 00:44:49,000 --> 00:44:51,000 které známe, protože jsme lidé, a my můžeme vidět to. 638 00:44:51,000 --> 00:44:54,000 Víme, že pravá část bude tam, kde jsme ho najít, 639 00:44:54,000 --> 00:45:01,000 ale počítač neví, že, takže to, co budeme dělat, je my budeme skutečně 640 00:45:01,000 --> 00:45:04,000 se to jít nahoru, a teď na začátku a na konci 641 00:45:04,000 --> 00:45:11,000 jsou stejné místo, takže střed stává jediným číslo v seznamu v tomto bodě, 642 00:45:11,000 --> 00:45:16,000 který je o 15, a našli jsme ho. 643 00:45:16,000 --> 00:45:21,000 Znamená to, že vrhnout nějaké světlo na tom, kde to celé max a min zápis se děje, 644 00:45:21,000 --> 00:45:24,000 sledování koncových bodů pole, aby se zjistit 645 00:45:24,000 --> 00:45:35,000 jak zúžit věci dolů? 646 00:45:35,000 --> 00:45:42,000 >> Co by se stalo, kdyby to nebylo rovno 15 teď? 647 00:45:42,000 --> 00:45:52,000 Co když jsme hledali 15, a místo toho, toto číslo bylo také 16? 648 00:45:52,000 --> 00:45:54,000 Rádi bychom říci: "Ach, to je větší. 649 00:45:54,000 --> 00:45:57,000 Chceme se vrátit k levé. " 650 00:45:57,000 --> 00:46:01,000 A my bychom přesunout náš e doprava, 651 00:46:01,000 --> 00:46:06,000 na kterém místě máme koncový bod, který by byl konfliktní. 652 00:46:06,000 --> 00:46:09,000 To by nebylo možné vyhledávat pro všechny více prvků 653 00:46:09,000 --> 00:46:13,000 protože teď máme koncový bod a naše počáteční bod, 654 00:46:13,000 --> 00:46:16,000 naše max a naše min, jsou nyní převrácený. 655 00:46:16,000 --> 00:46:23,000 Hledáme přes celé pole. Nemůžeme nic najít. 656 00:46:23,000 --> 00:46:27,000 To je bod, ve kterém bychom chtěli říci, "Dobře, budeme zastavit tento algoritmus. 657 00:46:27,000 --> 00:46:34,000 Nenašli jsme nic. My víme, že to tu není. " 658 00:46:34,000 --> 00:46:36,000 Jak se to děje? 659 00:46:36,000 --> 00:46:40,000 [Student] Jak přesně počítač přepne do konce? 660 00:46:40,000 --> 00:46:45,000 Jak konec skončit před začátkem? 661 00:46:45,000 --> 00:46:48,000 Konec skončí před začátkem 662 00:46:48,000 --> 00:46:54,000 protože matematiky, že budeme dělat pokaždé, když jsme se to udělat. 663 00:46:54,000 --> 00:47:00,000 Způsob, jakým jsme se vyměnit, je, když se podíváte na poprvé jsme udělat swapu 664 00:47:00,000 --> 00:47:03,000 kde máme začátek na 4 a konec 665 00:47:03,000 --> 00:47:13,000 celou cestu dolů na 108 a naše střed, řekněme, na 16 - 666 00:47:13,000 --> 00:47:20,000 Chystám se obnovit tuto zpátky do 15-li hledáme pro 15, 667 00:47:20,000 --> 00:47:25,000 věděli jsme, že to, co jsme udělali, když jsme zkontrolovali 16 a viděl, že to bylo větší 668 00:47:25,000 --> 00:47:28,000 a chtěl odhodit celou pravou část seznamu, 669 00:47:28,000 --> 00:47:36,000 jsme viděli, že to, co jsme chtěli udělat, je přesunout tento e tady. 670 00:47:36,000 --> 00:47:44,000 Účinně, dostal e dojatá k jednomu před středem. 671 00:47:44,000 --> 00:47:48,000 Podobně, když jsme dělali tuto iteraci algoritmu 672 00:47:48,000 --> 00:47:51,000 a střed byl v 8, 673 00:47:51,000 --> 00:47:55,000 Zjistili jsme, že 8 <15, a tak jsme chtěli přesunout b 674 00:47:55,000 --> 00:48:00,000 jedna minulost středu. 675 00:48:00,000 --> 00:48:07,000 Nyní, na začátku a na konci jsou oba společně v tomto 15. 676 00:48:07,000 --> 00:48:10,000 >> Pokud bychom se děje se podívat na jinou hodnotu, ne 15, 677 00:48:10,000 --> 00:48:14,000 nebo je-li to 15 místo toho byl 16, 678 00:48:14,000 --> 00:48:20,000 bychom zjistili, že e chceme přesunout jeden před středem. 679 00:48:20,000 --> 00:48:33,000 Nyní e by se tam hodil méně než b. 680 00:48:33,000 --> 00:48:39,000 Projděme jak jsme vlastně skončili kódování tohoto algoritmu. 681 00:48:39,000 --> 00:48:44,000 Víme, že chceme mít tuto midpoint výpočet. 682 00:48:44,000 --> 00:48:48,000 Víme také, že chceme sledovat začátek a konec pole 683 00:48:48,000 --> 00:48:51,000 z našeho aktuálního pole, takže můžeme zjistit 684 00:48:51,000 --> 00:48:56,000 kde tento levá polovina seznamu a kde pravá polovina seznamu je. 685 00:48:56,000 --> 00:49:03,000 Děláme, že se buď začíná a končí, 686 00:49:03,000 --> 00:49:07,000 nebo můžeme jim říkat min a max. 687 00:49:07,000 --> 00:49:10,000 Budu používat začínat a končit tentokrát. 688 00:49:10,000 --> 00:49:15,000 Když začneme, podíváme-li se zpět na náš příklad tady dole, 689 00:49:15,000 --> 00:49:20,000 náš začátek byl nastaven na samém začátku pole, jako přírodní. 690 00:49:20,000 --> 00:49:25,000 Co index to bylo? Co by naše začít být? 691 00:49:25,000 --> 00:49:27,000 Daniel. 692 00:49:27,000 --> 00:49:30,000 [Daniel] Haystack [0]. 693 00:49:30,000 --> 00:49:37,000 [Nate] Jo, takže jsme mohli nastavit rovná kupce sena [0]. 694 00:49:37,000 --> 00:49:40,000 Problém však je, že tento nám není pozici prvního prvku. 695 00:49:40,000 --> 00:49:45,000 To nám dává index prvního prvku nebo skutečnou hodnotou v této první pozici. 696 00:49:45,000 --> 00:49:47,000 [Student] To bude konvertovat k 0,20? 697 00:49:47,000 --> 00:49:52,000 [Nate] Co to bude dělat, je-dobře, nebude to dělat žádné konverze. 698 00:49:52,000 --> 00:49:56,000 Co to bude dělat, je to uloží 4 v zahájení, 699 00:49:56,000 --> 00:49:59,000 a pak to bude velmi těžké provést srovnání proti zahájení 700 00:49:59,000 --> 00:50:03,000 protože begin uspořádá hodnotu 4, 701 00:50:03,000 --> 00:50:06,000 která je na začátku našeho pole, 702 00:50:06,000 --> 00:50:08,000 ale chceme sledovat indexy v poli 703 00:50:08,000 --> 00:50:11,000 oproti hodnotám. 704 00:50:11,000 --> 00:50:17,000 Budeme vlastně používat 0, takhle. 705 00:50:17,000 --> 00:50:20,000 Pro ukončení pole-Charlotte přinesla to až o něco dříve. 706 00:50:20,000 --> 00:50:23,000 To je místo, kde se budeme brát v úvahu nulovou indexování. 707 00:50:23,000 --> 00:50:25,000 >> Charlotte, co je konec pole? 708 00:50:25,000 --> 00:50:28,000 Co je index na konci? 709 00:50:28,000 --> 00:50:30,000 [Charlotte] Velikost - 1. 710 00:50:30,000 --> 00:50:32,000 Jo, a jakou velikost bychom měli používat? 711 00:50:32,000 --> 00:50:35,000 Měli bychom použít kapitálu velikosti nebo malými písmeny velikost? 712 00:50:35,000 --> 00:50:37,000 Capital velikost. 713 00:50:37,000 --> 00:50:42,000 V tomto případě může být použití kapitálové velikosti. 714 00:50:42,000 --> 00:50:45,000 Pokud bychom chtěli tuto funkci je přenosný 715 00:50:45,000 --> 00:50:48,000 a používejte tuto funkci v jiných programech, 716 00:50:48,000 --> 00:50:50,000 můžeme skutečně využít malá písmena velikosti. 717 00:50:50,000 --> 00:50:52,000 Je to taky v pohodě. 718 00:50:52,000 --> 00:51:01,000 Ale Charlotte je naprosto správné, že chceme mít velikost - 1. 719 00:51:01,000 --> 00:51:03,000 V tomto bodě, 720 00:51:03,000 --> 00:51:05,000 [Student] Jak je to, že můžete použít velká velikost? 721 00:51:05,000 --> 00:51:07,000 Jak je možné, že bychom mohli použít velká velikost? 722 00:51:07,000 --> 00:51:13,000 Ukazuje se, že tyto # definuje jsou opravdu, 723 00:51:13,000 --> 00:51:19,000 pod kapotou, text jako najít a nahradit, pokud to dává smysl. 724 00:51:19,000 --> 00:51:24,000 Při kompilaci kódu, předzpracování fáze 725 00:51:24,000 --> 00:51:27,000 překladače prochází souboru, 726 00:51:27,000 --> 00:51:31,000 a vypadá to všude možně, že jste napsali kapitálu velikosti, 727 00:51:31,000 --> 00:51:39,000 a nahrazuje tento text doslova s ​​8, stejně jako to. 728 00:51:39,000 --> 00:51:42,000 V tomto smyslu je velmi odlišné od proměnné. 729 00:51:42,000 --> 00:51:45,000 Neznamená to však trvat nějaké místo v paměti. 730 00:51:45,000 --> 00:51:52,000 Je to jednoduchý textový nahradit trik. 731 00:51:52,000 --> 00:51:57,000 V tomto případě, budeme používat velikost. 732 00:51:57,000 --> 00:52:01,000 Odtud jsme chceš dělat nějaké opakování, 733 00:52:01,000 --> 00:52:03,000 a my jsme na správné cestě s naší do-while. 734 00:52:03,000 --> 00:52:08,000 Chceme udělat něco, dokud podmínka neplatí už, 735 00:52:08,000 --> 00:52:12,000 a jak jsme viděli dříve, viděli jsme, že tato podmínka 736 00:52:12,000 --> 00:52:19,000 byl opravdu, že nechceme konec 737 00:52:19,000 --> 00:52:24,000 být menší než začne. 738 00:52:24,000 --> 00:52:26,000 >> To je naše zastavení stav. 739 00:52:26,000 --> 00:52:35,000 Pokud k tomu dojde, chceme zastavit a prohlásit jako, "Hele, my jsme nic nenašli." 740 00:52:35,000 --> 00:52:43,000 Chcete-li vyjádřit to, my chceme použít nějaký smyčky. 741 00:52:43,000 --> 00:52:49,000 V tomto případě, že by bylo do-while, pro smyčky, zatímco smyčka? 742 00:52:49,000 --> 00:52:51,000 Máme do-while zde. 743 00:52:51,000 --> 00:52:53,000 Líbí se vám kluci líbí tohoto přístupu? 744 00:52:53,000 --> 00:52:59,000 Myslíte si, že bychom měli zkusit jiný přístup? 745 00:52:59,000 --> 00:53:01,000 Kevin, nějaké myšlenky? 746 00:53:01,000 --> 00:53:06,000 Mohli bychom mít while, protože víme, že maximální 747 00:53:06,000 --> 00:53:11,000 by byly vyšší než min na začátku tak jako tak. 748 00:53:11,000 --> 00:53:14,000 Jo, takže to není inicializace, která se musí stát. 749 00:53:14,000 --> 00:53:17,000 Tyto do-while smyčky jsou skvělé, když máte inicializovat 750 00:53:17,000 --> 00:53:21,000 předtím zkoušení, vzhledem k tomu, zde 751 00:53:21,000 --> 00:53:26,000 víme, že nebudeme mít reinitializing jak začít a skončit 752 00:53:26,000 --> 00:53:28,000 každé kolo ze smyčky. 753 00:53:28,000 --> 00:53:32,000 Víme, že chceme inicializovat, pak navštivte naše podmínky. 754 00:53:32,000 --> 00:53:38,000 V tomto případě, to jsem vlastně jít s jednoduchým smyčce while. 755 00:53:38,000 --> 00:53:44,000 Ukazuje se, že do-while smyčky jsou používány docela zřídka. 756 00:53:44,000 --> 00:53:49,000 Mnoho míst ani učit se while. 757 00:53:49,000 --> 00:53:53,000 Jsou dobré pro zpracování vstupů uživatele, takže jsme viděli mnoho z nich tak daleko. 758 00:53:53,000 --> 00:53:59,000 Ale normální a while jsou mnohem častější. 759 00:53:59,000 --> 00:54:03,000 Ukazuje se, že tato podmínka, jak jsou psány 760 00:54:03,000 --> 00:54:09,000 nebude opravdu nám moc dobře, a proč je to? 761 00:54:09,000 --> 00:54:11,000 Je mi líto, já nevím, jak se jmenuješ. 762 00:54:11,000 --> 00:54:13,000 Jsem Jerry. >> Líto? 763 00:54:13,000 --> 00:54:15,000 Je to B-O-R-U-I. 764 00:54:15,000 --> 00:54:18,000 Oh, dobře. 765 00:54:18,000 --> 00:54:23,000 Nevidím tě na mém seznamu. 766 00:54:23,000 --> 00:54:26,000 Oh, je to proto, že-oh, to dává smysl. 767 00:54:26,000 --> 00:54:31,000 Máte představu o tom, proč tato while nemusí fungovat, jak bylo zamýšleno, 768 00:54:31,000 --> 00:54:38,000 jak je napsáno s podmínkou? 769 00:54:38,000 --> 00:54:43,000 [Jerry] Myslíš jako chcete všechny ty věci po něm do-? 770 00:54:43,000 --> 00:54:46,000 Jo, takže to je jedna. 771 00:54:46,000 --> 00:54:49,000 Mohli bychom dát všechny tyto věci do smyčky while, což je naprosto pravdivé. 772 00:54:49,000 --> 00:54:55,000 Další věc, která je trochu problematičtější, i když, je to, že tato podmínka nebude fungovat. 773 00:54:55,000 --> 00:54:57,000 [Student] Musíte odhodit. 774 00:54:57,000 --> 00:55:04,000 Správně, takže tato podmínka nebude nikdy platit zpočátku jak jsme o tom mluvili. 775 00:55:04,000 --> 00:55:08,000 Chceme udělat něco do konce 00:55:13,000 ale chceme něco udělat, zatímco 777 00:55:13,000 --> 00:55:21,000 začít ≤ konec. 778 00:55:21,000 --> 00:55:24,000 >> Tam je to obrácení logiky tam. 779 00:55:24,000 --> 00:55:27,000 Jsem vinen dělat ty chyby pořád. 780 00:55:27,000 --> 00:55:31,000 [Student] Proč to musí být menší než nebo rovno? 781 00:55:31,000 --> 00:55:33,000 Vzhledem k tomu, pamatuješ si na případ, který jsme dostali na 782 00:55:33,000 --> 00:55:36,000 tam, kde byl jen jeden prvek, a my jsme byli dole, 783 00:55:36,000 --> 00:55:43,000 a my jsme byli při pohledu na jen 15 v našem poli? 784 00:55:43,000 --> 00:55:47,000 A naše začátek a náš konec byl stejný prvek. 785 00:55:47,000 --> 00:55:50,000 Chceme, aby se ujistil, že s nimi budeme nakládat ten případ. 786 00:55:50,000 --> 00:55:54,000 Pokud jsme rovnou menší než, 787 00:55:54,000 --> 00:55:58,000 bychom pouze možnost, aby se dostal na 2-elementu pole. 788 00:55:58,000 --> 00:56:06,000 Jakmile jsme se dostali až do toho posledního prvku, kdyby tomu tak bylo naše prvek, bychom nikdy najít. 789 00:56:06,000 --> 00:56:10,000 Nyní zde můžeme udělat přesně tak, jak jsi říkal. 790 00:56:10,000 --> 00:56:15,000 Můžeme začít plopping věci přímo do středu naší smyčce while. 791 00:56:15,000 --> 00:56:20,000 Můžeme plop v našem středu. 792 00:56:20,000 --> 00:56:24,000 Můžeme si vzít všechny tyto if, 793 00:56:24,000 --> 00:56:30,000 vytáhněte je z tohoto do-while, 794 00:56:30,000 --> 00:56:34,000 plop je v, 795 00:56:34,000 --> 00:56:39,000 čisté věci se trochu, 796 00:56:39,000 --> 00:56:48,000 a já půjdu napřed a ušetřete tuto revizi. 797 00:56:48,000 --> 00:56:53,000 A v tomto bodě, dostáváme velmi blízko. 798 00:56:53,000 --> 00:56:55,000 Sam. 799 00:56:55,000 --> 00:56:58,000 Myslím si, že také mít INT midpoint = velikost - 1/2. 800 00:56:58,000 --> 00:57:01,000 Mám to, velikost - 1/2. 801 00:57:01,000 --> 00:57:05,000 Je ještě něco, co musíme změnit na této lince? 802 00:57:05,000 --> 00:57:10,000 To byl dobrý úlovek. 803 00:57:10,000 --> 00:57:14,000 >> Co dělat velikost? Jsme neustále se měnící velikost? 804 00:57:14,000 --> 00:57:17,000 Aby se udržel řadu jako to, máme pro změnu velikosti. 805 00:57:17,000 --> 00:57:21,000 Máme-li změnit velikost pokaždé, když jsme jít kolem smyčky for. 806 00:57:21,000 --> 00:57:25,000 Ale pamatujte si, když jsme jeli přes našem příkladu jen trochu dříve, 807 00:57:25,000 --> 00:57:30,000 a měli jsme na začátku na 4 808 00:57:30,000 --> 00:57:33,000 a konec celou cestu na 108? 809 00:57:33,000 --> 00:57:35,000 Jak jsme vypočítat střed? 810 00:57:35,000 --> 00:57:38,000 Byli jsme s použitím velikost? 811 00:57:38,000 --> 00:57:40,000 Nebo jsme používali začít a skončit místo? 812 00:57:40,000 --> 00:57:42,000 To je rozdíl mezi koncem a začátkem. 813 00:57:42,000 --> 00:57:50,000 Přesně, a jak přesně bych měl napsat, že, Charlotte? 814 00:57:50,000 --> 00:57:52,000 Jen konec - začíná. 815 00:57:52,000 --> 00:57:55,000 Ty nebudou muset dělat - 1 816 00:57:55,000 --> 00:57:58,000 protože - 1 byl zahrnut do konce a začne již. 817 00:57:58,000 --> 00:58:00,000 [Nate] Skvělé, máš naprostou pravdu. 818 00:58:00,000 --> 00:58:03,000 Nemáme dělat - 1, protože to - 1 byla zahrnuta 819 00:58:03,000 --> 00:58:08,000 a vyúčtovány, budou při inicializujeme Konec proměnné. 820 00:58:08,000 --> 00:58:11,000 >> Je ještě něco, co musím udělat, syntakticky, aby tato položka smysl? 821 00:58:11,000 --> 00:58:13,000 [Student] Plus začít. >> Plus začít? 822 00:58:13,000 --> 00:58:15,000 [Student] Na konci. 823 00:58:15,000 --> 00:58:20,000 Vzhledem k tomu, je to jen počítá polovina délky. 824 00:58:20,000 --> 00:58:26,000 Musíte přidat začít. 825 00:58:26,000 --> 00:58:31,000 [Nate] Co by to spočítat pro nás? 826 00:58:31,000 --> 00:58:35,000 Budeme-li uvažovat o konci této úplně první iteraci smyčky, 827 00:58:35,000 --> 00:58:40,000 end bude v poloze indexu 7. 828 00:58:40,000 --> 00:58:43,000 Začněte v pozici 0. 829 00:58:43,000 --> 00:58:47,000 Pamatujte si, že my hledáme buď 830 00:58:47,000 --> 00:58:52,000 pozice 3 nebo 4 pozici. 831 00:58:52,000 --> 00:58:56,000 Podíváme-li se na tento matematice, jen aby to trochu víc konkrétní, 832 00:58:56,000 --> 00:59:02,000 dát nějaká čísla tady, máme 7, 0, 833 00:59:02,000 --> 00:59:10,000 tak 7-0, a pak / 2 834 00:59:10,000 --> 00:59:19,000 je 3 v celé číslo, které je. 835 00:59:19,000 --> 00:59:26,000 Pak si musíme pak přidat zpět naše začít? 836 00:59:26,000 --> 00:59:28,000 Nevíme v tomto případě. 837 00:59:28,000 --> 00:59:31,000 Na prvním iteraci, bude to v pořádku, protože end je 0. 838 00:59:31,000 --> 00:59:36,000 Ale jak jsme pokrok, děláme opravdu všechno stačí 839 00:59:36,000 --> 00:59:42,000 end - začít / 2. 840 00:59:42,000 --> 00:59:46,000 Je tu ještě jedna Trik je zde, a to je právě jedna z priorit. 841 00:59:46,000 --> 00:59:49,000 [Student] Potřebujeme závorky? 842 00:59:49,000 --> 00:59:53,000 [Nate] Přesně tak, a to proto, že pokud se nám nepodaří dát tyto závorky, 843 00:59:53,000 --> 00:59:58,000 pak tato linka bude vykládat místo 844 00:59:58,000 --> 01:00:09,000 jako (konec) - (začátek / 2), který se rozhodně nechceme. 845 01:00:09,000 --> 01:00:11,000 Dejte si pozor na ty pravidla přednost. 846 01:00:11,000 --> 01:00:15,000 [Student] Proč není konec + začít? 847 01:00:15,000 --> 01:00:17,000 Proč není konec + začít? 848 01:00:17,000 --> 01:00:19,000 [Student] Proč je to tak, že? 849 01:00:19,000 --> 01:00:24,000 Proč by to bylo +? 850 01:00:24,000 --> 01:00:26,000 Myslím, že máš pravdu. 851 01:00:26,000 --> 01:00:28,000 [Student] Vzhledem k tomu, že je to průměr? 852 01:00:28,000 --> 01:00:31,000 [Nate] End + zahájení, máš naprostou pravdu. 853 01:00:31,000 --> 01:00:34,000 Wow, jsem totálně podělal. Máš pravdu. 854 01:00:34,000 --> 01:00:39,000 Pokud bychom dělali minus, bychom chtěli přidat začít znovu přihlásit 855 01:00:39,000 --> 01:00:43,000 V tomto případě jste velmi správné, že chceme, aby se průměr dvou, 856 01:00:43,000 --> 01:00:45,000 tak jsme si chceš přidat, jak protichůdný k odečíst je. 857 01:00:45,000 --> 01:00:49,000 [Student] To by také fungovat, pokud jste konec - začít / 2 + začít. 858 01:00:49,000 --> 01:00:55,000 To by, kdyby se do-myslím, že ano. 859 01:00:55,000 --> 01:01:00,000 >> Například, pokud jsme se dívali na začátek, 860 01:01:00,000 --> 01:01:04,000 a my posunul ho sem 861 01:01:04,000 --> 01:01:08,000 na 15. 862 01:01:08,000 --> 01:01:12,000 Nyní můžete začít na pozici 2. 863 01:01:12,000 --> 01:01:15,000 Konec je na pozici 7. 864 01:01:15,000 --> 01:01:21,000 Pokud odečteme je, dostaneme 5. 865 01:01:21,000 --> 01:01:24,000 Rozdělte že 2, dostaneme 2. 866 01:01:24,000 --> 01:01:27,000 A pak přidáme 2 zpět, 867 01:01:27,000 --> 01:01:30,000 a že nás dostane na 4. pozici, 868 01:01:30,000 --> 01:01:33,000 která je právě zde, což je na střed. 869 01:01:33,000 --> 01:01:36,000 [Student] Líbí se musíme postarat o balení? 870 01:01:36,000 --> 01:01:39,000 V jakém smyslu se musíme postarat o balení? 871 01:01:39,000 --> 01:01:43,000 Pokud součet nebo rozdíl mezi 872 01:01:43,000 --> 01:01:45,000 v závislosti na tom, jak to udělat, je to sudé číslo. 873 01:01:45,000 --> 01:01:49,000 Pak počítač dostane zmatený, zda-li je to 2,5; 874 01:01:49,000 --> 01:01:52,000 se přesunete vlevo nebo vpravo určit, které je na střed? 875 01:01:52,000 --> 01:01:54,000 Mám to. 876 01:01:54,000 --> 01:01:56,000 Ukazuje se, že s celočíselném dělení, 877 01:01:56,000 --> 01:01:59,000 nemáme vůbec dostat tyto plovoucí desetinnou čárkou čísla. 878 01:01:59,000 --> 01:02:01,000 Nikdy jsme se desetinu. 879 01:02:01,000 --> 01:02:04,000 Je to úplně zlikvidovat. 880 01:02:04,000 --> 01:02:08,000 Pokud máte počítač dělení dvou int proměnné, 881 01:02:08,000 --> 01:02:11,000 a jeden je 7, a druhý je 2, 882 01:02:11,000 --> 01:02:13,000 nezískáte 3,5 jako výsledek. 883 01:02:13,000 --> 01:02:16,000 Bude se 3. 884 01:02:16,000 --> 01:02:19,000 Zbytek budou zahozeny, tak je to skutečně zaokrouhlení 885 01:02:19,000 --> 01:02:24,000 není kolo, ale podlaha, pokud jste obeznámeni s tím v matematice, 886 01:02:24,000 --> 01:02:27,000 kde jste úplně zbavit desetinné, 887 01:02:27,000 --> 01:02:31,000 a tak jste v podstatě zkracovat ji dolů na nejbližší 888 01:02:31,000 --> 01:02:33,000 Vcelku pozice, na nejbližší celé číslo. 889 01:02:33,000 --> 01:02:38,000 [Student] Ale pak je to problematické, protože pokud máte pole 7 prvků 890 01:02:38,000 --> 01:02:43,000 pak to automaticky bere třetí prvek z středu místo 4.. 891 01:02:43,000 --> 01:02:46,000 Jak se s tím vypořádat? 892 01:02:46,000 --> 01:02:49,000 Je to problematické, protože pokud jsme měli řadu 7, 893 01:02:49,000 --> 01:02:54,000 to by si vybral třetí místo 4.. 894 01:02:54,000 --> 01:02:56,000 Mohl byste vysvětlit trochu víc? 895 01:02:56,000 --> 01:02:59,000 [Student] Protože pokud máte 7 prvků pak 4. prvek 896 01:02:59,000 --> 01:03:04,000 by být středem, ne? 897 01:03:04,000 --> 01:03:07,000 Nezapomeňte svůj komentář o tom, že nula indexovány, ačkoli. 898 01:03:07,000 --> 01:03:10,000 [Student] Jo, tak v poloze 3. To by bylo na střed. 899 01:03:10,000 --> 01:03:12,000 Jo. 900 01:03:12,000 --> 01:03:16,000 Oh, dobře. Chápu, co máte na mysli. 901 01:03:16,000 --> 01:03:19,000 Je to trochu divné, jak jsme si zvyknout na celé této představě 902 01:03:19,000 --> 01:03:22,000 jak se zbavit desetinných míst. 903 01:03:22,000 --> 01:03:26,000 To je skvělé místo. 904 01:03:26,000 --> 01:03:30,000 Pojďme dokončit tuto nahoru. 905 01:03:30,000 --> 01:03:32,000 Jsme počítá náš střed. 906 01:03:32,000 --> 01:03:37,000 >> Testujeme, zda naše jehla se rovná střední hodnotě. 907 01:03:37,000 --> 01:03:41,000 Jsme tisk, že jsme ho našli, ale opravdu, co chceme dělat v této situaci? 908 01:03:41,000 --> 01:03:46,000 Našli jsme to, a tak chceme, aby volající, že jsme ho našli. 909 01:03:46,000 --> 01:03:49,000 Máme funkci, která je boolean zadaný funkce. 910 01:03:49,000 --> 01:03:54,000 Jak jsme signál k volajícímu naší funkce, která jsme připraveni jít 911 01:03:54,000 --> 01:03:58,000 je řekneme, "Hele, to je pravda." 912 01:03:58,000 --> 01:04:00,000 Jak bychom to dělali, Kevine? 913 01:04:00,000 --> 01:04:02,000 Jste kývl hlavou. >> [Kevin] Přidat return true. 914 01:04:02,000 --> 01:04:06,000 [Nate] Přesně tak, vrátí true. 915 01:04:06,000 --> 01:04:12,000 Nyní, pokud to není stejné, jak by se podíváme na levé polovině? 916 01:04:12,000 --> 01:04:16,000 Nějaké nápady? 917 01:04:16,000 --> 01:04:18,000 Stella, nějaké nápady? 918 01:04:18,000 --> 01:04:21,000 Musíte nastavit novou pozici pro konec. 919 01:04:21,000 --> 01:04:23,000 Jo. 920 01:04:23,000 --> 01:04:29,000 Takže musíme udělat pozice středu - konec. 921 01:04:29,000 --> 01:04:33,000 Great. 922 01:04:33,000 --> 01:04:36,000 Musíme nastavit novou pozici na konci 923 01:04:36,000 --> 01:04:38,000 podívat se na levé polovině. 924 01:04:38,000 --> 01:04:41,000 To bylo to, co jsme o tom mluvili před, kde 925 01:04:41,000 --> 01:04:44,000 Pořád se vrací k tomuto příkladu. 926 01:04:44,000 --> 01:04:50,000 Jsem začít tady, a pak jsem se nakonec všichni cestu přes tu. 927 01:04:50,000 --> 01:04:53,000 >> Opět platí, že pokud jsme hledali 15, a náš střed je 16, 928 01:04:53,000 --> 01:04:56,000 a my si uvědomit, "Oops, 16 je větší. 929 01:04:56,000 --> 01:04:59,000 Chceme přesunout na levou polovinu. " 930 01:04:59,000 --> 01:05:02,000 Pak bychom přesunout konec 15, 931 01:05:02,000 --> 01:05:06,000 a my, že tím, že jeden od středu 932 01:05:06,000 --> 01:05:09,000 a nastavení, které jako náš nový konci. 933 01:05:09,000 --> 01:05:12,000 Podobně, pokud se chcete podívat na pravou polovinu, jak by to dělali? 934 01:05:12,000 --> 01:05:14,000 Máte nějaký nápad? 935 01:05:14,000 --> 01:05:22,000 [Student] Stačí nastavit začít midpoint + 1. 936 01:05:22,000 --> 01:05:24,000 [Nate] Great. 937 01:05:24,000 --> 01:05:29,000 A nyní v případě, že jsme nic nenajdeme, 938 01:05:29,000 --> 01:05:32,000 to, že se postaral o pro nás? 939 01:05:32,000 --> 01:05:36,000 Daniel, to, že si postaráno o nás? 940 01:05:36,000 --> 01:05:38,000 [Daniel] č. 941 01:05:38,000 --> 01:05:40,000 [Nate] Pokud bychom dělat to přes celé pole a my nic nenajdeme, 942 01:05:40,000 --> 01:05:42,000 kde by to být postaráno, nebo bychom měli postarat se o to? 943 01:05:42,000 --> 01:05:44,000 [Daniel], zatímco podmínka. 944 01:05:44,000 --> 01:05:48,000 [Nate] Jo, a zároveň podmínka, přesně. 945 01:05:48,000 --> 01:05:51,000 To se bude starat o prochází celé pole, pokud nenajdeme nic. 946 01:05:51,000 --> 01:05:53,000 Tento cyklus while skončí. 947 01:05:53,000 --> 01:05:56,000 Nikdy nebudeme se setkali tuto podmínku, 948 01:05:56,000 --> 01:06:03,000 a můžeme se vrátit false. 949 01:06:03,000 --> 01:06:10,000 Můžeme také nechat tuto možnost, pokud tady takhle 950 01:06:10,000 --> 01:06:14,000 protože pokud tuto možnost, pokud tvrzení je pravdivé, 951 01:06:14,000 --> 01:06:16,000 a naše funkce vrátí, 952 01:06:16,000 --> 01:06:21,000 a tak budeme podstatě přeruší tato funkce v tomto bodě 953 01:06:21,000 --> 01:06:24,000 když se vrátíme true. 954 01:06:24,000 --> 01:06:28,000 Ale co se stane s touto strukturou tady? 955 01:06:28,000 --> 01:06:34,000 Bude to fungovat úplně, nebo je tam nějaký logický chyba tam? 956 01:06:34,000 --> 01:06:37,000 >> Tam je nějaký logický chyba tam, s tím, jak to nastavit. 957 01:06:37,000 --> 01:06:40,000 Co by mohlo být? 958 01:06:40,000 --> 01:06:43,000 [Student] Proč potřebujete - a + 1s? 959 01:06:43,000 --> 01:06:47,000 , Která stanovuje naší nabídku tak, aby byly naše nová levá polovina a pravá polovina. 960 01:06:47,000 --> 01:06:51,000 [Student] Ale proč by nemohla to udělat, aniž by - 1s a + 1s? 961 01:06:51,000 --> 01:06:53,000 [Nate] Dalo by se nastavit rovná středu? 962 01:06:53,000 --> 01:07:04,000 Co by mohlo být problematické, že? 963 01:07:04,000 --> 01:07:08,000 [Student] Myslím, že je to neefektivní, protože máte kontrolu hodnotu, která je již zkontrolovat. 964 01:07:08,000 --> 01:07:11,000 [Nate] Přesně tak, Sam je úplně pravdu. 965 01:07:11,000 --> 01:07:15,000 Pokud se nastavit konec a začne se rovná středu 966 01:07:15,000 --> 01:07:18,000 místo - 1 a + 1 zamyšleně, 967 01:07:18,000 --> 01:07:22,000 v určitém okamžiku v budoucnosti budeme nakonec kontrolu střed znovu. 968 01:07:22,000 --> 01:07:26,000 [Student] Začal jsem PSet, a pak jsem měl něco takového 969 01:07:26,000 --> 01:07:30,000 kde jsem zapomněl + 1, a to uvízl v nekonečné smyčce. 970 01:07:30,000 --> 01:07:34,000 Jasně, protože v určitém okamžiku budete nikdy dostat začít a skončit 971 01:07:34,000 --> 01:07:39,000 skutečně překrývají. 972 01:07:39,000 --> 01:07:41,000 Cool. 973 01:07:41,000 --> 01:07:44,000 Je tu ještě jedna logická chyba, a to je, že by to mělo být určitě 974 01:07:44,000 --> 01:07:48,000 else if. 975 01:07:48,000 --> 01:07:55,000 Proč by to mohlo být? 976 01:07:55,000 --> 01:07:59,000 >> Důvodem je, pokud to není jinak, pokud-jsi viděl, Kevin? 977 01:07:59,000 --> 01:08:02,000 [Kevin] Jo, protože měníte koncový bod. 978 01:08:02,000 --> 01:08:05,000 [Nate] Přesně tak. 979 01:08:05,000 --> 01:08:07,000 Měníme koncový bod, 980 01:08:07,000 --> 01:08:12,000 a pokud je to napsáno takto-Dáme aby mezery mezi- 981 01:08:12,000 --> 01:08:14,000 bude kontrolovat tento případ. 982 01:08:14,000 --> 01:08:18,000 Tento případ, pokud se podaří, zmizí, z funkce. 983 01:08:18,000 --> 01:08:21,000 Pak to bude kontrolovat tuto další případ, 984 01:08:21,000 --> 01:08:24,000 a je-li to podaří, upraví na koncový bod, 985 01:08:24,000 --> 01:08:28,000 a pak to bude pokračovat a zjistit tento případ. 986 01:08:28,000 --> 01:08:31,000 Ale v tomto bodě, nechceme, aby i nadále kontrolu. 987 01:08:31,000 --> 01:08:35,000 Naštěstí, jsme se obnovit polovinu tady, 988 01:08:35,000 --> 01:08:39,000 a víme, že tento případ nebude úspěšná. 989 01:08:39,000 --> 01:08:44,000 Ale my určitě chceme dát else, pokud tam 990 01:08:44,000 --> 01:08:48,000 i přesto, že by mohl v tomto případě 991 01:08:48,000 --> 01:08:52,000 protože nejsme nastavení středového bodu, by to dělat rozdíl? 992 01:08:52,000 --> 01:08:54,000 Ne, protože tyto případy jsou exkluzivní. 993 01:08:54,000 --> 01:08:58,000 Opět, můj špatný. 994 01:08:58,000 --> 01:09:01,000 Nechceme, myslím, je třeba tuto else if. 995 01:09:01,000 --> 01:09:05,000 Můžeme to zkusit a spustit jej a uvidíte, co se stane. 996 01:09:05,000 --> 01:09:08,000 Budova, došlo k chybě. 997 01:09:08,000 --> 01:09:12,000 Je to pravděpodobně proto, že jsem opustil to b je a ŽP tady. 998 01:09:12,000 --> 01:09:14,000 Mám víc těch, kteří se na vrcholu? 999 01:09:14,000 --> 01:09:16,000 To nevypadá to. 1000 01:09:16,000 --> 01:09:20,000 My oddálit, vybudovat, 1001 01:09:20,000 --> 01:09:24,000 tam to jde, takže teď, když hledáme 15, 1002 01:09:24,000 --> 01:09:28,000 Ano. 1003 01:09:28,000 --> 01:09:30,000 Dovolte mi, abych Zoom 1004 01:09:30,000 --> 01:09:33,000 15, ano. Můžeme spustit znovu. 1005 01:09:33,000 --> 01:09:36,000 Nahrání zdrojový kód, stavební, běh. 1006 01:09:36,000 --> 01:09:41,000 Můžeme hledat něco jako 13, 1007 01:09:41,000 --> 01:09:45,000 a nemáme dostat něco vytisknout, tak to není zjištění, že pro nás. 1008 01:09:45,000 --> 01:09:51,000 To je skvělé, protože to není v našem seznamu. 1009 01:09:51,000 --> 01:09:53,000 >> Jsme nyní opožděně. 1010 01:09:53,000 --> 01:09:55,000 To bude mít to pro tento týden. 1011 01:09:55,000 --> 01:10:00,000 Díky za vstup, a uvidíme se později. 1012 01:10:00,000 --> 01:10:02,000 >> [CS50.TV]