1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:02,640 ZAMYLA CHAN: Het is een-me, Zamyla. 3 00:00:02,640 --> 00:00:06,950 Vandaag gaan we uit te voeren Mario, waar we Mario trekken 4 00:00:06,950 --> 00:00:10,730 een volledige piramide voor hem om te springen. 5 00:00:10,730 --> 00:00:14,430 Laten we breken de deeltaken voor dit probleem. 6 00:00:14,430 --> 00:00:17,930 >> In de eerste plaats willen we de gebruiker gevraagd voor de hoogte van de piramide. 7 00:00:17,930 --> 00:00:20,510 En dan willen we ervoor zorgen dat invoer geldig is. 8 00:00:20,510 --> 00:00:23,280 En dan gaan we willen de piramide te trekken. 9 00:00:23,280 --> 00:00:26,850 >> Dus laten we praten over ingeving en valideren van input van de gebruiker. 10 00:00:26,850 --> 00:00:29,920 Het is misschien iets als volgt uitzien dit, een do-while lus die 11 00:00:29,920 --> 00:00:33,250 vraagt ​​de gebruiker om een integer en dan alleen herhalingen 12 00:00:33,250 --> 00:00:35,700 als dat integer is ongeldig. 13 00:00:35,700 --> 00:00:38,220 Dus wat moet deze aandoening? 14 00:00:38,220 --> 00:00:40,630 >> Hiervoor laten we teruggaan de specificatie. 15 00:00:40,630 --> 00:00:46,240 Nou, de spec vertelt ons dat elk geldig hoogte gaat worden tussen 0 en 23, 16 00:00:46,240 --> 00:00:47,350 inclusive. 17 00:00:47,350 --> 00:00:51,400 Dus dan is dat betekent dat alle ongeldige hoogte gaat dan 0 te zijn 18 00:00:51,400 --> 00:00:53,840 of meer dan 23. 19 00:00:53,840 --> 00:00:57,220 >> Dus nu hebben we deze informatie, Laten we het ontwerp van onze conditie. 20 00:00:57,220 --> 00:00:59,230 Maar we moeten voorzichtig zijn, want nu hebben we 21 00:00:59,230 --> 00:01:02,130 twee Booleans die we willen evalueren. 22 00:01:02,130 --> 00:01:04,150 >> Hier heb ik u verstrekte met een waarheid tafel. 23 00:01:04,150 --> 00:01:07,520 Dit laat ons toe om twee duren Booleans, Boolean één en twee. 24 00:01:07,520 --> 00:01:13,600 En we kunnen ook bool1 evalueren en bool2 of bool1 of bool2. 25 00:01:13,600 --> 00:01:17,390 >> Dus wat is het verschil tussen en en of? 26 00:01:17,390 --> 00:01:21,810 Nou, bool1 en bool2 zal evalueren om waar dan en slechts 27 00:01:21,810 --> 00:01:25,680 als beide Booleans waar zijn, terwijl het of de werking 28 00:01:25,680 --> 00:01:30,190 zal het geval zijn als een van de Booleans of allebei waar zijn. 29 00:01:30,190 --> 00:01:33,110 Dus met dit in het achterhoofd, kijk of je kunt achterhalen 30 00:01:33,110 --> 00:01:37,460 wat het geschikte voorwaarde je do-while lus voor een ongeldige n 31 00:01:37,460 --> 00:01:38,850 wordt. 32 00:01:38,850 --> 00:01:43,540 >> Met dat, hebben we gevraagd en gevalideerd de gebruiker voor de hoogte van de piramide 33 00:01:43,540 --> 00:01:44,550 dat ze willen. 34 00:01:44,550 --> 00:01:47,740 Dus nu is het aan ons om de piramide te trekken. 35 00:01:47,740 --> 00:01:50,520 De volledige piramide voor deze probleem ziet er een beetje 36 00:01:50,520 --> 00:01:56,340 als dit, waar we een links piramide, een gat, en dan rechts piramide. 37 00:01:56,340 --> 00:01:58,630 Dus laten we breken dit een beetje naar beneden. 38 00:01:58,630 --> 00:02:03,510 >> Als ik naar mijn tekstverwerker, Hier heb ik getrokken ons een links uitgelijnd piramide. 39 00:02:03,510 --> 00:02:05,160 Maar dat zal niet doen. 40 00:02:05,160 --> 00:02:10,139 Wat wij willen doen is dat we willen maak eerst een rechts uitgelijnde piramide. 41 00:02:10,139 --> 00:02:13,580 Dus om dit te doen, om gewoon te duwen mijn hashes mee naar de kant, 42 00:02:13,580 --> 00:02:18,240 Ik ga gewoon naar een aantal tekens zetten ertussen, juist deze punten. 43 00:02:18,240 --> 00:02:22,560 Dan ga ik naar twee op de zetten volgende regel, en één op die lijn. 44 00:02:22,560 --> 00:02:26,070 En dus hier heb ik een rechts uitgelijnd piramide. 45 00:02:26,070 --> 00:02:28,540 >> Daarna ga ik ga terug naar de bovenste rij 46 00:02:28,540 --> 00:02:33,930 en zet in de kloof, die is, volgens de specificatie, twee ruimten. 47 00:02:33,930 --> 00:02:37,680 Dan ga ik in de te vullen andere kant van de piramide. 48 00:02:37,680 --> 00:02:42,030 Ik ga om te gaan naar de tweede rij, schrijf twee ruimtes van het gat en vervolgens twee 49 00:02:42,030 --> 00:02:42,920 hashes. 50 00:02:42,920 --> 00:02:47,020 Terug naar de derde rij, twee ruimten de gap en drie hashes. 51 00:02:47,020 --> 00:02:51,480 En aan het eind, twee ruimten de gap en vier hashes. 52 00:02:51,480 --> 00:02:54,400 Dus dat is wat een full piramide eruit zal zien. 53 00:02:54,400 --> 00:02:57,260 >> Natuurlijk willen we niet Deze punten in de weg. 54 00:02:57,260 --> 00:03:01,220 Dus we gaan om deze te vervangen stippen door de invoering van een aantal ruimtes in. 55 00:03:01,220 --> 00:03:03,720 Eén, twee, drie op de eerste regel. 56 00:03:03,720 --> 00:03:05,650 Eén, twee op de tweede. 57 00:03:05,650 --> 00:03:08,200 En één op de derde regel. 58 00:03:08,200 --> 00:03:12,060 Dus dit is wat we zouden doen als we wilde gewoon een volledige piramide, 59 00:03:12,060 --> 00:03:13,700 zeggen, in onze tekst editor. 60 00:03:13,700 --> 00:03:15,860 >> Dus laten we dit nemen, begrijpen van de patronen, 61 00:03:15,860 --> 00:03:19,870 en te converteren naar een aantal pseudocode. 62 00:03:19,870 --> 00:03:24,500 Voor elke rij van de piramide, willen we naar links piramide afdrukken en 63 00:03:24,500 --> 00:03:26,580 het gat en daarna de rechter piramide. 64 00:03:26,580 --> 00:03:30,260 Voor de linker piramide afdruk de vereiste hoeveelheid ruimte, 65 00:03:30,260 --> 00:03:31,740 gevolgd door de hashes. 66 00:03:31,740 --> 00:03:35,030 Vervolgens afdrukken we de kloof die is slechts twee ruimtes iedere keer. 67 00:03:35,030 --> 00:03:38,080 En in de juiste piramide, drukken we het vereiste aantal hashes. 68 00:03:38,080 --> 00:03:41,410 >> Voor de tweede rij, voerden we exact dezelfde proces. 69 00:03:41,410 --> 00:03:44,510 Wij drukken de ruimtes voor de linker piramide, de vereiste hoeveelheid 70 00:03:44,510 --> 00:03:49,930 van hashes, de kloof, twee ruimten, en dan is de hashes voor de juiste piramide. 71 00:03:49,930 --> 00:03:52,490 >> Laten we pakken het patroon voor de linker piramide. 72 00:03:52,490 --> 00:03:55,660 Als ik had, met het oog In dit voorbeeld een hoogte 73 00:03:55,660 --> 00:03:58,790 acht verzoek van de gebruiker, dan is mijn eerste rij 74 00:03:58,790 --> 00:04:01,020 zou men hash en zeven ruimtes hebben. 75 00:04:01,020 --> 00:04:03,860 Mijn tweede rij zou hebben twee hashes, zes ruimtes. 76 00:04:03,860 --> 00:04:06,749 Derde rij, drie hashes, vijf ruimtes. 77 00:04:06,749 --> 00:04:09,040 U kunt dit waarschijnlijk doen je voor op een hoogte van acht 78 00:04:09,040 --> 00:04:13,470 en bepaalt voor elke rij hoeveel hashes en hoeveel ruimte je nodig hebt. 79 00:04:13,470 --> 00:04:16,209 Maar wat we willen doen is we willen abstracte het. 80 00:04:16,209 --> 00:04:22,660 Dus vraag ik u voor een zoveelste rij, hoeveel hashes en hoeveel ruimte hebben we nodig? 81 00:04:22,660 --> 00:04:25,410 >> Nu, zoals u het bepalen van de patroon voor hoeveel hashes 82 00:04:25,410 --> 00:04:29,920 en hoeveel ruimte je nodig hebt voor elke n-de rij voor een bepaalde hoogte, 83 00:04:29,920 --> 00:04:32,910 vergeet niet om voorzichtig te zijn hoe je indexeren. 84 00:04:32,910 --> 00:04:37,160 Wat ik bedoel is dat in het dagelijks leven de meesten van ons beginnen te tellen voor een. 85 00:04:37,160 --> 00:04:39,680 Dus de eerste rij zou nummer één zijn. 86 00:04:39,680 --> 00:04:43,620 En de tweede rij zou rij zijn nummer twee, enzovoort, enzovoort. 87 00:04:43,620 --> 00:04:47,620 >> Maar in de informatica en CS50, we zijn zero-geïndexeerd. 88 00:04:47,620 --> 00:04:50,750 Dus we eigenlijk beginnen te tellen bij nul. 89 00:04:50,750 --> 00:04:54,020 Dus de eerste rij zou zijn rijnummer nul. 90 00:04:54,020 --> 00:04:56,640 En de tweede rij zou rij nummer één zijn. 91 00:04:56,640 --> 00:05:02,510 Dus als ik had een hoogte van acht voor mijn piramide, wordt de laatste waarde van n 92 00:05:02,510 --> 00:05:05,850 eigenlijk zou zijn zeven en niet acht. 93 00:05:05,850 --> 00:05:07,010 >> Dus wees voorzichtig over. 94 00:05:07,010 --> 00:05:10,750 En zich bewust zijn als je het bepalen uw patroon of uw zero-geïndexeerd 95 00:05:10,750 --> 00:05:12,360 of een geïndexeerd 96 00:05:12,360 --> 00:05:13,070 >> OK. 97 00:05:13,070 --> 00:05:15,380 Dus nu dat we de patroon voor de linker piramide, 98 00:05:15,380 --> 00:05:18,650 we nodig hebben om te bepalen Het patroon voor de spleet. 99 00:05:18,650 --> 00:05:20,480 Gelukkig, dit is echt makkelijk. 100 00:05:20,480 --> 00:05:22,690 Het is gewoon altijd twee ruimten. 101 00:05:22,690 --> 00:05:25,240 >> Dus nu gaan we naar de juiste patroon. 102 00:05:25,240 --> 00:05:27,220 De eerste rij zal een hash hebben. 103 00:05:27,220 --> 00:05:28,640 De tweede rij, twee. 104 00:05:28,640 --> 00:05:29,530 Derde rij, drie. 105 00:05:29,530 --> 00:05:30,790 Enzovoort, enzovoort. 106 00:05:30,790 --> 00:05:35,540 Dus nogmaals, bepalen voor een abstract n en elke hoogte hoeveel hashes 107 00:05:35,540 --> 00:05:38,810 en hoeveel ruimten elke rij moeten hebben. 108 00:05:38,810 --> 00:05:39,700 >> OK. 109 00:05:39,700 --> 00:05:45,050 Dus we weten dat voor elke rij we moet wat proces te voeren. 110 00:05:45,050 --> 00:05:46,600 Hoe doen we dat? 111 00:05:46,600 --> 00:05:50,440 Nou, gebruiken we de lus constructie, bestaande uit een initialisatie, 112 00:05:50,440 --> 00:05:52,310 een voorwaarde, en een update. 113 00:05:52,310 --> 00:05:54,830 Voor lussen kunnen worden gebruikt processen herhalen. 114 00:05:54,830 --> 00:05:59,610 >> Dus zeg ik wil het om hallo te zeggen, wereld 50 keer, dan is mijn lus 115 00:05:59,610 --> 00:06:03,510 zou er ongeveer zo uitzien, waarbij Ik initialiseren mijn variabele nul. 116 00:06:03,510 --> 00:06:06,200 De voorwaarde is dat ik minder is dan 50. 117 00:06:06,200 --> 00:06:09,670 En dan is de update is dat het stappen door één elke keer. 118 00:06:09,670 --> 00:06:14,700 Dus wat dit zou doen zou zijn om afdrukken hello, world 50 keer op een rij. 119 00:06:14,700 --> 00:06:18,080 >> Nu, zeg ik wilde herhalen over de hoogte van de piramide. 120 00:06:18,080 --> 00:06:21,560 Dan in plaats van harde codering bepaalde waarde in de toestand, 121 00:06:21,560 --> 00:06:23,280 Ik gebruik gewoon de variabele hoogte. 122 00:06:23,280 --> 00:06:27,180 Dus wat dit zal doen, is iterate over de hoogte van elke rij. 123 00:06:27,180 --> 00:06:30,280 En ik kan iets in doen van het lichaam van die lus. 124 00:06:30,280 --> 00:06:32,710 >> Wat willen we doen in het lichaam van de lus? 125 00:06:32,710 --> 00:06:36,550 Nou, zoals we al eerder aangegeven, willen we met de ruimten en de hashes afdrukken 126 00:06:36,550 --> 00:06:40,730 voor de linker piramide en vervolgens afdrukken twee ruimten en vervolgens afdrukken de hashes. 127 00:06:40,730 --> 00:06:42,500 Dus we hebben al bedacht dat uit. 128 00:06:42,500 --> 00:06:45,670 Dus we kunnen beginnen met het vullen in ons programma nog veel meer. 129 00:06:45,670 --> 00:06:49,850 >> Hier heb ik een buitenste lus die doorloopt elke rij in de piramide. 130 00:06:49,850 --> 00:06:53,340 En binnen dat orgaan ik ga ruimten herhaaldelijk afdrukken 131 00:06:53,340 --> 00:06:56,860 hashes herhaaldelijk, en dan is de kloof, en dan hashes naar de juiste piramide, 132 00:06:56,860 --> 00:07:00,440 en tenslotte een nieuw lijn naar de volgende rij te beginnen. 133 00:07:00,440 --> 00:07:02,860 >> Met dat, hebben we gevraagd de gebruiker de invoer. 134 00:07:02,860 --> 00:07:04,510 We hebben ervoor gezorgd dat het geldig is gemaakt. 135 00:07:04,510 --> 00:07:06,280 En dan hebben we de piramide getekend. 136 00:07:06,280 --> 00:07:09,540 Dus Mario kan met succes beklim de piramide. 137 00:07:09,540 --> 00:07:10,970 >> Mijn naam is Zamyla. 138 00:07:10,970 --> 00:07:13,840 En dit is CS50. 139 00:07:13,840 --> 00:07:15,419