1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:02,500 ZAMYLA CHAN: Het is een me, Zamyla. 3 00:00:02,500 --> 00:00:06,910 Vandaag in Mario, we gaan worden het tekenen van de halve piramide voor Mario 4 00:00:06,910 --> 00:00:08,290 om omhoog te klimmen. 5 00:00:08,290 --> 00:00:11,570 >> Dus laten we praten over ons te doen voor dit probleem. 6 00:00:11,570 --> 00:00:13,610 We gaan willen te vragen en te valideren 7 00:00:13,610 --> 00:00:18,290 de gebruiker een geldige invoer hoe hoog ze willen piramide Mario's te zijn. 8 00:00:18,290 --> 00:00:20,090 En dan gaan we om het te tekenen. 9 00:00:20,090 --> 00:00:24,870 Dus laten we beginnen met te vragen en valideren van de gebruiker voor hun inbreng. 10 00:00:24,870 --> 00:00:27,640 >> We kunnen gebruik maken van de te maken CS50 Bibliotheek Functie 11 00:00:27,640 --> 00:00:31,160 krijg int die ervoor zullen zorgen dat de gebruiker voert een integer. 12 00:00:31,160 --> 00:00:35,730 Elke positieve gehele getallen, negatieve integers, nummer 0 zijn allemaal eerlijk spel. 13 00:00:35,730 --> 00:00:41,670 Anders wordt de gebruiker gevraagd opnieuw te proberen totdat ze het invoeren van een geldige integer. 14 00:00:41,670 --> 00:00:44,210 Nu hoewel get int doet veel van het werk voor ons 15 00:00:44,210 --> 00:00:46,730 ervoor te zorgen dat de gebruiker geeft ons een integer, 16 00:00:46,730 --> 00:00:50,760 we moeten nog een paar passen extra beperkingen op geven. 17 00:00:50,760 --> 00:00:56,420 Immers, we kunnen niet hebben Mario klimmen een half piramide van hoogte negatieve 12. 18 00:00:56,420 --> 00:00:59,040 >> Trouwens, de probleem specificatie 19 00:00:59,040 --> 00:01:02,490 zegt dat we alleen kunnen laat Mario te beklimmen 20 00:01:02,490 --> 00:01:06,940 een piramide van hoogten tussen 0 en 23. 21 00:01:06,940 --> 00:01:11,120 OK, dus dat betekent dat we nodig hebben continu prompt de gebruiker 22 00:01:11,120 --> 00:01:14,320 om ons een geldig geven nummer en alleen verder 23 00:01:14,320 --> 00:01:17,120 zodra ze ons een geldige hoogte hebt gegeven. 24 00:01:17,120 --> 00:01:18,720 Hoe doen we dat? 25 00:01:18,720 --> 00:01:23,760 >> Nou, continue processen geven ons het idee van het doen van iets loops-- 26 00:01:23,760 --> 00:01:24,720 herhaaldelijk. 27 00:01:24,720 --> 00:01:28,220 Een lus in C als een tijdje lus die continu 28 00:01:28,220 --> 00:01:33,480 voeren het lichaam van de lus zolang de gegeven conditie true. 29 00:01:33,480 --> 00:01:36,200 Zodra deze voorwaarde onwaar, 30 00:01:36,200 --> 00:01:39,770 het programma zal overgaan tot wat komt daarna. 31 00:01:39,770 --> 00:01:43,180 Dus terwijl loops zijn een manier van ervoor te zorgen dat we voortdurend 32 00:01:43,180 --> 00:01:45,320 vraagt ​​de gebruiker om een ​​geldige ingang. 33 00:01:45,320 --> 00:01:50,070 En zodra ze geven ons een geldige invoer, zullen we overgaan tot wat daarna komt. 34 00:01:50,070 --> 00:01:54,380 We weten dat we gaan om te vragen de gebruiker om invoer ten minste eenmaal. 35 00:01:54,380 --> 00:01:59,200 Dus nu komen we tot een zuster van de while lus, dat is de do while lus. 36 00:01:59,200 --> 00:02:02,650 >> Doe terwijl loops zal uitvoeren van de orgaan van de lus ten minste eenmaal. 37 00:02:02,650 --> 00:02:06,150 Dus zonder controle van de staat, zal het lichaam van de lus uit te voeren. 38 00:02:06,150 --> 00:02:09,750 En controleer vervolgens de voorwaarde om te zien of het moet zich herhalen. 39 00:02:09,750 --> 00:02:13,080 Dit is handig wanneer we valideren van input van de gebruiker. 40 00:02:13,080 --> 00:02:15,830 We weten dat we gaan om minstens eenmaal vragen. 41 00:02:15,830 --> 00:02:18,780 Dus een do while lus zou ongeveer zo uitzien. 42 00:02:18,780 --> 00:02:20,090 We hebben een integer n. 43 00:02:20,090 --> 00:02:22,760 En de binnenkant van de do while lus, zijn we onmiddellijk 44 00:02:22,760 --> 00:02:24,750 vraagt ​​de gebruiker om een ​​integer. 45 00:02:24,750 --> 00:02:29,740 Als n ongeldig is, dan zullen we ze prompt opnieuw en opnieuw en opnieuw totdat zij 46 00:02:29,740 --> 00:02:31,820 geef ons die geldig zijn integer. 47 00:02:31,820 --> 00:02:37,440 Tot slot, zodra n een geldige invoer, zullen we overgaan tot de rest van ons programma. 48 00:02:37,440 --> 00:02:41,830 >> Dus laten we teruggaan naar de spec en check wat de voorwaarden voor een geldige invoer 49 00:02:41,830 --> 00:02:43,670 wordt. 50 00:02:43,670 --> 00:02:48,090 De geldige hoogtes gaan tussen 0 en 23 liggen. 51 00:02:48,090 --> 00:02:53,350 Dus ongeldige hoogtes gaan minder dan 0 en niet meer dan 23. 52 00:02:53,350 --> 00:02:56,420 Dus vergeet niet om te ontwerpen uw conditie zorgvuldig, 53 00:02:56,420 --> 00:02:58,660 wetende dat de toestand voor de doe while lus 54 00:02:58,660 --> 00:03:01,470 zou moeten zijn terwijl n ongeldig is. 55 00:03:01,470 --> 00:03:05,080 Nu, dit is niet van plan te zijn een eenvoudige enkele Booleaanse expressie. 56 00:03:05,080 --> 00:03:07,630 We zullen moeten combineren twee verschillende uitdrukkingen 57 00:03:07,630 --> 00:03:09,900 om ons hele toestand te maken. 58 00:03:09,900 --> 00:03:13,290 >> Dus laten we kijken naar een waarheid tafel ik heb u al de hint dat we gezien 59 00:03:13,290 --> 00:03:15,200 zal te maken hebben met twee Booleans. 60 00:03:15,200 --> 00:03:19,620 Dus hier is een waarheid tafel waar ik twee Booleans-- Boolean 1 en 2. 61 00:03:19,620 --> 00:03:27,050 Dus we hebben de mogelijkheid om te evalueren bool1 en bool2 of bool1 of bool2. 62 00:03:27,050 --> 00:03:31,980 En uitsluitend indien beide Booleans evalueren op true, terwijl alle 63 00:03:31,980 --> 00:03:37,280 of zal gelden zolang een van de twee Booleans true. 64 00:03:37,280 --> 00:03:41,450 OK, dus neem een ​​moment pauzeren deze video en verteren deze waarheid tafel. 65 00:03:41,450 --> 00:03:42,930 Ik kom hier te wachten staan. 66 00:03:42,930 --> 00:03:45,760 Als je terug komt, ziet als je kunt stuk samen 67 00:03:45,760 --> 00:03:51,910 een Booleaanse uitdrukking voor uw voorwaarde n een ongeldige invoer. 68 00:03:51,910 --> 00:03:54,420 >> Dus nu hebben we geldige input van de gebruiker, laten we 69 00:03:54,420 --> 00:03:58,710 ga je gang en praten over hoe we misschien de helft piramide te trekken. 70 00:03:58,710 --> 00:04:03,410 Hier in dit eenvoudige tekstverwerker, Ik heb een links uitgelijnd piramide getekend. 71 00:04:03,410 --> 00:04:07,050 Maar we weten dat we hebben onze piramide recht om te worden uitgelijnd. 72 00:04:07,050 --> 00:04:08,650 Dus hoe kan ik dit doen? 73 00:04:08,650 --> 00:04:11,440 Nou, ik zou kunnen proberen te duwen alles aan de kant 74 00:04:11,440 --> 00:04:14,880 door zomaar een beetje karakter ertussen. 75 00:04:14,880 --> 00:04:16,779 En vervolgens voor de volgende lijn, ik ga om te zetten 76 00:04:16,779 --> 00:04:20,970 wat meer tekens te duwen langs, en further-- zo voort en zo forth-- 77 00:04:20,970 --> 00:04:23,360 totdat Ik heb het recht uitgelijnd piramide. 78 00:04:23,360 --> 00:04:27,780 Dus hebben we een recht align piramide, maar het ziet er niet zo geweldig met de puntjes. 79 00:04:27,780 --> 00:04:30,680 Maar we willen nog steeds beweren dat mooie afstand. 80 00:04:30,680 --> 00:04:35,260 Dus ik ga letterlijk Steek sommige ruimtes. 81 00:04:35,260 --> 00:04:39,420 >> In plaats van drie punten, zal ik zet een, twee, drie ruimten. 82 00:04:39,420 --> 00:04:40,370 Op de tweede lijn. 83 00:04:40,370 --> 00:04:42,640 Ik zal er één, twee ruimtes te zetten. 84 00:04:42,640 --> 00:04:45,370 En op de voorlaatste lijn, slechts één ruimte. 85 00:04:45,370 --> 00:04:48,290 En hier heb ik een rechts uitgelijnd piramide. 86 00:04:48,290 --> 00:04:52,170 Van het doen van het voorbeeld in de tekst editor, hebben wij een idee voor het patroon 87 00:04:52,170 --> 00:04:54,590 dat we gebruiken om de halve piramide te trekken. 88 00:04:54,590 --> 00:04:58,080 Voor elke rij, wat we deden is dat we een aantal typen ruimten, 89 00:04:58,080 --> 00:05:00,170 en dan typte sommige hashes, en dan typte 90 00:05:00,170 --> 00:05:03,020 de Enter-toets, die is het creëren van een nieuwe regel. 91 00:05:03,020 --> 00:05:07,770 Dus nu hebben we dat, laten we gaan een stap verder en vind een patroon. 92 00:05:07,770 --> 00:05:10,170 >> Dus ik ga zeggen, voor de belang van dit voorbeeld, 93 00:05:10,170 --> 00:05:12,480 we te maken hebben met een hoogte van 8. 94 00:05:12,480 --> 00:05:17,100 De eerste rij zal twee hebben hashes dat zeven ruimtes volgt. 95 00:05:17,100 --> 00:05:20,020 De second-- drie hashes, zes ruimtes. 96 00:05:20,020 --> 00:05:24,260 Derde row-- vier hashes, vijf spaces-- zo verder en zo voort 97 00:05:24,260 --> 00:05:26,350 totdat we bij de NTH rij. 98 00:05:26,350 --> 00:05:31,540 Zo dan, vraag ik u voor de zoveelste rij, hoeveel hashes gaan we hebben 99 00:05:31,540 --> 00:05:33,120 en hoeveel ruimte? 100 00:05:33,120 --> 00:05:37,000 Dus het is aan jou om erachter te komen een formule te vertegenwoordigen hoeveel hashes 101 00:05:37,000 --> 00:05:42,020 en hoeveel ruimte nodig voor de NTH rij als je enige hoogte. 102 00:05:42,020 --> 00:05:46,060 >> Nu wanneer u uitzoeken dit uit, Wees voorzichtig hoe je indexeren. 103 00:05:46,060 --> 00:05:49,170 Wat ik bedoel is dat in het dagelijks leven van ons allemaal 104 00:05:49,170 --> 00:05:51,540 beginnen te tellen, meestal door 1. 105 00:05:51,540 --> 00:05:55,950 Maar in CS50 en in de informatica in het algemeen zijn we 0 geïndexeerd. 106 00:05:55,950 --> 00:06:00,620 Dus de eerste rij zou zijn n 0 of 1 tegenover. 107 00:06:00,620 --> 00:06:04,550 Wees voorzichtig met dit wanneer u bent proberen te achterhalen van uw patroon. 108 00:06:04,550 --> 00:06:07,570 Dus laten we nu teruggaan naar hoe we gaan onze piramide te trekken. 109 00:06:07,570 --> 00:06:12,300 Voor elke rij, gaan we willen afdrukken van de ruimten, de hashes te drukken, 110 00:06:12,300 --> 00:06:14,050 en druk vervolgens een nieuwe lijn. 111 00:06:14,050 --> 00:06:19,160 De hint is hier de woord "voor" iedere rij. 112 00:06:19,160 --> 00:06:21,470 In C, we hebben een construct riep een lus, 113 00:06:21,470 --> 00:06:25,250 die bestaat uit een initialisatie, een aandoening, een update, 114 00:06:25,250 --> 00:06:26,790 en het lichaam van de lus. 115 00:06:26,790 --> 00:06:31,360 >> Zeggen dat ik wilde zeggen, hello wereld, 50 keer, mijn lus 116 00:06:31,360 --> 00:06:32,880 zou er ongeveer zo uitzien. 117 00:06:32,880 --> 00:06:35,480 Ik initialiseren mijn integer naar 0. 118 00:06:35,480 --> 00:06:38,230 Voorwaarde is dat I kleiner is dan 50. 119 00:06:38,230 --> 00:06:42,350 En dan is mijn update gewoon het verhogen van I met één toe telkens. 120 00:06:42,350 --> 00:06:45,140 We kunnen ook gebruik maken van loops te herhalen over de dingen. 121 00:06:45,140 --> 00:06:47,820 Merk hier hoe we hebben niet hard gecodeerd een getal, 122 00:06:47,820 --> 00:06:51,820 maar de variabele geplaatst hoogte in plaats daarvan in de conditie. 123 00:06:51,820 --> 00:06:56,420 Dus wat ik hier doe is dat ik ben itereren over elke rij van de piramide. 124 00:06:56,420 --> 00:07:00,160 Ik kan iets voor elkaar doen rij in het lichaam van mijn lus. 125 00:07:00,160 --> 00:07:02,350 >> Wat doen wij binnen het lichaam van de lus? 126 00:07:02,350 --> 00:07:07,120 Nou, zoals we al zeiden, we afdrukt ruimten en we printen hashes 127 00:07:07,120 --> 00:07:09,480 en we zijn het afdrukken van een nieuwe regel. 128 00:07:09,480 --> 00:07:11,950 Dus mijn buitenste lus zal er zo uitzien. 129 00:07:11,950 --> 00:07:15,070 Ik itereren over elke rij van de piramide, gebruik, 130 00:07:15,070 --> 00:07:18,890 in casu hoogte als de variabele dat slaat de hoogte van de piramide. 131 00:07:18,890 --> 00:07:22,870 In het lichaam van deze loop, ben ik gaat ruimtes herhaaldelijk af te drukken, print 132 00:07:22,870 --> 00:07:26,730 de hashes herhaaldelijk en druk vervolgens een nieuwe lijn. 133 00:07:26,730 --> 00:07:31,010 >> Dus nu, met behulp van alle van de concepten die Ik heb gesproken over deze walk-through, 134 00:07:31,010 --> 00:07:35,210 je moet in staat zijn om de prompt gebruiker om invoer, te valideren die ingang, 135 00:07:35,210 --> 00:07:37,370 en dan trekken de helft piramide. 136 00:07:37,370 --> 00:07:41,510 >> Mijn naam is Zamyla, en dit is CS50. 137 00:07:41,510 --> 00:07:43,167