ZAMYLA CHAN: Het is een-me, Zamyla.
Vandaag gaan we uit te voeren Mario, waar we Mario trekken
een volledige piramide voor hem om te springen.
Laten we breken de deeltaken voor dit probleem.
>> In de eerste plaats willen we de gebruiker gevraagd voor de hoogte van de piramide.
En dan willen we ervoor zorgen dat invoer geldig is.
En dan gaan we willen de piramide te trekken.
>> Dus laten we praten over ingeving en valideren van input van de gebruiker.
Het is misschien iets als volgt uitzien dit, een do-while lus die
vraagt ​​de gebruiker om een integer en dan alleen herhalingen
als dat integer is ongeldig.
Dus wat moet deze aandoening?
>> Hiervoor laten we teruggaan de specificatie.
Nou, de spec vertelt ons dat elk geldig hoogte gaat worden tussen 0 en 23,
inclusive.
Dus dan is dat betekent dat alle ongeldige hoogte gaat dan 0 te zijn
of meer dan 23.
>> Dus nu hebben we deze informatie, Laten we het ontwerp van onze conditie.
Maar we moeten voorzichtig zijn, want nu hebben we
twee Booleans die we willen evalueren.
>> Hier heb ik u verstrekte met een waarheid tafel.
Dit laat ons toe om twee duren Booleans, Boolean één en twee.
En we kunnen ook bool1 evalueren en bool2 of bool1 of bool2.
>> Dus wat is het verschil tussen en en of?
Nou, bool1 en bool2 zal evalueren om waar dan en slechts
als beide Booleans waar zijn, terwijl het of de werking
zal het geval zijn als een van de Booleans of allebei waar zijn.
Dus met dit in het achterhoofd, kijk of je kunt achterhalen
wat het geschikte voorwaarde je do-while lus voor een ongeldige n
wordt.
>> Met dat, hebben we gevraagd en gevalideerd de gebruiker voor de hoogte van de piramide
dat ze willen.
Dus nu is het aan ons om de piramide te trekken.
De volledige piramide voor deze probleem ziet er een beetje
als dit, waar we een links piramide, een gat, en dan rechts piramide.
Dus laten we breken dit een beetje naar beneden.
>> Als ik naar mijn tekstverwerker, Hier heb ik getrokken ons een links uitgelijnd piramide.
Maar dat zal niet doen.
Wat wij willen doen is dat we willen maak eerst een rechts uitgelijnde piramide.
Dus om dit te doen, om gewoon te duwen mijn hashes mee naar de kant,
Ik ga gewoon naar een aantal tekens zetten ertussen, juist deze punten.
Dan ga ik naar twee op de zetten volgende regel, en één op die lijn.
En dus hier heb ik een rechts uitgelijnd piramide.
>> Daarna ga ik ga terug naar de bovenste rij
en zet in de kloof, die is, volgens de specificatie, twee ruimten.
Dan ga ik in de te vullen andere kant van de piramide.
Ik ga om te gaan naar de tweede rij, schrijf twee ruimtes van het gat en vervolgens twee
hashes.
Terug naar de derde rij, twee ruimten de gap en drie hashes.
En aan het eind, twee ruimten de gap en vier hashes.
Dus dat is wat een full piramide eruit zal zien.
>> Natuurlijk willen we niet Deze punten in de weg.
Dus we gaan om deze te vervangen stippen door de invoering van een aantal ruimtes in.
Eén, twee, drie op de eerste regel.
Eén, twee op de tweede.
En één op de derde regel.
Dus dit is wat we zouden doen als we wilde gewoon een volledige piramide,
zeggen, in onze tekst editor.
>> Dus laten we dit nemen, begrijpen van de patronen,
en te converteren naar een aantal pseudocode.
Voor elke rij van de piramide, willen we naar links piramide afdrukken en
het gat en daarna de rechter piramide.
Voor de linker piramide afdruk de vereiste hoeveelheid ruimte,
gevolgd door de hashes.
Vervolgens afdrukken we de kloof die is slechts twee ruimtes iedere keer.
En in de juiste piramide, drukken we het vereiste aantal hashes.
>> Voor de tweede rij, voerden we exact dezelfde proces.
Wij drukken de ruimtes voor de linker piramide, de vereiste hoeveelheid
van hashes, de kloof, twee ruimten, en dan is de hashes voor de juiste piramide.
>> Laten we pakken het patroon voor de linker piramide.
Als ik had, met het oog In dit voorbeeld een hoogte
acht verzoek van de gebruiker, dan is mijn eerste rij
zou men hash en zeven ruimtes hebben.
Mijn tweede rij zou hebben twee hashes, zes ruimtes.
Derde rij, drie hashes, vijf ruimtes.
U kunt dit waarschijnlijk doen je voor op een hoogte van acht
en bepaalt voor elke rij hoeveel hashes en hoeveel ruimte je nodig hebt.
Maar wat we willen doen is we willen abstracte het.
Dus vraag ik u voor een zoveelste rij, hoeveel hashes en hoeveel ruimte hebben we nodig?
>> Nu, zoals u het bepalen van de patroon voor hoeveel hashes
en hoeveel ruimte je nodig hebt voor elke n-de rij voor een bepaalde hoogte,
vergeet niet om voorzichtig te zijn hoe je indexeren.
Wat ik bedoel is dat in het dagelijks leven de meesten van ons beginnen te tellen voor een.
Dus de eerste rij zou nummer één zijn.
En de tweede rij zou rij zijn nummer twee, enzovoort, enzovoort.
>> Maar in de informatica en CS50, we zijn zero-geïndexeerd.
Dus we eigenlijk beginnen te tellen bij nul.
Dus de eerste rij zou zijn rijnummer nul.
En de tweede rij zou rij nummer één zijn.
Dus als ik had een hoogte van acht voor mijn piramide, wordt de laatste waarde van n
eigenlijk zou zijn zeven en niet acht.
>> Dus wees voorzichtig over.
En zich bewust zijn als je het bepalen uw patroon of uw zero-geïndexeerd
of een geïndexeerd
>> OK.
Dus nu dat we de patroon voor de linker piramide,
we nodig hebben om te bepalen Het patroon voor de spleet.
Gelukkig, dit is echt makkelijk.
Het is gewoon altijd twee ruimten.
>> Dus nu gaan we naar de juiste patroon.
De eerste rij zal een hash hebben.
De tweede rij, twee.
Derde rij, drie.
Enzovoort, enzovoort.
Dus nogmaals, bepalen voor een abstract n en elke hoogte hoeveel hashes
en hoeveel ruimten elke rij moeten hebben.
>> OK.
Dus we weten dat voor elke rij we moet wat proces te voeren.
Hoe doen we dat?
Nou, gebruiken we de lus constructie, bestaande uit een initialisatie,
een voorwaarde, en een update.
Voor lussen kunnen worden gebruikt processen herhalen.
>> Dus zeg ik wil het om hallo te zeggen, wereld 50 keer, dan is mijn lus
zou er ongeveer zo uitzien, waarbij Ik initialiseren mijn variabele nul.
De voorwaarde is dat ik minder is dan 50.
En dan is de update is dat het stappen door één elke keer.
Dus wat dit zou doen zou zijn om afdrukken hello, world 50 keer op een rij.
>> Nu, zeg ik wilde herhalen over de hoogte van de piramide.
Dan in plaats van harde codering bepaalde waarde in de toestand,
Ik gebruik gewoon de variabele hoogte.
Dus wat dit zal doen, is iterate over de hoogte van elke rij.
En ik kan iets in doen van het lichaam van die lus.
>> Wat willen we doen in het lichaam van de lus?
Nou, zoals we al eerder aangegeven, willen we met de ruimten en de hashes afdrukken
voor de linker piramide en vervolgens afdrukken twee ruimten en vervolgens afdrukken de hashes.
Dus we hebben al bedacht dat uit.
Dus we kunnen beginnen met het vullen in ons programma nog veel meer.
>> Hier heb ik een buitenste lus die doorloopt elke rij in de piramide.
En binnen dat orgaan ik ga ruimten herhaaldelijk afdrukken
hashes herhaaldelijk, en dan is de kloof, en dan hashes naar de juiste piramide,
en tenslotte een nieuw lijn naar de volgende rij te beginnen.
>> Met dat, hebben we gevraagd de gebruiker de invoer.
We hebben ervoor gezorgd dat het geldig is gemaakt.
En dan hebben we de piramide getekend.
Dus Mario kan met succes beklim de piramide.
>> Mijn naam is Zamyla.
En dit is CS50.