1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:02,640 ZAMYLA Chan: Je to-me, Zamyla. 3 00:00:02,640 --> 00:00:06,950 Dnes budeme realizovat Mario, kde čerpáme Mario 4 00:00:06,950 --> 00:00:10,730 plná pyramida pro něj přeskočit. 5 00:00:10,730 --> 00:00:14,430 Pojďme rozebrat dílčí úkoly tohoto problému. 6 00:00:14,430 --> 00:00:17,930 >> Za prvé, chceme vyzvat uživatele pro výšku pyramidy. 7 00:00:17,930 --> 00:00:20,510 A pak chceme, aby se ujistil, že tento vstup je platný. 8 00:00:20,510 --> 00:00:23,280 A pak budeme chcete nakreslit pyramidy. 9 00:00:23,280 --> 00:00:26,850 >> Takže pojďme mluvit o dotazování a ověřování vstup uživatele. 10 00:00:26,850 --> 00:00:29,920 Mohlo by to vypadat to, do-while, že 11 00:00:29,920 --> 00:00:33,250 vyzve uživatele k integer a pak jen opakuje 12 00:00:33,250 --> 00:00:35,700 v případě, že číslo je neplatné. 13 00:00:35,700 --> 00:00:38,220 Takže to, co by tato podmínka měla být? 14 00:00:38,220 --> 00:00:40,630 >> K tomu, vraťme specifikaci. 15 00:00:40,630 --> 00:00:46,240 No, spec nám říká, že jakýkoli platný výška bude mezi 0 a 23, 16 00:00:46,240 --> 00:00:47,350 inclusive. 17 00:00:47,350 --> 00:00:51,400 A tak, že znamená, že jakékoli neplatné výška bude menší než 0 18 00:00:51,400 --> 00:00:53,840 nebo více než 23. 19 00:00:53,840 --> 00:00:57,220 >> Takže teď, že máme tuto informaci, Pojďme vytvořit naši kondici. 20 00:00:57,220 --> 00:00:59,230 Ale musíme být opatrní, protože nyní máme 21 00:00:59,230 --> 00:01:02,130 Dva Booleans, které chceme hodnotit. 22 00:01:02,130 --> 00:01:04,150 >> Tady jsem vám poskytl s pravdivostní tabulky. 23 00:01:04,150 --> 00:01:07,520 To nám umožní přijmout dva Booleans, Boolean jedna a dvě. 24 00:01:07,520 --> 00:01:13,600 A můžeme hodnotit ani bool1 a bool2 nebo bool1 nebo bool2. 25 00:01:13,600 --> 00:01:17,390 >> Takže jaký je rozdíl a mezi nimi a nebo? 26 00:01:17,390 --> 00:01:21,810 No, bool1 a bool2 bude vyhodnotí na true právě tehdy, 27 00:01:21,810 --> 00:01:25,680 pokud jsou splněny obě Booleans, vzhledem k tomu, nebo provoz 28 00:01:25,680 --> 00:01:30,190 bude platit pokud se některá ze že Booleans nebo obě jsou pravdivé. 29 00:01:30,190 --> 00:01:33,110 Takže s tím na mysli, uvidíme, jestli můžete přijít na to, 30 00:01:33,110 --> 00:01:37,460 jaký by byl vhodný podmínkou Vaše do-while za neplatnou n 31 00:01:37,460 --> 00:01:38,850 bude. 32 00:01:38,850 --> 00:01:43,540 >> S tím jsme vyzváni a ověřeny Uživatel pro výšku pyramidy 33 00:01:43,540 --> 00:01:44,550 že chtějí. 34 00:01:44,550 --> 00:01:47,740 Takže teď je to na nás nakreslit pyramidy. 35 00:01:47,740 --> 00:01:50,520 Plná pyramida pro toto Problém bude vypadat trochu 36 00:01:50,520 --> 00:01:56,340 jako je tento, kde máme levé pyramidy, některé mezery, a pak hned pyramidy. 37 00:01:56,340 --> 00:01:58,630 Takže pojďme rozčlenit tento systém trochu. 38 00:01:58,630 --> 00:02:03,510 >> Pokud bych jít do mého textového editoru, zde jsem tažené nám pyramidu zarovnaný doleva. 39 00:02:03,510 --> 00:02:05,160 Ale to nebude dělat. 40 00:02:05,160 --> 00:02:10,139 To, co chceme udělat, je chceme Vytvoření zarovnaný vpravo pyramidu jako první. 41 00:02:10,139 --> 00:02:13,580 Tak, jak to udělat, aby stačí stisknout moje hashes podél na stranu, 42 00:02:13,580 --> 00:02:18,240 Právě jdu dát některé znaky mezi tím, právě těchto teček. 43 00:02:18,240 --> 00:02:22,560 Pak jdu dát dva na Následující řádek a jeden na tomto řádku. 44 00:02:22,560 --> 00:02:26,070 A tak tu mám zarovnaný vpravo pyramidy. 45 00:02:26,070 --> 00:02:28,540 >> Za to, že budu vrátit do horní řadě 46 00:02:28,540 --> 00:02:33,930 a dát do mezery, která je, dle specifikace, dvě mezery. 47 00:02:33,930 --> 00:02:37,680 Pak jdu k vyplnění druhé straně pyramidy. 48 00:02:37,680 --> 00:02:42,030 Chystám se jít do druhé řady, psát Dva prostory pro mezeru a poté dva 49 00:02:42,030 --> 00:02:42,920 hash. 50 00:02:42,920 --> 00:02:47,020 Zpět na třetí řadě, dvě mezery Pro mezery a tři hash. 51 00:02:47,020 --> 00:02:51,480 A na konci, dvě mezery pro mezeru a čtyři hash. 52 00:02:51,480 --> 00:02:54,400 Takže to je to, co full pyramida bude vypadat. 53 00:02:54,400 --> 00:02:57,260 >> Samozřejmě, že nechceme Tyto tečky v cestě. 54 00:02:57,260 --> 00:03:01,220 Takže budeme nahradit tyto body tím, že některé mezery. 55 00:03:01,220 --> 00:03:03,720 Jedna, dvě, tři na prvním řádku. 56 00:03:03,720 --> 00:03:05,650 Jedna, dva na druhém. 57 00:03:05,650 --> 00:03:08,200 A jeden na třetím řádku. 58 00:03:08,200 --> 00:03:12,060 Tak tohle je to, co budeme dělat, když my chtěl jen udělat plnou pyramidu, 59 00:03:12,060 --> 00:03:13,700 říkat, v našem textovém editoru. 60 00:03:13,700 --> 00:03:15,860 >> Takže berme to, pochopení vzory, 61 00:03:15,860 --> 00:03:19,870 a převést ji do jisté pseudokódu. 62 00:03:19,870 --> 00:03:24,500 Pro každý řádek pyramidy, chceme vytisknout levý pyramidu a poté 63 00:03:24,500 --> 00:03:26,580 mezera a poté pravé pyramida. 64 00:03:26,580 --> 00:03:30,260 Pro levou pyramidy, tiskneme Potřebný objem prostorů, 65 00:03:30,260 --> 00:03:31,740 následuje hash kódy. 66 00:03:31,740 --> 00:03:35,030 Pak jsme vytisknout schodek, který je jen dva prostory pokaždé. 67 00:03:35,030 --> 00:03:38,080 A ve správném pyramidy, tiskneme potřebný počet hash. 68 00:03:38,080 --> 00:03:41,410 >> Za druhé řadě, jsme provedli stejný přesný proces. 69 00:03:41,410 --> 00:03:44,510 Tiskneme prostory pro levý pyramida, požadovaná částka 70 00:03:44,510 --> 00:03:49,930 hashů, mezery, dvěma prostory a Potom se hash pro pravou pyramidu. 71 00:03:49,930 --> 00:03:52,490 >> Pojďme řešit vzor pro levé pyramidy. 72 00:03:52,490 --> 00:03:55,660 Kdybych měl pro účely tohoto příkladu, výška 73 00:03:55,660 --> 00:03:58,790 z osmi, o které požádal Uživatel pak moje první řádek 74 00:03:58,790 --> 00:04:01,020 bude mít jednu hash a sedm míst. 75 00:04:01,020 --> 00:04:03,860 Můj druhý řádek by měl dvě hodnoty hash, šest prostory. 76 00:04:03,860 --> 00:04:06,749 Třetí řada, tři, pět hashes prostory. 77 00:04:06,749 --> 00:04:09,040 Můžete Pravděpodobně to udělat sami o výšce osmi 78 00:04:09,040 --> 00:04:13,470 a určení, pro každý řádek, kolik hash a kolik místa budete potřebovat. 79 00:04:13,470 --> 00:04:16,209 Ale to, co chceme udělat, je Chceme-li abstraktu. 80 00:04:16,209 --> 00:04:22,660 Tak jsem vás požádat o jakékoliv n-té řádky kolik hash a kolik místa potřebujeme? 81 00:04:22,660 --> 00:04:25,410 >> Nyní, jak si určit vzor pro to, jak mnoho hashe 82 00:04:25,410 --> 00:04:29,920 a kolik místa budete potřebovat pro jakékoliv n-tý řádek pro danou výšku, 83 00:04:29,920 --> 00:04:32,910 pamatovat si dávat pozor o tom, jak jste indexování. 84 00:04:32,910 --> 00:04:37,160 Co tím chci říct je to, že v každodenních život většina z nás začít počítat o jednu. 85 00:04:37,160 --> 00:04:39,680 Takže první řadě by bylo číslo jedna. 86 00:04:39,680 --> 00:04:43,620 A v druhé řadě by řádek číslo dvě, a tak dále a tak dále. 87 00:04:43,620 --> 00:04:47,620 >> Ale v oblasti počítačové vědy a CS50 jsme zero-indexovány. 88 00:04:47,620 --> 00:04:50,750 Takže jsme vlastně začít počítat od nuly. 89 00:04:50,750 --> 00:04:54,020 Takže první řadě by být řádek číslo nula. 90 00:04:54,020 --> 00:04:56,640 A v druhé řadě by řádek číslo jedna. 91 00:04:56,640 --> 00:05:02,510 Takže kdybych měl výšku osm pro můj pyramidy, pak poslední hodnota n 92 00:05:02,510 --> 00:05:05,850 by ve skutečnosti bylo sedm a osm ne. 93 00:05:05,850 --> 00:05:07,010 >> Tak dávat pozor na to. 94 00:05:07,010 --> 00:05:10,750 A být si vědom, když jste stanovení Váš vzor, ​​zda je váš zero-indexovány 95 00:05:10,750 --> 00:05:12,360 nebo jeden-indexovány 96 00:05:12,360 --> 00:05:13,070 >> OK. 97 00:05:13,070 --> 00:05:15,380 Takže teď, že máme vzor pro levou pyramidy, 98 00:05:15,380 --> 00:05:18,650 musíme zjistit, vzor pro mezery. 99 00:05:18,650 --> 00:05:20,480 Naštěstí je to opravdu snadné. 100 00:05:20,480 --> 00:05:22,690 Je to jen vždy dva prostory. 101 00:05:22,690 --> 00:05:25,240 >> Takže teď budeme pokračovat do pravého vzoru. 102 00:05:25,240 --> 00:05:27,220 První řádek bude mít jeden hash. 103 00:05:27,220 --> 00:05:28,640 Druhý řádek, dva. 104 00:05:28,640 --> 00:05:29,530 Třetí řada, tři. 105 00:05:29,530 --> 00:05:30,790 A tak dále. 106 00:05:30,790 --> 00:05:35,540 Takže znovu, stanovit pro všechny abstraktní n a jakákoli výška kolik hash 107 00:05:35,540 --> 00:05:38,810 a kolik míst Každý řádek by měl mít. 108 00:05:38,810 --> 00:05:39,700 >> OK. 109 00:05:39,700 --> 00:05:45,050 Takže víme, že pro každou sebou jsme je třeba provést nějakou proces. 110 00:05:45,050 --> 00:05:46,600 Jak to uděláme? 111 00:05:46,600 --> 00:05:50,440 No, my používáme pro konstrukci cyklu, sestává z inicializace, 112 00:05:50,440 --> 00:05:52,310 podmínka, a aktualizace. 113 00:05:52,310 --> 00:05:54,830 Pro mohou být použity smyčky opakovat procesy. 114 00:05:54,830 --> 00:05:59,610 >> Takže říci, chci, aby to pozdravit, world 50krát, pak my pro smyčce 115 00:05:59,610 --> 00:06:03,510 bude vypadat nějak takhle, kde I inicializovat svůj proměnnou na nulu. 116 00:06:03,510 --> 00:06:06,200 Podmínkou je, že i je nižší než 50 ° C. 117 00:06:06,200 --> 00:06:09,670 A pak aktualizace je to tak přírůstků podle jednoho pokaždé. 118 00:06:09,670 --> 00:06:14,700 Takže to, co by to udělat, by bylo vytisknout Hello, world 50krát v řadě. 119 00:06:14,700 --> 00:06:18,080 >> Nyní, že jsem chtěl iteraci přes výšku pyramidy. 120 00:06:18,080 --> 00:06:21,560 Potom místo pevného kódování některé hodnoty ve stavu, 121 00:06:21,560 --> 00:06:23,280 Jen jsem použít proměnnou výšku. 122 00:06:23,280 --> 00:06:27,180 Tak co to bude dělat, je iterate přes výšku každého řádku. 123 00:06:27,180 --> 00:06:30,280 A můžu dělat něco uvnitř tělesa této smyčky. 124 00:06:30,280 --> 00:06:32,710 >> Co chceme udělat uvnitř těla smyčky? 125 00:06:32,710 --> 00:06:36,550 No, jak bylo uvedeno výše, chceme tisknout prostor a hodnoty hash 126 00:06:36,550 --> 00:06:40,730 pro levou pyramidy a poté Tisk dvě mezery a vytisknout hodnoty hash. 127 00:06:40,730 --> 00:06:42,500 Takže jsme již přišel na to ven. 128 00:06:42,500 --> 00:06:45,670 Takže můžeme začít vyplňovat v našem programu mnohem více. 129 00:06:45,670 --> 00:06:49,850 >> Tady mám vnější pro smyčce, která se iteruje přes každý řádek v pyramidě. 130 00:06:49,850 --> 00:06:53,340 A uvnitř tohoto orgánu Jdu opakovaně tisku mezery, 131 00:06:53,340 --> 00:06:56,860 Opakovaně hashe, a pak mezera, a pak hash pro pravou pyramidu, 132 00:06:56,860 --> 00:07:00,440 a pak, konečně, nový linka spustit další řádek. 133 00:07:00,440 --> 00:07:02,860 >> S tím jsme vyzváni uživatel pro vstup. 134 00:07:02,860 --> 00:07:04,510 Udělali jsme jisti, že je to platné. 135 00:07:04,510 --> 00:07:06,280 A pak jsme nakreslil pyramidu. 136 00:07:06,280 --> 00:07:09,540 Takže Mario může úspěšně lézt na pyramidu. 137 00:07:09,540 --> 00:07:10,970 >> Jmenuji se Zamyla. 138 00:07:10,970 --> 00:07:13,840 A to je CS50. 139 00:07:13,840 --> 00:07:15,419