ZAMYLA CHAN: Det er en mig, Zamyla.
I dag i Mario, vi kommer til at være tegning halv pyramide for Mario
at kravle op.
>> Så lad os tale om vores til-huskeliste til dette problem.
Vi kommer til at have til omgående og validere
brugeren for en gyldig indlæsning af hvordan høj, de ønsker Marios pyramide til at være.
Og så vil vi trække det.
Så lad os komme i gang med at spørge og validering af brugeren for deres input.
>> Vi kan gøre brug af CS50 Bibliotek Funktion
få int, der vil sikre, at indlæser brugeren et heltal.
Eventuelle positive heltal, negativ heltal, nummer 0 er alle fair spil.
Ellers vil brugeren blive bedt om at prøve igen, indtil de input et gyldigt heltal.
Nu selvom get int gør en stor del af arbejdet for os
at sikre, at brugeren giver os et heltal,
vi stadig nødt til at anvende nogle yderligere begrænsninger i denne.
Efter alt, kan vi ikke have Mario klatring en halv pyramide af højden negativ 12.
>> Ud over det, at problem specifikation
siger, at vi kun kan tillade Mario at klatre
en pyramide for højder mellem 0 og 23.
OK, så det betyder, at vi har brug til løbende at bede brugeren
at give os et gyldigt nummer og kun fortsætte
når de har givet os et gyldigt højde.
Hvordan gør vi det?
>> Nå, kontinuerlige processer giver os ideen om loops-- gør noget
gentagne gange.
En løkke i C som et stykke løkke, der vil løbende
udføre kroppen af ​​løkken, så længe den givne tilstand evalueres til sand.
Så snart denne betingelse evalueres til falsk,
vil programmet gå videre til hvad der kommer efter det.
Så mens loops er en måde at sikre, at vi hele tiden
bede brugeren om et gyldigt input.
Og når de giver os et gyldigt input, vi vil gå videre til hvad der kommer næste.
Vi ved, at vi vil bede brugeren for input mindst én gang.
Så nu kommer vi til en søster til den mens løkke, som er den do while-løkken.
>> Gør mens løkker vil udføre organ af løkken mindst én gang.
Så uden at kontrollere tilstanden, det vil udføre selve sløjfen.
Og derefter kontrollere tilstanden for at se om den skal gentage sig selv.
Dette er praktisk, når vi validere brugerinput.
Vi ved, at vi vil at spørge dem mindst én gang.
Så en gør mens løkke måske se noget som dette.
Vi har et helt tal n.
Og indvendig do mens løkken, vi straks
bede brugeren om et heltal.
Hvis n er ugyldig, så vil vi bede dem igen og igen og igen, indtil de
giver os, at gyldigt heltal.
Endelig, når n er et gyldigt input, vil vi videre til resten af ​​vores program.
>> Så lad os gå tilbage til spec og kontrol hvad betingelserne for et gyldigt input
det vil blive.
De gyldige højder vil være mellem 0 og 23, inklusive.
Så ugyldige højder kommer til at være mindre end 0 eller over 23.
Så husk at designe din tilstand omhyggeligt,
vel vidende, at betingelsen for gør mens løkke
bør være mens n er ugyldig.
Nu er dette ikke vil være en simpel enkelt boolsk udtryk.
Vi er nødt til at kombinere to forskellige udtryk
at gøre hele vores stand.
>> Så lad os bare se på en sandhed bord jeg har allerede givet dig tippet, at vi er
kommer til at beskæftige sig med to Booleans.
Så her er en sandhed bord, hvor jeg har to Booleans-- Boolean 1 og 2.
Så vi har mulighed for at vurdere bool1 og bool2 eller bool1 eller bool2.
Og vil kun være tilfældet, hvis både Booleans evalueres til sand, mens alle
eller vil være sandt, så længe en af de to Booleans evaluerer til true.
OK, så tage et øjeblik, pause dette video og fordøje denne sandhed tabel.
Jeg er lige her venter.
Når du kommer tilbage, se hvis du kan stykke sammen
en boolesk udtryk for din betingelse af n er et ugyldigt input.
>> Så nu, at vi har gyldigt bruger-input, lad os
gå videre og tale om, hvordan vi kan trække den halve pyramide.
Her i denne simpel teksteditor, Jeg har tegnet en venstrejusteret pyramide.
Men vi ved, at vi har brug for vores pyramide skal højrejusteret.
Så hvordan kan jeg gøre dette?
Tja, jeg kan prøve at skubbe alt til side
ved bare at sætte lidt tegn imellem.
Og så, for den næste linje, jeg har tænkt mig at sætte
nogle flere tegn til at skubbe det sammen, og further-- så videre og så forth--
indtil jeg har ret linie pyramide.
Så vi har en ret align pyramide, men det ser ikke så godt ud med prikkerne.
Men vi stadig ønsker at fastholde, at pæn afstand.
Så jeg har tænkt mig at bogstaveligt indsætte nogle rum.
>> I stedet for tre prikker, vil jeg sætte en, to, tre rum.
På den anden linje.
Jeg vil sætte en, to pladser.
Og på den næstsidste line, kun et rum.
Og her har jeg en ret linie pyramide.
Fra at gøre eksemplet i teksten redaktør, har vi en idé til mønsteret
at vi vil bruge til at trække den halve pyramide.
For hver række, hvad vi gjorde er vi skrive nogle rum,
og derefter indtastet nogle hashes, og derefter skrives
på Enter-tasten, som skaber en ny linje.
Så nu, at vi har det, lad os gå et skridt videre og finde et mønster.
>> Så jeg har tænkt mig at sige, for det interesse i dette eksempel,
Vi har at gøre med en højde på otte.
Den første række kommer til at have to hashes der følger syv rum.
De second-- tre hashes, seks rum.
Tredje row-- fire hashes, fem spaces-- så videre og så videre
indtil vi kommer til den n'te række.
Så, jeg beder dig om den n'te række, hvor mange hashes skal vi have
og hvor mange rum?
Så det er op til dig at finde ud af en formel til at repræsentere hvor mange hashes
og hvor mange rum er behov for den n'te række, når du har nogle højde.
>> Nu når du regne det ud, være forsigtig med, hvordan du indeksere.
Hvad jeg mener med dette er, at i hverdagen for os alle
begynde at tælle, som regel ved en.
Men i CS50 og i datalogi i almindelighed, er vi 0 indekseret.
Så den første række ville være n af 0 i modsætning til 1.
Vær forsigtig med dette, når du er forsøger at finde ud dit mønster.
Så lad os nu gå tilbage til, hvordan vi kommer til at tegne vores pyramide.
For hver række, vil vi ønsker at udskrive rum, udskrive hashes,
og derefter udskrive en ny linje.
Den antydning her er den ordet "for" hver række.
I C, har vi en konstruktion kaldes en for-løkke,
som består af en initialisering, en tilstand, en opdatering,
og kroppen af ​​løkken.
>> Sig, jeg ville sige, hej verden, 50 gange, mine for løkke
ville se noget som dette.
Jeg initialisere min heltal til 0.
Betingelsen er, at jeg er mindre end 50.
Og så min opdatering er bare inkrementering I ved en hver gang.
Vi kan også bruge til sløjfer at gentage over tingene.
Bemærk her, hvordan vi ikke har permanent kodet et tal,
De bliver placeret variablen højde i stedet ind i tilstanden.
Så hvad jeg laver her er jeg iteration over hver række af pyramiden.
Jeg kan gøre noget for hver ro inde i kroppen af ​​min løkke.
>> Hvad gør vi inde kroppen af ​​løkken?
Nå, som vi allerede har sagt, vi udskriver rum og vi udskriver hashes
og vi udskriver en ny linje.
Så mit yderste for løkke vil se sådan ud.
Jeg gentage over hver række af pyramiden, under anvendelse,
i dette tilfælde højde som den variable som lagrer højden af ​​pyramiden.
Inde i kroppen af ​​at sløjfe, jeg er kommer til at udskrive mellemrum gentagne gange, print
de hashes gentagne gange, og derefter udskrive en ny linje.
>> Så nu, ved hjælp af alle de begreber, Jeg har talt om i denne gennemgang,
du bør være i stand til at bede bruger for input, validere, at input,
og derefter trække den halve pyramide.
>> Mit navn er Zamyla, og det er CS50.