ZAMYLA CHAN: Det er a-meg, Zamyla.
I dag skal vi gjennomføre Mario, der vi trekker Mario
en hel pyramide for ham å hoppe over.
La oss bryte ned deloppgaver for dette problemet.
>> Først ønsker vi å be brukeren for høyden av pyramiden.
Og så ønsker vi å sørge for at det at innspill er gyldig.
Og så skal vi ønsker å tegne pyramiden.
>> Så la oss snakke om å spørre og validere brukerundersøkelser.
Det kan se ut omtrent som dette, en do-while-loop som
ber brukeren om en heltall og da bare gjentar
hvis det heltall er ugyldig.
Så hva bør denne tilstanden være?
>> For dette, la oss gå tilbake til beskrivelsen.
Vel, forteller spec oss at noen gyldig høyde kommer til å ligge mellom 0 og 23,
inklusive.
Så det betyr at enhver ugyldig høyde kommer til å være mindre enn 0
eller mer enn 23.
>> Så nå som vi har denne informasjonen, la oss designe vår tilstand.
Men vi må være forsiktig, fordi nå har vi
to Booleans som vi ønsker å vurdere.
>> Her har jeg gitt deg med en sannhet bord.
Dette gir oss muligheten til å ta to Booleans, boolsk en og to.
Og vi kan vurdere enten bool1 og bool2 eller bool1 eller bool2.
>> Så hva er forskjellen mellom og og eller?
Vel, bool1 og bool2 vil vurdere å true hvis og bare
dersom begge Booleans er sant, mens eller drift
vil være sant hvis én av de Booleans eller begge er sanne.
Så med dette i tankene, se om du kan finne ut
hva den aktuelle tilstanden for gjør-mens loop for en ugyldig n
kommer til å være.
>> Med det har vi bedt om og validert brukeren for høyden av pyramiden
som de ønsker.
Så nå er det opp til oss å trekke pyramiden.
Den fulle pyramide for dette Problemet vil se litt
som dette, hvor vi har en venstre pyramide, noen gap, og deretter rett pyramide.
Så la oss bryte dette ned litt.
>> Hvis jeg går til min tekst editor, her har jeg trukket oss en venstre-justert pyramide.
Men det vil ikke gjøre.
Det vi ønsker å gjøre er vi ønsker å skape en høyrejustert pyramide først.
Så for å gjøre dette, å bare presse mine hashes sammen til side,
Jeg skal bare sette noen tegn i mellom, bare disse prikkene.
Så jeg kommer til å sette to på neste linje, og en på den linjen.
Og så her har jeg en høyrejustert pyramide.
>> Etter det, kommer jeg til å gå tilbake til den øverste raden
og satt i gapet, som er, per spec, to plasser.
Så jeg kommer til å fylle ut annen side av pyramiden.
Jeg kommer til å gå til andre rad, skrive to plasser for gapet og deretter to
hashes.
Tilbake til tredje rad, to plasser for gapet og tre hashes.
Og på slutten, to plasser for gapet og fire hashes.
Så det er det en full pyramiden vil se ut.
>> Selvfølgelig ønsker vi ikke disse prikkene i veien.
Så vi kommer til å erstatte disse prikker ved å sette noen mellomrom.
En, to, tre på den første linjen.
En, to på den andre.
Og en på den tredje linjen.
Så dette er hva vi ville gjøre hvis vi ville bare gjøre en full pyramide,
si, i vår tekst editor.
>> Så la oss ta dette, forstå mønstre,
og konvertere det til noen pseudokode.
For hver rad av pyramiden, vil vi å skrive ut igjen pyramiden og deretter
gapet og deretter den høyre pyramiden.
For venstre pyramide, skriver vi den nødvendige mengde av mellomrom,
etterfulgt av hashes.
Deretter skriver vi gapet, som er bare to plasser hver gang.
Og i den høyre pyramiden, skriver vi det nødvendige antall hashes.
>> For den andre raden, gjennomførte vi nøyaktig samme prosess.
Vi trykker mellomrom for venstre pyramide, den nødvendige mengde
av hashes, gapet, to plasser, og deretter hashes for retten pyramide.
>> La oss takle mønster for venstre pyramiden.
Hvis jeg hadde, for formål i dette eksemplet, en høyde
av åtte forespurt av bruker, så min første rad
ville ha en hash og syv plasser.
Min andre rad ville ha to hashes, seks områder.
Tredje rad, tre hashes, fem områder.
Du kan sannsynligvis gjøre dette selv for en høyde på åtte
og bestemme for hver rad hvor mange hashes og hvor mange plasser du trenger.
Men hva vi ønsker å gjøre er vi ønsker å abstrahere det.
Så jeg spørre deg om noe n'te rad, hvor mange hashes og hvor mange plasser vi trenger?
>> Nå som du bestemme mønster for hvor mange hasher
og hvor mange plasser du trenger for en hvilken som helst n'te rad for en gitt høyde,
husk å være forsiktig hvordan du indeksere.
Hva jeg mener med dette er at det i hverdagen livet de fleste av oss begynner å telle etter en.
Så den første raden vil være nummer én.
Og den andre raden ville være rad nummer to, så videre og så videre.
>> Men i informatikk og CS50, vi null-indeksert.
Slik at vi faktisk begynne å telle på null.
Så den første raden ville være radnummer null.
Og den andre raden ville være rad nummer én.
Så hvis jeg hadde en høyde på åtte for min pyramide, da den siste verdien av n
ville faktisk være sju og ikke åtte.
>> Så vær forsiktig med dette.
Og vær oppmerksom når du bestemme mønsteret om din null-indeksert
eller en indeksert
>> OK.
Så nå som vi har mønster for venstre pyramide,
vi trenger å bestemme mønsteret for gapet.
Heldigvis er dette veldig enkelt.
Det er bare alltid to områder.
>> Så nå skal vi til høyre mønster.
Den første raden vil ha en hash.
Den andre raden, to.
Tredje rad, tre.
Også videre.
Så igjen, fastslår en eller annen abstrakt n og enhver høyde hvor mange hasher
og hvor mange plasser hver rad skal ha.
>> OK.
Så vi vet at for hver rad vi trenger for å gjennomføre en prosess.
Hvordan gjør vi det?
Vel, vi bruker for loop konstruere, består av en initialisering,
en tilstand, og en oppdatering.
For sløyfer kan brukes å gjenta prosesser.
>> Så sier jeg vil den skal si hei, verden 50 ganger, da min for loop
ville se noe som dette, hvor Jeg initial min variabel til null.
Forutsetningen er at jeg er mindre enn 50.
Og deretter oppdateringen er at det trinn etter en hver gang.
Så hva dette ville gjøre ville være å skrive ut Hello, World 50 ganger på rad.
>> Nå sier jeg ønsket å gjenta over høyden av pyramiden.
Så i stedet for hardt koding viss verdi i den tilstand,
Jeg bare bruke variabelen høyde.
Så hva dette vil gjøre er å iterere over høyden hver rad.
Og jeg kan gjøre noe inni av kroppen av denne sløyfe.
>> Hva ønsker vi å gjøre inne i kroppen av loopen?
Vel, som vi antydet tidligere, ønsker vi for å skrive ut mellomrom og hashes
for venstre pyramiden og deretter skrive ut to plasser og deretter skrive ut hashes.
Så vi har allerede funnet ut.
Så vi kan begynne å fylle i vårt program mye mer.
>> Her har jeg en ytre for løkke som gjentar enn hver rad i pyramiden.
Og inne at kroppen skal jeg å skrive ut områder gjentatte ganger,
hashes gjentatte ganger, og deretter gapet, og deretter hashes for retten pyramide,
og deretter, til slutt, en ny linjen for å starte neste rad.
>> Med det har vi bedt om brukeren for innspill.
Vi har sørget for at den er gyldig.
Og da har vi trukket pyramiden.
Så Mario kan lykkes klatre pyramiden.
>> Mitt navn er Zamyla.
Og dette er CS50.