ZAMYLA CHAN: Det är en mig, Zamyla. Idag i Mario, vi kommer att vara rita halv pyramid för Mario att klättra upp. Så låt oss tala om vår att göra på det här problemet. Vi kommer att vilja att uppmana och validera användaren för en giltig inmatning av hur hög de vill Mario pyramid att vara. Och då kommer vi att dra den. Så låt oss komma igång med uppmaning och validera användaren för deras insatser. Vi kan använda sig av den CS50 biblioteksfunktion få int som kommer att säkerställa att användaren inmatar ett heltal. Eventuella positiva heltal, negativ heltal, nummer 0 är alla rättvist spel. Annars kommer användaren att uppmanas att Försök igen tills de matar in ett giltigt heltal. Nu även om get int gör en hel del av arbetet för oss för att säkerställa att användaren ger oss ett heltal, vi fortfarande behöver tillämpa vissa ytterligare begränsningar av detta. När allt kommer omkring kan vi inte ha Mario klättring en halv pyramid höjd -12. I tillägg till detta, den problemet specifikationen säger att vi bara kan låta Mario att klättra en pyramid för höjder mellan 0 och 23. OK, så det betyder att vi behöver att kontinuerligt uppmana användaren att ge oss en giltig nummer och bara fortsätta när de har gett oss ett giltigt höjd. Hur gör vi det? Tja, kontinuerliga processer ger oss idén om loops-- göra något repetitivt. En slinga i C som ett tag slinga som kommer kontinuerligt exekvera kroppen av slingan, så länge som det givna villkoret utvärderas till true. Så snart detta villkor utvärderas till false, programmet kommer att fortsätta till vad kommer efter det. Så medan slingorna är ett sätt att att se till att vi ständigt fråga användaren om en giltig inmatning. Och när de ger oss en giltig inmatning, vi gå vidare till vad som kommer härnäst. Vi vet att vi kommer att be användaren för inmatning minst en gång. Så nu kommer vi till en syster till den while-slinga, som är den do while-slinga. Gör medan slingorna kommer att utföra kroppen av slingan minst en gång. Så utan att kontrollera tillståndet, det kommer att utföra kroppen av slingan. Och sedan kontrollera tillståndet för att se om det behöver upprepa sig. Detta är praktiskt när vi validera användarinmatning. Vi vet att vi kommer att be dem minst en gång. Så en gör medan slinga kanske se ut så här. Vi har ett heltal n. Och insida do medan slinga, vi omedelbart uppmana användaren att ange ett heltal. Om n är ogiltig, då vi kommer att få dem igen och igen och igen tills de ge oss den giltigt heltal. Slutligen, när n är ett giltigt ingång, vi ska vidare till resten av vårt program. Så låt oss gå tillbaka till spec och kontroll hur förhållandena för en giltig inmatning kommer att bli. Giltiga höjder kommer att vara mellan 0 och 23, inklusive. Så ogiltiga höjder kommer att vara mindre än 0 eller mer än 23. Så kom ihåg att utforma ditt tillstånd noga, vetskap om att villkoret för gör while bör vara medan n är ogiltig. Nu är detta inte kommer att bli en enkel enda Boolean uttryck. Vi kommer att behöva kombinera två olika uttryck att göra hela vår tillstånd. Så låt oss titta bara på en sanningstabell jag har redan gett dig tipset att vi är kommer att ha att göra med två Booleans. Så här är en sanningstabell där jag har två Booleans-- Boolean ett och två. Så vi har möjlighet att utvärdera bool1 och bool2 eller bool1 eller bool2. Och kommer endast att vara sant om både Booleans utvärderas till true, medan alla eller kommer att vara sant så länge som en av de två Booleans utvärderas till true. OK, så ta en stund, pausa video och smälta denna sanningstabellen. Jag kommer att vara här väntar. När du kommer tillbaka, se om du kan pussla ihop ett booleskt uttryck för skick n är ett ogiltigt ingång. Så nu när vi har giltigt användarinmatning, låt oss gå vidare och prata om hur vi kan dra halv pyramid. Här i denna enkla textredigerare, Jag har ritat en vänster linje pyramid. Men vi vet att vi behöver vår pyramid att högerjusterat. Så hur kan jag göra detta? Tja, kan jag försöka att skjuta allt åt sidan genom att bara sätta lite karaktär i mellan. Och sedan, för nästa line, jag kommer att sätta några fler tecken att driva det tillsammans, och further-- så vidare och så forth-- tills jag har rätt i linje pyramiden. Så vi har en rätt align pyramid, men Det ser inte så bra med prickar. Men vi vill bibehålla det trevligt avstånd. Så jag kommer att bokstavligen infoga vissa utrymmen. I stället för tre punkter, jag sätta en, två, tre utrymmen. På den andra raden. Jag ska sätta en, två utrymmen. Och på den näst sista linje, bara en plats. Och här har jag en högerjusterat pyramid. Från att göra exemplet i texten redaktör, har vi en idé om mönstret att vi kommer att använda för att rita halv pyramid. För varje rad, vad vi gjorde är vi skriver vissa utrymmen, och sedan skrivit några hashar, och sedan skrev Enter, som skapar en ny rad. Så nu när vi har det, låt oss gå ett steg längre och hitta ett mönster. Så jag kommer att säga, för intresse i detta exempel, vi har att göra med en höjd av åtta. Den första raden kommer att ha två hashes som följer sju platser. De second-- tre hashes, sex utrymmen. Tredje row-- fyra hashes, fem spaces-- så vidare och så vidare tills vi kommer till NTH raden. Alltså, jag ber dig för NTH raden, hur många hash kommer vi att ha och hur många platser? Så det är upp till dig att räkna ut en formel för att representera hur många hashes och hur många utrymmen behövs för den NTH rad när du har lite höjd. Nu när du räkna ut detta, vara försiktig med hur du indexerar. Vad jag menar med detta är att i vardagen för oss alla börja räkna, vanligen genom ett. Men i CS50 och datavetenskap i allmänhet, vi är 0 indexerad. Så den första raden skulle vara n av 0 i motsats till ett. Var försiktig med detta när du är försöka lista ut mönstret. Så nu ska vi gå tillbaka till hur vi kommer att dra vår pyramid. För varje rad, vi kommer att vilja skriva ut utrymmen, skriva ut hashes, och sedan skriva ut en ny linje. Ledtråden här är den Ordet "för" varje rad. I C, har vi en konstruktion kallas en for-loop, som består av en initiering, ett tillstånd, en uppdatering, och kroppen av slingan. Säger jag ville säga, hej värld, 50 gånger, mina för slinga skulle se ut så här. Jag initiera min heltal till 0. Villkoret är att I är mindre än 50. Och sedan min uppdatering är bara uppräkning jag med ett varje gång. Vi kan också använda loopar att iterera över saker. Lägg märke till här hur vi har inte hårdkodade ett nummer, utan snarare placeras den variabla höjd i stället i skick. Så vad jag gör här är att jag iteration över varje rad av pyramiden. Jag kan göra något för varje ro i kroppen av min slinga. Vad gör vi inne kroppen av slingan? Tja, som vi redan sagt, vi skriver ut utrymmen och vi skriver ut hash och vi skriver ut en ny linje. Så min yttre for-loop ser ut så här. Jag iterera över varje rad av pyramiden, med användning av, i detta fall, höjd som den variabla som lagrar höjden av pyramiden. Inuti kroppen av denna slinga, jag tryckningen utrymmen upprepade gånger, tryck kontrollsummor upprepade gånger, och sedan skriva ut en ny linje. Så nu, med hjälp av alla de begrepp som Jag har talat om i denna genomgång, du bör kunna föranleda användaren för inmatning, validera den ingången, och sedan dra halv pyramid. Mitt namn är Zamyla, och detta är CS50.