ZAMYLA CHAN: Det er en meg, Zamyla. Dag i Mario, kommer vi til å være tegning halv pyramide for Mario å klatre opp. Så la oss snakke om vår to-do 's for dette problemet. Vi kommer til å ønske å be og validere brukeren for en gyldig innspill på hvordan høyt de vil Marios pyramide for å være. Og så kommer vi til å trekke den. Så la oss komme i gang med å spørre og validere brukeren for deres innspill. Vi kan gjøre bruk av CS50 bibliotek funksjon få int som vil sikre at brukeren innganger et heltall. Eventuelle positive heltall, negative heltall, tallet 0 er alle fritt vilt. Ellers blir brukeren bedt om å prøve på nytt før de legg inn et gyldig heltall. Nå selv om get int gjør mye av jobben for oss i å sikre at den Brukeren gir oss et tall, vi fortsatt trenger å bruke noen ytterligere begrensninger på det. Tross alt, kan vi ikke ha Mario klatring en halv pyramide av høyde negativ 12. I tillegg til at den problemet spesifikasjon sier at vi bare kan tillate Mario å klatre en pyramide for høyder mellom 0 og 23. OK, så det betyr at vi trenger å kontinuerlig spørre brukeren å gi oss en gyldig antall og bare fortsette når de har gitt oss en gyldig høyde. Hvordan gjør vi det? Vel, kontinuerlige prosesser gi oss ideen om loops-- gjøre noe gjentagelser. En sløyfe i C som en stund løkke som vil kontinuerlig utføre hoveddelen av løkken så lenge den gitte tilstanden evalueres til sann. Så snart den betingelse behandles som usann, programmet vil fortsette å hva som kommer etter det. Så mens sløyfer er en måte å sikre at vi kontinuerlig spør brukeren om en gyldig inngang. Og når de gir oss et gyldig input, vi vil fortsette å hva som kommer neste. Vi vet at vi kommer til å be brukeren om inndata minst én gang. Så nå kommer vi til en søster av mens loop, som er det gjøre mens loop. Gjøre mens løkker vil utføre legeme av sløyfen minst én gang. Så uten å sjekke tilstanden, Det vil utføre hoveddelen av løkken. Og deretter sjekke tilstanden for å se om det er behov for å gjenta seg selv. Dette er nyttig når vi validere brukerundersøkelser. Vi vet at vi kommer å spørre dem minst én gang. Så en gjør mens loop kanskje se omtrent slik ut. Vi har et heltall n. Og inne på do mens loop, vi umiddelbart spør brukeren om et heltall. Hvis n er ugyldig, så får vi be dem igjen og igjen og igjen før de gi oss at gyldig heltall. Til slutt, når n er et gyldig input, vil vi videre til resten av vårt program. Så la oss gå tilbake til spec og sjekk hvordan forholdene for en gyldig inngang kommer til å være. De gyldige høyder skal være mellom 0 og 23. Så ugyldige høyder skal være mindre enn 0 eller mer enn 23. Så husk å designe tilstanden din nøye, vel vitende om at tilstanden for gjør mens loop bør være mens n er ugyldig. Nå er dette ikke kommer til å være en enkel enkelt boolsk uttrykk. Vi er nødt til å kombinere to forskjellige uttrykk å gjøre hele vår tilstand. Så la oss bare se på en sannhet bord jeg har allerede gitt deg hint om at vi er kommer til å være håndtere to Booleans. Så her er en sannhet bord hvor jeg ha to Booleans-- boolsk 1 og 2. Så vi har muligheten til å evaluere bool1 og bool2 eller bool1 eller bool2. Og vil bare være sant hvis begge Booleans vurdere å true, mens alle eller vil være sant, så lenge en av de to Booleans evalueres til sann. OK, så ta et øyeblikk, pause dette video og fordøye denne sannheten tabellen. Jeg skal være her venter. Når du kommer tilbake, kan du se hvis du kan sette sammen en boolsk uttrykk for din betingelse av n er en ugyldig inngang. Så nå som vi har gyldig brukerundersøkelser, la oss gå videre og snakke om hvordan vi kan trekke halv pyramide. Her i denne enkle teksteditor, Jeg har tegnet en venstre justert pyramide. Men vi vet at vi trenger vår pyramide for å være riktig justert. Så hvordan kan jeg gjøre dette? Vel, jeg kan prøve å presse alt til side ved bare å sette litt karakter i mellom. Og så, for den neste linje, kommer jeg til å sette noen flere tegn for å presse den sammen, og further-- så videre og så forth-- før jeg har rett justert pyramiden. Så vi har en riktig justere pyramide, men det ser ikke så bra med prikker. Men vi ønsker fortsatt å opprettholde det hyggelig avstand. Så jeg kommer til å bokstavelig talt sette inn noen mellomrom. I stedet for tre prikker, vil jeg sette en, to, tre mellomrom. På den andre linjen. Jeg skal sette en, to plasser. Og på nest siste linje, bare en plass. Og her har jeg en rett linje pyramide. Fra å gjøre eksemplet i teksten redaktør, har vi en idé til et mønster som vi skal bruke til å trekke halv pyramide. For hver rad, hva vi gjorde er vi skrive noen områder, og deretter skrevet noen hashes, og deretter skrevet Enter, som er å skape en ny linje. Så nå som vi har det, la oss gå ett skritt videre og finne et mønster. Så jeg kommer til å si, for interesse i dette eksempel, vi har å gjøre med en høyde på åtte. Den første raden kommer til å ha to hashes som følger sju plasser. De second-- tre hashes, seks områder. Tredje row-- fire hashes, fem spaces-- så videre og så videre før vi kommer til NTH rad. Så da spør jeg deg for NTH rad, hvor mange hasher skal vi ha og hvor mange områder? Så det er opp til deg å finne ut en formel for å representere hvor mange hasher og hvor mange områder er nødvendig for NTH rad når du har litt høyde. Nå når du finne ut dette, være forsiktig med hvordan du indeksere. Hva jeg mener med dette er at i hverdagen for oss alle begynne å telle, vanligvis ved en. Men i CS50 og informatikk generelt, er vi 0 indeksert. Så den første raden ville være n for 0, i motsetning til en. Vær forsiktig med dette når du er prøver å finne ut mønsteret. Så nå la oss gå tilbake til hvordan vi kommer til å trekke vår pyramide. For hver rad, vi kommer til å ønske å skrive ut mellomrom, skrive ut hashes, og deretter skrive ut en ny linje. Den hint her er Ordet "for" hver rad. I C, har vi en konstruksjon kalt en for loop, som består av en initialisering, en tilstand, en oppdatering, og hoveddelen av løkken. Si at jeg ønsket å si, hallo verden, 50 ganger, mine for løkke vil se omtrent slik ut. Jeg initial min heltall til 0. Forutsetningen er at jeg er mindre enn 50. Og da min oppdateringen er bare inkrementering I ved en hver gang. Vi kan også bruke for sløyfer å iterere over ting. Legg merke til her hvor vi ikke har hardkodet et nummer, men heller plassert variabelen høyde i stedet inn i tilstanden. Så hva jeg gjør her er jeg gjentar over hver rad av pyramiden. Jeg kan gjøre noe for hver ro inne i kroppen min loop. Hva gjør vi inne legemet av sløyfen? Vel, som vi allerede har sagt, vi skriver mellomrom og vi skriver ut hashes og vi skriver ut en ny linje. Så mitt ytterste for loop vil se slik ut. Jeg iterere over hver rad av pyramiden, ved bruk, i dette tilfelle høyde som den variable som lagrer høyden av pyramiden. Inne i kroppen av at loop, er jeg gikk i trykken mellomrom gjentatte ganger, print hashes gjentatte ganger, og deretter skrive ut en ny linje. Så nå, ved hjelp av alle de begrepene som Jeg har snakket om i denne walk-gjennom, du bør være i stand til å spørre bruker for input, validere at input, og deretter trekke halv pyramide. Mitt navn er Zamyla, og dette er CS50.