ZAMYLA CHAN: Det är en-me, Zamyla.
Idag ska vi genomföra Mario, där vi drar Mario
en fullständig pyramid för honom att hoppa över.
Låt oss bryta ner deluppgifter för det här problemet.
>> Först vill vi uppmana användaren för höjden på pyramiden.
Och sedan vill vi se till att att den ingången är giltig.
Och sedan ska vi vill rita pyramiden.
>> Så låt oss tala om uppmaning och validera användarinmatning.
Det kan se ut ungefär som detta, en gör-while-slinga som
uppmanar användaren för en heltal och sedan bara upprepningar
om det heltal är ogiltig.
Så vad bör detta tillstånd vara?
>> För detta, låt oss gå tillbaka specifikationen.
Tja, berättar spec oss att något giltigt höjd kommer att vara mellan 0 och 23,
inclusive.
Så då det betyder att alla ogiltiga höjd kommer att vara mindre än 0
eller mer än 23.
>> Så nu när vi har den här informationen, Låt oss utforma vårt tillstånd.
Men vi måste vara försiktiga, för nu har vi
två Booleans som vi vill utvärdera.
>> Här har jag förutsatt att du med en sanningstabell.
Detta gör det möjligt för oss att ta två Booleans, Boolean ett och två.
Och vi kan utvärdera antingen bool1 och bool2 eller bool1 eller bool2.
>> Så vad är skillnaden mellan och och eller?
Tja, bool1 och bool2 kommer utvärderas till sant om och endast
om båda Booleans är sanna, medan eller drift
kommer att vara sant om antingen en av de Booleans eller båda är sanna.
Så med detta i åtanke, se om du kan räkna ut
vad den lämpliga villkor för din gör-while-slinga för en ogiltig n
kommer att bli.
>> Därmed har vi uppmanas och valideras användaren för höjden på pyramiden
som de vill.
Så nu är det upp till oss att rita pyramiden.
Den fullständiga pyramid för detta Problemet kommer att se lite
så här, där vi har en vänster pyramid, några gap, och sedan en rätt pyramid.
Så låt oss bryta ner det lite.
>> Om jag går till min textredigerare, här har jag dragen oss en vänsterjusterad pyramid.
Men som inte kommer att göra.
Vad vi vill göra är att vi vill skapa en högerjusterad pyramid först.
Så för att göra detta, att bara trycka mina hashes längs åt sidan,
Jag kommer bara att ställa några tecken däremellan, just dessa punkter.
Då kommer jag att sätta två på nästa rad, och en på den linjen.
Och så här har jag en högerjusterad pyramid.
>> Efter det kommer jag att gå tillbaka till den översta raden
och sätta i gapet, som är, per spec, två utrymmen.
Då kommer jag att fylla i andra sidan av pyramiden.
Jag kommer att gå till den andra raden, skriver två utrymmen för gapet och sedan två
hashar.
Tillbaka till den tredje raden, två utrymmen för gapet och tre hashar.
Och i slutet, två utrymmen för gapet och fyra hashar.
Så det är vad en fullständig pyramid kommer att se ut.
>> Naturligtvis vill vi inte dessa punkter i vägen.
Så vi kommer att ersätta dessa punkter genom att sätta vissa utrymmen i.
Ett, två, tre på första raden.
Ett, två på den andra.
Och en på tredje raden.
Så detta är vad vi skulle göra om vi ville bara göra en fullständig pyramid,
säga i vår textredigerare.
>> Så låt oss ta det här, förstå mönstren,
och konvertera det till någon pseudokod.
För varje rad av pyramiden, vi vill att skriva ut den vänstra pyramid och sedan
spalten och sedan den högra pyramiden.
För vänster pyramiden, vi ut erforderlig mängd utrymmen,
följt av kontrollsummor.
Då kan vi skriva ut gapet, som är bara två platser varje gång.
Och på rätt pyramiden, vi ut erforderligt antal hashar.
>> För den andra raden, genomförde vi exakt samma process.
Vi trycker utrymmen för vänster pyramid, den erforderliga mängden
av hashes, gapet, två utrymmen, och då kontrollsummor för rätt pyramiden.
>> Låt oss ta itu med mönster för den vänstra pyramiden.
Om jag hade, för ändamål i detta exempel, en höjd
av åtta begärts av användare, då min första raden
skulle ha ett hash och sju utrymmen.
Min andra raden skulle ha två hashes, sex utrymmen.
Tredje raden, tre hash, fem utrymmen.
Du kan förmodligen göra detta själv för en höjd av åtta
och bestämma för varje rad hur många hashes och hur många platser du behöver.
Men vad vi vill göra är vi vill abstrakt det.
Så jag ber er om någon n: te raden, hur många hashes och hur många platser behöver vi?
>> Nu, när du bestämmer mönster för hur många hashes
och hur många platser du behöver för någon n: te raden för en given höjd,
kom ihåg att vara försiktig hur du indexerar.
Vad jag menar med detta är att i vardagen liv de flesta av oss börja räkna med en.
Så den första raden skulle vara nummer ett.
Och den andra raden skulle vara rad nummer två, så vidare och så vidare.
>> Men i datavetenskap och CS50, vi är noll-indexeras.
Så vi faktiskt börja räkna på noll.
Så den första raden skulle vara radnummer noll.
Och den andra raden skulle vara rad nummer ett.
Så om jag hade en höjd av åtta för min pyramid, då det sista värdet på n
skulle faktiskt vara sju och inte åtta.
>> Så var försiktig om detta.
Och vara medveten om när du bestämma mönstret om din nollindex
eller en-indexerade
>> OK.
Så nu när vi har mönstret för vänster pyramid,
Vi måste bestämma mönstret för gapet.
Lyckligtvis är detta verkligen lätt.
Det är bara alltid två utrymmen.
>> Så nu går vi vidare till rätt mönster.
Den första raden kommer att ha en hash.
Den andra raden, två.
Tredje raden, tre.
Och så vidare.
Så återigen, bestämma något abstrakt n och valfri höjd hur många hash
och hur många utrymmen varje rad ska ha.
>> OK.
Så vi vet att för varje rad som vi behöver genomföra någon process.
Hur gör vi det?
Tja, använder vi för loop-konstruktionen, består av en initiering,
ett tillstånd, och en uppdatering.
För loopar kan användas att upprepa processerna.
>> Så säger jag vill att det ska säga hej, värld 50 gånger, då min för slinga
skulle se ut så här, där Jag initiera min variabel till noll.
Villkoret är att k är mindre än 50.
Och då uppdateringen är att det ökar med ett varje gång.
Så vad detta skulle göra vore att skriva hej, världens 50 gånger i rad.
>> Nu säger jag ville iterera över höjden av pyramiden.
Sedan i stället för hårdkodning något värde i det skick,
Jag använder bara varierande höjd.
Vad detta kommer att göra är iterate över höjden varje rad.
Och jag kan göra något inuti i kroppen av denna slinga.
>> Vad vill vi göra inuti kroppen av slingan?
Tja, som vi angav tidigare, vi vill att skriva ut utrymmen och kontrollsummor
för vänster pyramiden och sedan skriva ut två utrymmen och sedan skriva ut kontrollsummor.
Så vi har redan listat ut.
Så vi kan börja fylla i vårt program mycket mer.
>> Här har jag en yttre för slinga som itererar över varje rad i pyramiden.
Och i detta organ kommer jag att skriva ut utrymmen upprepade gånger,
hashes upprepade gånger, och sedan i gapet, och sedan hashar för rätt pyramiden,
och, slutligen, en ny linje för att starta nästa rad.
>> Därmed har vi uppmanas användaren för inmatning.
Vi har sett till att det är giltigt.
Och sedan har vi dragit pyramiden.
Så Mario kan framgångsrikt klättra pyramiden.
>> Mitt namn är Zamyla.
Och detta är CS50.