1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:02,640 ZAMYLA Chan: Ez egy-me, Zamyla. 3 00:00:02,640 --> 00:00:06,950 Ma megyünk végrehajtani Mario, ahol húzunk Mario 4 00:00:06,950 --> 00:00:10,730 teljes piramis neki átugrani. 5 00:00:10,730 --> 00:00:14,430 Nézzük meg a részfeladatok erre a problémára. 6 00:00:14,430 --> 00:00:17,930 >> Először is, azt akarjuk, hogy figyelmezteti a felhasználót A magassága a piramis. 7 00:00:17,930 --> 00:00:20,510 És akkor azt akarjuk, hogy győződjön meg arról, hogy bemenet érvényes. 8 00:00:20,510 --> 00:00:23,280 Aztán megyünk szeretnénk felhívni a piramis. 9 00:00:23,280 --> 00:00:26,850 >> Tehát beszéljünk megkérdezése és ellenőrzi a felhasználói input. 10 00:00:26,850 --> 00:00:29,920 Úgy tűnhet, mint valami Ennek a do-while ciklus, amely 11 00:00:29,920 --> 00:00:33,250 kéri a felhasználót egy egész szám, és akkor is csak ismétlések 12 00:00:33,250 --> 00:00:35,700 ha az egész érvénytelen. 13 00:00:35,700 --> 00:00:38,220 Tehát mi kell ezt a feltételt? 14 00:00:38,220 --> 00:00:40,630 >> Ehhez menjünk vissza A specifikáció. 15 00:00:40,630 --> 00:00:46,240 Nos, a spec azt mondja, hogy minden érvényes magasság lesz 0 és 23 között, 16 00:00:46,240 --> 00:00:47,350 beleértve. 17 00:00:47,350 --> 00:00:51,400 Tehát ez azt jelenti, hogy az érvénytelen magasság lesz kisebb, mint 0 18 00:00:51,400 --> 00:00:53,840 vagy több, mint 23. 19 00:00:53,840 --> 00:00:57,220 >> Most, hogy ezt az információt, nézzük tervezzük meg a feltételt. 20 00:00:57,220 --> 00:00:59,230 De meg kell, hogy legyen óvatos, mert most már 21 00:00:59,230 --> 00:01:02,130 Két Logikai hogy meg akarjuk értékelni. 22 00:01:02,130 --> 00:01:04,150 >> Itt megadtam egy igazság táblázatot. 23 00:01:04,150 --> 00:01:07,520 Ez lehetővé teszi számunkra, hogy két Logikai adattípus, logikai egy és kettő. 24 00:01:07,520 --> 00:01:13,600 És mi lehet értékelni sem bool1 és bool2 vagy bool1 vagy bool2. 25 00:01:13,600 --> 00:01:17,390 >> Tehát mi a különbség és között és vagy? 26 00:01:17,390 --> 00:01:21,810 Nos, bool1 és bool2 lesz értékeli, hogy pontosan akkor 27 00:01:21,810 --> 00:01:25,680 ha mindkét Logikai igazak, mivel a művelet vagy 28 00:01:25,680 --> 00:01:30,190 lesz igaz, ha valamelyik A Logikai vagy mindkettő igaz. 29 00:01:30,190 --> 00:01:33,110 Így ezt szem előtt tartva, ha lehet kitalálni 30 00:01:33,110 --> 00:01:37,460 mi a megfelelő feltétele A do-while ciklus egy érvénytelen n 31 00:01:37,460 --> 00:01:38,850 lesz. 32 00:01:38,850 --> 00:01:43,540 >> Azzal, hogy már kéri és validált a felhasználó számára a magassága a piramis 33 00:01:43,540 --> 00:01:44,550 amit akarnak. 34 00:01:44,550 --> 00:01:47,740 Tehát most, ez rajtunk múlik felhívni a piramis. 35 00:01:47,740 --> 00:01:50,520 A teljes piramis erre probléma meg egy kicsit 36 00:01:50,520 --> 00:01:56,340 mint ez, ahol van egy bal piramis, Néhány különbség, majd a jobb oldali piramis. 37 00:01:56,340 --> 00:01:58,630 Úgyhogy megtörni ezt le egy kicsit. 38 00:01:58,630 --> 00:02:03,510 >> Ha megyek a szövegszerkesztő, itt voltam rajzolt nekünk egy balra igazított piramis. 39 00:02:03,510 --> 00:02:05,160 De ez nem lesz jó. 40 00:02:05,160 --> 00:02:10,139 Amit akarok, azt akarjuk, hogy hozzon létre egy jobbra igazított piramis először. 41 00:02:10,139 --> 00:02:13,580 Így kell ezt csinálni, hogy csak nyomja én hash mentén oldalra, 42 00:02:13,580 --> 00:02:18,240 Én csak megy, hogy néhány karakter között, csak ezeket a pontokat. 43 00:02:18,240 --> 00:02:22,560 Akkor megyek, hogy két a következő sorban, és egy ezen a vonalon. 44 00:02:22,560 --> 00:02:26,070 És így itt van egy jobbra igazított piramis. 45 00:02:26,070 --> 00:02:28,540 >> Ezt követően, megyek menj vissza a felső sorban 46 00:02:28,540 --> 00:02:33,930 és tegye a rés, amely van, egy a spec, két tér. 47 00:02:33,930 --> 00:02:37,680 Akkor megyek, hogy töltse ki a másik oldalon a piramis. 48 00:02:37,680 --> 00:02:42,030 Megyek, hogy menjen a második sorban, levelet Két terek a különbség, majd két 49 00:02:42,030 --> 00:02:42,920 hash. 50 00:02:42,920 --> 00:02:47,020 Vissza a harmadik sorban, két szóköz A rés és három hash. 51 00:02:47,020 --> 00:02:51,480 És a végén, két tér A rés és négy hash. 52 00:02:51,480 --> 00:02:54,400 Tehát ez az, ami a teljes piramis fog kinézni. 53 00:02:54,400 --> 00:02:57,260 >> Természetesen nem akarjuk Ezek a pontok az utat. 54 00:02:57,260 --> 00:03:01,220 Így fogunk cserélni ezeket pontok által üzembe néhány terek. 55 00:03:01,220 --> 00:03:03,720 Egy, kettő, három, az első sorban. 56 00:03:03,720 --> 00:03:05,650 Egy, két, a második. 57 00:03:05,650 --> 00:03:08,200 És az egyik a harmadik sorban. 58 00:03:08,200 --> 00:03:12,060 Tehát ez az, amit tenne, ha akarta csak, hogy egy teljes piramis, 59 00:03:12,060 --> 00:03:13,700 mondjuk, a mi szövegszerkesztő. 60 00:03:13,700 --> 00:03:15,860 >> Szóval vessünk ennek, megérteni a szokások, 61 00:03:15,860 --> 00:03:19,870 és átalakítani, hogy több mint néhány pszeudokód. 62 00:03:19,870 --> 00:03:24,500 Minden egyes sor a piramis, azt akarjuk, nyomtassa ki a bal piramis, majd 63 00:03:24,500 --> 00:03:26,580 a különbség, majd a jobb piramis. 64 00:03:26,580 --> 00:03:30,260 A bal piramis kiírjuk a szükséges mennyiségű terek, 65 00:03:30,260 --> 00:03:31,740 majd a hash-eket. 66 00:03:31,740 --> 00:03:35,030 Ezután kiírjuk a rés, amely mindössze két tér minden alkalommal. 67 00:03:35,030 --> 00:03:38,080 És a jobb piramis kiírjuk A szükséges számú hash-eket. 68 00:03:38,080 --> 00:03:41,410 >> A második sorban, mi végzett pontosan ugyanolyan folyamatot. 69 00:03:41,410 --> 00:03:44,510 Kiírjuk a terek a bal piramis, a szükséges mennyiségű 70 00:03:44,510 --> 00:03:49,930 hash, a különbség, két tér, és akkor a hash a jobb piramis. 71 00:03:49,930 --> 00:03:52,490 >> Lássuk a feladat minta A bal piramis. 72 00:03:52,490 --> 00:03:55,660 Ha lenne, célokra Ennek a példának, magassága 73 00:03:55,660 --> 00:03:58,790 Nyolc által kért felhasználó, akkor az első sorban 74 00:03:58,790 --> 00:04:01,020 lenne egy hash és hét szünetet. 75 00:04:01,020 --> 00:04:03,860 A második sorban volna két hash hat terek. 76 00:04:03,860 --> 00:04:06,749 Harmadik sor, három hash öt terek. 77 00:04:06,749 --> 00:04:09,040 Akkor talán ezt magát a magassága nyolc 78 00:04:09,040 --> 00:04:13,470 és meghatározza az egyes sorok hány hash és hány szóköz van szüksége. 79 00:04:13,470 --> 00:04:16,209 De mit akarunk csinálni az akarjuk absztrakt azt. 80 00:04:16,209 --> 00:04:22,660 Tehát kérem minden n-edik sor, hogy hány hash és hány mezőt van szükségünk? 81 00:04:22,660 --> 00:04:25,410 >> Most, ahogy meghatározza a minta hány hash 82 00:04:25,410 --> 00:04:29,920 és hány mezőt, amire szükség van bármely n-edik sor adott magasságú, 83 00:04:29,920 --> 00:04:32,910 emlékszem, hogy legyen óvatos hogyan te indexel. 84 00:04:32,910 --> 00:04:37,160 Mit értek az, hogy a mindennapi élet a legtöbb ember elkezd számolás eggyel. 85 00:04:37,160 --> 00:04:39,680 Tehát az első sorban lenne az első. 86 00:04:39,680 --> 00:04:43,620 A második sor lenne sorban szám két, így tovább és így tovább. 87 00:04:43,620 --> 00:04:47,620 >> De a számítástechnikában és CS50 vagyunk nulla indexelt. 88 00:04:47,620 --> 00:04:50,750 Tehát valójában kezdeni a számlálást nulla. 89 00:04:50,750 --> 00:04:54,020 Tehát az első sor is legyen sor száma nulla. 90 00:04:54,020 --> 00:04:56,640 A második sor lenne sorban az első. 91 00:04:56,640 --> 00:05:02,510 Tehát, ha volt egy magasságban nyolcat én piramis, majd az utolsó n értékét 92 00:05:02,510 --> 00:05:05,850 ténylegesen nem hét, de nem nyolc. 93 00:05:05,850 --> 00:05:07,010 >> Ezért legyen óvatos erről. 94 00:05:07,010 --> 00:05:10,750 És tudatában kell lennie, ha éppen meghatározó a mintát, hogy a zéró-indexált 95 00:05:10,750 --> 00:05:12,360 vagy egy-indexált 96 00:05:12,360 --> 00:05:13,070 >> RENDBEN. 97 00:05:13,070 --> 00:05:15,380 Most, hogy megvan a minta a bal piramis, 98 00:05:15,380 --> 00:05:18,650 meg kell határoznunk A mintát a különbség. 99 00:05:18,650 --> 00:05:20,480 Szerencsére, ez nagyon egyszerű. 100 00:05:20,480 --> 00:05:22,690 Csak mindig két mezőt. 101 00:05:22,690 --> 00:05:25,240 >> Tehát most indulunk jobbra mintát. 102 00:05:25,240 --> 00:05:27,220 Az első sor lesz egy hash. 103 00:05:27,220 --> 00:05:28,640 A második sorban, kettő. 104 00:05:28,640 --> 00:05:29,530 Harmadik sor, három. 105 00:05:29,530 --> 00:05:30,790 Tehát tovább és így tovább. 106 00:05:30,790 --> 00:05:35,540 Tehát újra, meg minden absztrakt n és bármilyen magasságban hány hash 107 00:05:35,540 --> 00:05:38,810 és hány mezőt minden sorban legyen. 108 00:05:38,810 --> 00:05:39,700 >> RENDBEN. 109 00:05:39,700 --> 00:05:45,050 Tehát tudjuk, hogy minden sorban van kell, hogy végezzen néhány folyamatot. 110 00:05:45,050 --> 00:05:46,600 Hogyan csináljuk? 111 00:05:46,600 --> 00:05:50,440 Nos, mi használjuk a for ciklus konstrukció, áll egy inicializáló, 112 00:05:50,440 --> 00:05:52,310 feltétele, és a frissítés. 113 00:05:52,310 --> 00:05:54,830 Mert hurkokat lehet használni megismételni folyamatokat. 114 00:05:54,830 --> 00:05:59,610 >> Tehát mondjuk azt akarom köszönni, világ 50-szer, akkor a hurok 115 00:05:59,610 --> 00:06:03,510 valahogy így néz ki ez, ahol Azt inicializálni én változó nulla. 116 00:06:03,510 --> 00:06:06,200 A feltétel az, hogy i kisebb, mint 50. 117 00:06:06,200 --> 00:06:09,670 És akkor a frissítést, hogy egyesével minden alkalommal. 118 00:06:09,670 --> 00:06:14,700 Tehát mi ez az lenne, hogy print hello, world 50-szor egymás után. 119 00:06:14,700 --> 00:06:18,080 >> Most azt mondják, azt akartam, hogy ismételget A magasságban a piramis. 120 00:06:18,080 --> 00:06:21,560 Aztán ahelyett, hogy keményen kódolás bizonyos értéket a feltétellel, 121 00:06:21,560 --> 00:06:23,280 Csak használja a változó magasságú. 122 00:06:23,280 --> 00:06:27,180 Szóval mi ez fog tenni a hajtogat A magasságban minden sorban. 123 00:06:27,180 --> 00:06:30,280 És tudok tenni valamit belülről A test ezen hurok. 124 00:06:30,280 --> 00:06:32,710 >> Mit akarunk csinálni a testben a hurok? 125 00:06:32,710 --> 00:06:36,550 Nos, ahogy azt korábban is jeleztük, szeretnénk nyomtatni a terek és a hash 126 00:06:36,550 --> 00:06:40,730 A bal piramis, majd nyomtatás két mezőt, majd nyomtassa ki a hash-eket. 127 00:06:40,730 --> 00:06:42,500 Így már rájött. 128 00:06:42,500 --> 00:06:45,670 Így tudjuk kezdeni, hogy töltse programunkban sokkal több. 129 00:06:45,670 --> 00:06:49,850 >> Itt van egy külső hurok, amely megismétli át minden sorban a piramis. 130 00:06:49,850 --> 00:06:53,340 És azon belül, hogy a test megyek nyomtatni terek többször, 131 00:06:53,340 --> 00:06:56,860 hash többször, majd a különbség, majd hash az egyenes gúla, 132 00:06:56,860 --> 00:07:00,440 majd végül egy új vonal kezdeni a következő sort. 133 00:07:00,440 --> 00:07:02,860 >> Azzal, hogy már kéri a felhasználó számára a bemenet. 134 00:07:02,860 --> 00:07:04,510 Mi már biztos, hogy ez érvényes. 135 00:07:04,510 --> 00:07:06,280 És akkor már felhívta a piramis. 136 00:07:06,280 --> 00:07:09,540 Tehát Mario sikeresen mászni a piramis. 137 00:07:09,540 --> 00:07:10,970 >> A nevem Zamyla. 138 00:07:10,970 --> 00:07:13,840 És ez CS50. 139 00:07:13,840 --> 00:07:15,419