1 00:00:00,000 --> 00:00:00,982 2 00:00:00,982 --> 00:00:11,293 >> [За възпроизвеждане на музика] 3 00:00:11,293 --> 00:00:13,580 >> ROB BOWDEN: Това съм аз, Роб. 4 00:00:13,580 --> 00:00:16,540 Да се ​​разходим из как за изпълнение на Марио. 5 00:00:16,540 --> 00:00:21,040 Така че първото нещо, което трябва да направите, е да пита потребителя за вход. 6 00:00:21,040 --> 00:00:24,440 >> Ние трябва да ги попитам как точно висок пирамидата трябва да бъде. 7 00:00:24,440 --> 00:00:27,110 Така че тук, ние виждаме, че правим височина = GetInt. 8 00:00:27,110 --> 00:00:32,479 An И не забравяйте, че функцията GetInt се осъществява в CS50 9 00:00:32,479 --> 00:00:38,060 библиотека, така че до върха, ние трябва да не забравяйте да включите # cs50.h. 10 00:00:38,060 --> 00:00:41,360 >> Така че, защо имаме този увит в Do-линия, докато? 11 00:00:41,360 --> 00:00:45,080 Е, ние също трябва да се помни, че въвеждане на потребителя трябва да бъде валиден. 12 00:00:45,080 --> 00:00:46,910 Какво е невалиден вход? 13 00:00:46,910 --> 00:00:51,460 Ами PSET спец. изрично казва, че на височина по-малко от 0 или по-голяма 14 00:00:51,460 --> 00:00:54,530 от 23, е невалиден. 15 00:00:54,530 --> 00:00:59,030 >> Така че тук, ние виждаме, че ние сме определянето константа, наречена MAX_HEIGHT с 16 00:00:59,030 --> 00:01:00,750 стойност от 23. 17 00:01:00,750 --> 00:01:06,380 Това не се прави, докато цикъл ще продължи, докато височина е по-малко от 0 или е MAX_HEIGHT 18 00:01:06,380 --> 00:01:11,870 по-малко от височината, което означава, че 23 е по-малка от височината. 19 00:01:11,870 --> 00:01:15,390 Така че, ако височината е 24 или повече, ние сме ще изпълнява командите. 20 00:01:15,390 --> 00:01:18,300 Не забравяйте, че не се прави, докато цикли са доста полезно, когато искаме да получим 21 00:01:18,300 --> 00:01:22,070 приноса на потребителите и след това да я валидира, тъй като ние неизбежно трябва да поиска от потребителя при 22 00:01:22,070 --> 00:01:25,010 поне веднъж за стойността, която те искат. 23 00:01:25,010 --> 00:01:28,500 >> Така че след като имаме своя принос, ние Сега може да се изгради пирамидата. 24 00:01:28,500 --> 00:01:31,940 Един от триковете на този проблем постави, е че ние трябва да започне в началото на 25 00:01:31,940 --> 00:01:32,750 пирамидата. 26 00:01:32,750 --> 00:01:36,800 Вие не можете да ФОРМАТ дъното на пирамида, а след това изгради своя път нагоре. 27 00:01:36,800 --> 00:01:38,830 Така че нека да погледнем примера от PSET спекулация. 28 00:01:38,830 --> 00:01:41,530 29 00:01:41,530 --> 00:01:45,430 >> Тук виждаме, че когато влезем височина от 8, на самото дъно на 30 00:01:45,430 --> 00:01:48,660 пирамида отпечатва девет хешове. 31 00:01:48,660 --> 00:01:52,990 Едно ниво по-нагоре от тази отпечатъци едно място и осем хешове. 32 00:01:52,990 --> 00:01:58,250 Едно ниво по-нагоре от това е две пространства и седем хешове, чак докато не 33 00:01:58,250 --> 00:02:03,050 стигне до върха на пирамидата, който е осем нива нагоре, което отпечатва седем 34 00:02:03,050 --> 00:02:06,000 пространства и две хешове. 35 00:02:06,000 --> 00:02:08,810 Така че не забравяйте, че ние трябва да направи първата това най-високо ниво. 36 00:02:08,810 --> 00:02:11,620 37 00:02:11,620 --> 00:02:18,500 >> Тук сме итерации от най-високо ниво, ред 8, продължавайки 38 00:02:18,500 --> 00:02:22,150 докато ред достигне 0. 39 00:02:22,150 --> 00:02:25,820 Е, как много места сме се нуждаят от да отпечатате в които най-горния ред? 40 00:02:25,820 --> 00:02:29,310 Ние отпечатани седем пространства и две хешове. 41 00:02:29,310 --> 00:02:34,450 Така че броят на местата за което искаме, е реда, че са били на минус 1. 42 00:02:34,450 --> 00:02:39,310 >> Ако горният ред е 8, 8 минус 1 ни дава седем места. 43 00:02:39,310 --> 00:02:43,770 Тогава ние имаме една линия, която ще отпечата от всяко разстояние един по един. 44 00:02:43,770 --> 00:02:47,450 Така че, когато пространства е 7, този цикъл седем пъти, печат 45 00:02:47,450 --> 00:02:50,300 седем отделни пространства. 46 00:02:50,300 --> 00:02:54,672 >> Така че сега ние трябва да отпечатате тези хешове в края на пирамидата. 47 00:02:54,672 --> 00:02:57,930 Така че тук, ние трябва да се изчисли броят на хешове. 48 00:02:57,930 --> 00:03:01,930 Ние виждаме, че правим височина минус ред плюс 2. 49 00:03:01,930 --> 00:03:04,170 Е, как стигнахме до това? 50 00:03:04,170 --> 00:03:08,630 >> Не забравяйте, че на върха на пирамидата е ред 8, а височината е 8. 51 00:03:08,630 --> 00:03:10,890 И ние все още отпечатани две хешове. 52 00:03:10,890 --> 00:03:15,420 Така че най-малкото, 8 минус 8 плюс 2 ни дава правилния отговор. 53 00:03:15,420 --> 00:03:19,170 И след това да разгледа дъното на пирамидата, ред 1. 54 00:03:19,170 --> 00:03:24,020 Височина минус ред ще ни даде 7, и тогава плюс 2 ни дава девет хешове, 55 00:03:24,020 --> 00:03:26,620 който е точно броят на хешове, че ние отпечатани. 56 00:03:26,620 --> 00:03:29,880 Така че това е формулата, ние искаме да се използва за изчисляване на броя 57 00:03:29,880 --> 00:03:32,220 хешове във всеки ред. 58 00:03:32,220 --> 00:03:36,020 >> Използвайки този номер, ние тогава имаме друг за линия, много подобен на 59 00:03:36,020 --> 00:03:41,270 за линия, която се използва за бутона, че повтаря няколко пъти хешове 60 00:03:41,270 --> 00:03:43,720 отпечатване на единичен хашиш всеки път. 61 00:03:43,720 --> 00:03:46,010 На най-горния ред, това ще отпечатате две хешове. 62 00:03:46,010 --> 00:03:48,390 На най-долния ред, това ще отпечатате девет хешове. 63 00:03:48,390 --> 00:03:52,610 И всеки друг ред ще отпечата всеки брой хешове между тях. 64 00:03:52,610 --> 00:03:57,340 >> И след това в самия край, ние трябва да отпечатате нашата нова линия, за да преминете към следващата 65 00:03:57,340 --> 00:03:59,400 ред в пирамидата. 66 00:03:59,400 --> 00:04:03,070 И накрая, ние трябва да отпечатате на новата линия в края на реда, за да 67 00:04:03,070 --> 00:04:06,260 продължи към следващата ред на пирамидата. 68 00:04:06,260 --> 00:04:08,980 И в края на нашата програма, имаме връщане 0. 69 00:04:08,980 --> 00:04:12,770 >> Според PSET спекулация, връщането 0 не е строго необходимо. 70 00:04:12,770 --> 00:04:15,710 Но това не означава, че главната е направено. 71 00:04:15,710 --> 00:04:17,610 Моето име е Роб, и това е Марио. 72 00:04:17,610 --> 00:04:22,470 >> [За възпроизвеждане на музика] 73 00:04:22,470 --> 00:04:25,558