1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:02,500 ZAMYLA чан: Гэта я, Zamyla. 3 00:00:02,500 --> 00:00:06,910 Сёння ў Марыё, мы збіраемся быць малюнак палову піраміды для Марыё 4 00:00:06,910 --> 00:00:08,290 каб падняцца ўверх. 5 00:00:08,290 --> 00:00:11,570 >> Такім чынам, давайце пагаворым аб нашым штодзённік для гэтай праблемы. 6 00:00:11,570 --> 00:00:13,610 Мы будзем хацець запытваць і правяраць 7 00:00:13,610 --> 00:00:18,290 карыстальнік для правільнага ўводу, як высока яны хочуць піраміды Марыё быць. 8 00:00:18,290 --> 00:00:20,090 А потым, мы будзем маляваць яго. 9 00:00:20,090 --> 00:00:24,870 Так што давайце пачнем з запытам і праверкі карыстальніка для іх ўводу. 10 00:00:24,870 --> 00:00:27,640 >> Мы можам выкарыстоўваць з Функцыя CS50 Бібліятэка 11 00:00:27,640 --> 00:00:31,160 атрымаць Int, што будзе гарантаваць, што карыстач уводзіць цэлы лік. 12 00:00:31,160 --> 00:00:35,730 Любыя станоўчыя колькасці, адмоўныя цэлыя лікі, лік 0 ўсё справядлівая гульня. 13 00:00:35,730 --> 00:00:41,670 У адваротным выпадку карыстальнік будзе прапанавана паўтарайце, пакуль яны ўвесці дапушчальнае цэлы лік. 14 00:00:41,670 --> 00:00:44,210 Цяпер, хоць Get INT робіць шмат працы для нас 15 00:00:44,210 --> 00:00:46,730 ў забеспячэнні таго, Карыстальнік дае нам цэлы лік, 16 00:00:46,730 --> 00:00:50,760 мы ўсё яшчэ павінны ўжыць некаторыя дадатковыя абмежаванні на гэты конт. 17 00:00:50,760 --> 00:00:56,420 У рэшце рэшт, мы не можам мець Марыё ўзыходжанне палова піраміда вышынёй 12 адмоўнай. 18 00:00:56,420 --> 00:00:59,040 >> У дадатак да гэтага, тэхнічныя праблемы 19 00:00:59,040 --> 00:01:02,490 кажа, што мы можам толькі Марыё дазваляюць падняцца 20 00:01:02,490 --> 00:01:06,940 піраміда вышынь ад 0 да 23. 21 00:01:06,940 --> 00:01:11,120 ОК, так што гэта азначае, што нам трэба бесперапынна запытваць карыстальніка 22 00:01:11,120 --> 00:01:14,320 каб даць нам сапраўдны нумар і толькі працягваць 23 00:01:14,320 --> 00:01:17,120 як толькі яны далі нам сапраўдную вышыню. 24 00:01:17,120 --> 00:01:18,720 Як мы гэта робім? 25 00:01:18,720 --> 00:01:23,760 >> Ну, бесперапынныя працэсы даюць нам ідэя loops-- рабіць нешта 26 00:01:23,760 --> 00:01:24,720 паўторна. 27 00:01:24,720 --> 00:01:28,220 Адзін цыкл у C, як некаторы час цыкл, які будзе бесперапынна 28 00:01:28,220 --> 00:01:33,480 выконваць цела цыклу да таго часу, дадзенае ўмова вылічаецца як ісціна. 29 00:01:33,480 --> 00:01:36,200 Як толькі гэта ўмова ацэньваецца як ілжывае, 30 00:01:36,200 --> 00:01:39,770 праграма прыступіць да усё, што прыходзіць пасля гэтага. 31 00:01:39,770 --> 00:01:43,180 Такім чынам, у той час як завесы адзін са спосабаў гарантуючы, што мы ўвесь час 32 00:01:43,180 --> 00:01:45,320 запытваць у карыстальніка сапраўднага ўводу. 33 00:01:45,320 --> 00:01:50,070 І як толькі яны даюць нам правільны ўваход, мы будзем працягваць да таго, што будзе далей. 34 00:01:50,070 --> 00:01:54,380 Мы ведаем, што мы будзем прасіць карыстальнік для ўводу па меншай меры, адзін раз. 35 00:01:54,380 --> 00:01:59,200 Так што цяпер мы прыходзім да сястры у той час як цыкл, які з'яўляецца зрабіць падчас цыклу. 36 00:01:59,200 --> 00:02:02,650 >> Ці ёсць у той час як завесы будуць выконвацца цела цыклу па меншай меры адзін раз. 37 00:02:02,650 --> 00:02:06,150 Такім чынам, без праверкі стану, ён будзе выконвацца цела цыклу. 38 00:02:06,150 --> 00:02:09,750 А затым праверце стан, каб убачыць мае патрэбу Ці яна паўтарацца. 39 00:02:09,750 --> 00:02:13,080 Гэта зручна, калі мы праверкі ўводу дадзеных карыстальнікам. 40 00:02:13,080 --> 00:02:15,830 Мы ведаем, што мы збіраемся каб спытаць іх, па меншай меры адзін раз. 41 00:02:15,830 --> 00:02:18,780 Так рабіць, пакуль цыкл можа шукаць нешта накшталт гэтага. 42 00:02:18,780 --> 00:02:20,090 У нас ёсць цэлае п. 43 00:02:20,090 --> 00:02:22,760 І ўнутры спраў у той час як завесы, мы адразу 44 00:02:22,760 --> 00:02:24,750 запытваць у карыстальніка цэлае. 45 00:02:24,750 --> 00:02:29,740 Калі п ня дзейнічае, то мы будзем падказваць ім ня зноў і зноў і зноў, пакуль яны 46 00:02:29,740 --> 00:02:31,820 даюць нам, што сапраўдны лік. 47 00:02:31,820 --> 00:02:37,440 Нарэшце, калі п з'яўляецца дапушчальным ўваход, мы будзем перайсці да астатняй частцы нашай праграмы. 48 00:02:37,440 --> 00:02:41,830 >> Так што давайце вернемся да спецыфікацыі і праверкі якія ўмовы для сапраўднага ўваходу 49 00:02:41,830 --> 00:02:43,670 будзе. 50 00:02:43,670 --> 00:02:48,090 Дапушчальныя вышыні збіраюцца знаходзіцца ў дыяпазоне ад 0 да 23 ўключна. 51 00:02:48,090 --> 00:02:53,350 Так што несапраўдныя вышыні збіраюцца быць менш 0 або больш за 23. 52 00:02:53,350 --> 00:02:56,420 Так што памятаеце, каб распрацаваць ваш стан старанна, 53 00:02:56,420 --> 00:02:58,660 ведаючы, што ўмова для спраў у той час як завесы 54 00:02:58,660 --> 00:03:01,470 павінна быць у той час як п з'яўляецца несапраўдным. 55 00:03:01,470 --> 00:03:05,080 Зараз гэта не будзе просты адзіночны лагічны выраз. 56 00:03:05,080 --> 00:03:07,630 Мы будзем павінны аб'яднаць два розныя выразы 57 00:03:07,630 --> 00:03:09,900 каб усе наш стан. 58 00:03:09,900 --> 00:03:13,290 >> Так што давайце проста паглядзім на табліцу праўдзівасці я ужо даў вам намёк, што мы 59 00:03:13,290 --> 00:03:15,200 будзе мець справу з двума Booleans. 60 00:03:15,200 --> 00:03:19,620 Дык вось табліца праўдзівасці, дзе я ёсць два Booleans-- Boolean 1 і 2. 61 00:03:19,620 --> 00:03:27,050 Такім чынам, у нас ёсць магчымасць ацаніць bool1 і bool2 або bool1 або bool2. 62 00:03:27,050 --> 00:03:31,980 І будзе толькі справядліва, калі абодва Booleans ацаніць, праўда, у той час як усе 63 00:03:31,980 --> 00:03:37,280 ці будзе дакладна да таго часу, як адзін з два Booleans ацэньваецца як ісціна. 64 00:03:37,280 --> 00:03:41,450 ОК, так што спатрэбіцца некаторы час, зрабіць паўзу ў гэтым відэа і пераварыць гэтую табліцу праўдзівасці. 65 00:03:41,450 --> 00:03:42,930 Я буду тут чакаць. 66 00:03:42,930 --> 00:03:45,760 Калі вы вернецеся, см калі вы можаце кавалачках 67 00:03:45,760 --> 00:03:51,910 лагічнае выраз для вашага ўмова п з'яўляецца недапушчальным ўваход. 68 00:03:51,910 --> 00:03:54,420 >> Так што цяпер у нас ёсць сапраўдны карыстацкі ўвод, давайце 69 00:03:54,420 --> 00:03:58,710 ісці наперад і казаць пра тое, як мы можа зрабіць палову піраміды. 70 00:03:58,710 --> 00:04:03,410 Вось у гэтым простым тэкставым рэдактары, Я намаляваў выраўноўванне па левым краі піраміды. 71 00:04:03,410 --> 00:04:07,050 Але мы ведаем, што нам патрэбныя нашы Піраміда быць выраўнаваны па правым краі. 72 00:04:07,050 --> 00:04:08,650 Так як я магу гэта зрабіць? 73 00:04:08,650 --> 00:04:11,440 Ну, я мог бы паспрабаваць падштурхнуць усё на бок 74 00:04:11,440 --> 00:04:14,880 шляхам проста пакласці трохі характар ​​паміж імі. 75 00:04:14,880 --> 00:04:16,779 А потым, на наступны лініі, я збіраюся паставіць 76 00:04:16,779 --> 00:04:20,970 яшчэ некалькі знакаў, каб штурхаць яго наперад, і further-- гэтак далей і гэтак forth-- 77 00:04:20,970 --> 00:04:23,360 пакуль я не мець правільную піраміду выраўнаваны. 78 00:04:23,360 --> 00:04:27,780 Такім чынам, у нас ёсць выраўноўваецца па правым краі піраміды, але гэта не выглядае так пышна з кропкамі. 79 00:04:27,780 --> 00:04:30,680 Але мы ўсё яшчэ жадаем падтрымліваць гэты добры інтэрвал. 80 00:04:30,680 --> 00:04:35,260 Так што я збіраюся ў літаральным сэнсе слова ўставіць некаторыя прабелы. 81 00:04:35,260 --> 00:04:39,420 >> Замест трох кропак, я буду паклаў адзін, два, тры прасторы. 82 00:04:39,420 --> 00:04:40,370 На другім радку. 83 00:04:40,370 --> 00:04:42,640 Я паставіў адзін, два прасторы. 84 00:04:42,640 --> 00:04:45,370 А на перадапошнім лінія, толькі адзін прабел. 85 00:04:45,370 --> 00:04:48,290 А вось у мяне ёсць выраўнаванне па правым боку піраміды. 86 00:04:48,290 --> 00:04:52,170 Ад рабіць прыклад у тэксце рэдактар, у нас ёсць ідэя для шаблону 87 00:04:52,170 --> 00:04:54,590 што мы будзем выкарыстоўваць, каб зрабіць палову піраміды. 88 00:04:54,590 --> 00:04:58,080 Для кожнага радка, што мы зрабілі гэта мы ўводзім некаторыя прабелы, 89 00:04:58,080 --> 00:05:00,170 а затым надрукаваў некаторыя хэшы, а затым набіраецца 90 00:05:00,170 --> 00:05:03,020 клавіша Enter, якая стварае новую лінію. 91 00:05:03,020 --> 00:05:07,770 Так што цяпер у нас ёсць, што, пойдзем адзін крок наперад і знайсці шаблон. 92 00:05:07,770 --> 00:05:10,170 >> Так што я збіраюся сказаць, для Цікавасць гэтага прыкладу, 93 00:05:10,170 --> 00:05:12,480 мы маем справу з вышынёй 8. 94 00:05:12,480 --> 00:05:17,100 Першы радок будзе мець два хэшы, які варта сем прастор. 95 00:05:17,100 --> 00:05:20,020 У second-- тры хэшы, шэсць прастор. 96 00:05:20,020 --> 00:05:24,260 Па-трэцяе row-- чатыры хэшы, пяць spaces-- гэтак далей, і гэтак далей 97 00:05:24,260 --> 00:05:26,350 пакуль мы не атрымаем да энной радка. 98 00:05:26,350 --> 00:05:31,540 Такім чынам, я прашу вас за NTH радкі, колькі хэшы мы будзем мець 99 00:05:31,540 --> 00:05:33,120 і колькі прасторы? 100 00:05:33,120 --> 00:05:37,000 Так што да вас, каб высветліць формула для прадстаўлення, колькі хэшы 101 00:05:37,000 --> 00:05:42,020 і колькі прасторы неабходныя для м радку, калі ў вас ёсць нейкі вышыні. 102 00:05:42,020 --> 00:05:46,060 >> Зараз, калі вы высветліць гэта, будзьце асцярожныя, як вы індэксацыі. 103 00:05:46,060 --> 00:05:49,170 Тое, што я маю на ўвазе, што ў паўсядзённым жыцці ўсіх нас 104 00:05:49,170 --> 00:05:51,540 пачаць адлік, як правіла, на 1. 105 00:05:51,540 --> 00:05:55,950 Але ў CS50 і ў інфарматыцы Увогуле, мы 0 індэксаваць. 106 00:05:55,950 --> 00:06:00,620 Такім чынам, першы радок будзе N 0, у адрозненне ад 1. 107 00:06:00,620 --> 00:06:04,550 Будзьце асцярожныя ў гэтым, калі вы спрабуючы высветліць вашу карціну. 108 00:06:04,550 --> 00:06:07,570 Так што цяпер давайце вернемся да таго, як мы збіраемся зрабіць нашу піраміду. 109 00:06:07,570 --> 00:06:12,300 Для кожнага радка, мы будзем хацець друк прасторы, друк хэшы, 110 00:06:12,300 --> 00:06:14,050 а затым раздрукаваць новы радок. 111 00:06:14,050 --> 00:06:19,160 намёк тут слова "для" кожнага радка. 112 00:06:19,160 --> 00:06:21,470 У C, мы маем канструкцыю называецца цыкл, 113 00:06:21,470 --> 00:06:25,250 якая складаецца з ініцыялізацыя, ўмова, абнаўленне, 114 00:06:25,250 --> 00:06:26,790 і цела цыклу. 115 00:06:26,790 --> 00:06:31,360 >> Скажыце, што я хацеў сказаць, прывітанне свет, у 50 разоў, мой цыкл 116 00:06:31,360 --> 00:06:32,880 будзе выглядаць прыкладна так. 117 00:06:32,880 --> 00:06:35,480 Я ініцыялізаваць маё цэлы лік 0. 118 00:06:35,480 --> 00:06:38,230 Умовай з'яўляецца тое, што я менш за 50. 119 00:06:38,230 --> 00:06:42,350 І тады маё абнаўленне проста прырашчэннем I на адзінку кожны раз. 120 00:06:42,350 --> 00:06:45,140 Мы таксама можам выкарыстоўваць для завес перабраць рэчы. 121 00:06:45,140 --> 00:06:47,820 Звярніце ўвагу на тое, як тут мы не маем жорстка закадаваныя нумар, 122 00:06:47,820 --> 00:06:51,820 а змясціў зменную вышыня замест таго, каб у стане. 123 00:06:51,820 --> 00:06:56,420 Так што я раблю тут я ітэрацыя над кожнага радка піраміды. 124 00:06:56,420 --> 00:07:00,160 Я магу зрабіць што-то для кожнага веславаць ўнутры цела майго цыклу. 125 00:07:00,160 --> 00:07:02,350 >> Што мы робім ўнутры цела цыкла? 126 00:07:02,350 --> 00:07:07,120 Ну, як мы ўжо казалі, мы друку прасторы і мы хэшы друку 127 00:07:07,120 --> 00:07:09,480 і мы друку новы радок. 128 00:07:09,480 --> 00:07:11,950 Так што мой вонкавы цыкл будзе выглядаць наступным чынам. 129 00:07:11,950 --> 00:07:15,070 Я перабіраць кожную радок піраміды, выкарыстоўваючы, 130 00:07:15,070 --> 00:07:18,890 У гэтым выпадку, вышыня ў якасці зменнай які захоўвае вышыня піраміды. 131 00:07:18,890 --> 00:07:22,870 Ўнутры цела гэтага цыклу, я збіраецца друкаваць прабелы паўторна, друк 132 00:07:22,870 --> 00:07:26,730 хэшы паўторна, а затым раздрукаваць новы радок. 133 00:07:26,730 --> 00:07:31,010 >> Так што цяпер, выкарыстоўваючы ўсе паняцці, якія Я казаў пра гэта ў прахадных, 134 00:07:31,010 --> 00:07:35,210 вы павінны быць у стане падказаць карыстальніка для ўводу, праверкі таго, што ўваходны сігнал, 135 00:07:35,210 --> 00:07:37,370 а затым зрабіць палову піраміды. 136 00:07:37,370 --> 00:07:41,510 >> Мяне клічуць Zamyla, і гэта CS50. 137 00:07:41,510 --> 00:07:43,167