1 00:00:00,000 --> 00:00:00,982 2 00:00:00,982 --> 00:00:11,293 >> [Musikk spilles] 3 00:00:11,293 --> 00:00:13,580 >> ROB BOWDEN: Det er meg, Rob. 4 00:00:13,580 --> 00:00:16,540 La oss gå gjennom hvordan å implementere Mario. 5 00:00:16,540 --> 00:00:21,040 Så det første vi må gjøre er be brukeren om input. 6 00:00:21,040 --> 00:00:24,440 >> Vi trenger å be dem nøyaktig hvordan høye pyramiden skal være. 7 00:00:24,440 --> 00:00:27,110 Så her ser vi vi gjør height = GetInt. 8 00:00:27,110 --> 00:00:32,479 En Og husk at GetInt funksjon er implementert i CS50 9 00:00:32,479 --> 00:00:38,060 bibliotek, så opp toppen, må vi husk å # include cs50.h. 10 00:00:38,060 --> 00:00:41,360 >> Så hvorfor har vi denne innpakket i en do-while-loop? 11 00:00:41,360 --> 00:00:45,080 Vel, vi må også huske på at brukerens input må være gyldig. 12 00:00:45,080 --> 00:00:46,910 Hva er et ugyldig innspill? 13 00:00:46,910 --> 00:00:51,460 Vel PSett spec sier spesifikt at en høyde mindre enn 0 eller større 14 00:00:51,460 --> 00:00:54,530 enn 23 er ugyldig. 15 00:00:54,530 --> 00:00:59,030 >> Så her oppe, ser vi at vi definerer en konstant kalt MAX_HEIGHT med 16 00:00:59,030 --> 00:01:00,750 verdi av 23. 17 00:01:00,750 --> 00:01:06,380 Dette gjør-while-loop vil fortsette mens høyde er mindre enn 0 eller MAX_HEIGHT er 18 00:01:06,380 --> 00:01:11,870 mindre enn høyden, hvilket betyr at 23 er mindre enn høyden. 19 00:01:11,870 --> 00:01:15,390 Så hvis høyde er 24 eller høyere, er vi kommer til å fortsette looping. 20 00:01:15,390 --> 00:01:18,300 Husk at gjør-mens sløyfer er pen nyttig når vi ønsker å få 21 00:01:18,300 --> 00:01:22,070 brukerundersøkelser og deretter validere den, siden vi uunngåelig må spørre brukeren på 22 00:01:22,070 --> 00:01:25,010 minst én gang for verdien de ønsker. 23 00:01:25,010 --> 00:01:28,500 >> Så når vi har deres innspill, vi kan nå bygge pyramiden. 24 00:01:28,500 --> 00:01:31,940 Ett av triksene i dette oppgavesettet er at vi må starte på toppen av 25 00:01:31,940 --> 00:01:32,750 pyramiden. 26 00:01:32,750 --> 00:01:36,800 Du kan ikke printf bunnen av pyramide og deretter bygge deg oppover. 27 00:01:36,800 --> 00:01:38,830 Så la oss se på eksempelet fra PSett spec. 28 00:01:38,830 --> 00:01:41,530 29 00:01:41,530 --> 00:01:45,430 >> Vi ser her at når vi går inn i en høyde av åtte, helt nederst på 30 00:01:45,430 --> 00:01:48,660 pyramide skriver ni hashes. 31 00:01:48,660 --> 00:01:52,990 Ett nivå opp fra det utskrifter én plass og åtte hashes. 32 00:01:52,990 --> 00:01:58,250 Ett nivå opp fra det er to plasser og syv hashes, helt til vi 33 00:01:58,250 --> 00:02:03,050 komme til toppen av pyramiden, som er åtte nivåer opp, som skriver ut syv 34 00:02:03,050 --> 00:02:06,000 plasser og to hashes. 35 00:02:06,000 --> 00:02:08,810 Så husk at vi må gjøre dette øverste nivå først. 36 00:02:08,810 --> 00:02:11,620 37 00:02:11,620 --> 00:02:18,500 >> Her er vi itera fra øverste nivå, rad 8, fortsetter 38 00:02:18,500 --> 00:02:22,150 inntil rad når 0. 39 00:02:22,150 --> 00:02:25,820 Så hvor mange plasser vi trenger å skrive ut i det øverste rad? 40 00:02:25,820 --> 00:02:29,310 Vi trykte sju plasser og to hashes. 41 00:02:29,310 --> 00:02:34,450 Så det antall plasser vi ønsker er raden som var på minus en. 42 00:02:34,450 --> 00:02:39,310 >> Hvis den øverste raden er 8, 8 minus 1 gir oss syv områder. 43 00:02:39,310 --> 00:02:43,770 Da har vi en løkke som vil bli skrevet ut ut hvert mellomrom, ett om gangen. 44 00:02:43,770 --> 00:02:47,450 Så når områder er 7, denne sløyfen , utskrift sju ganger 45 00:02:47,450 --> 00:02:50,300 syv individuelle mellomrom. 46 00:02:50,300 --> 00:02:54,672 >> Så nå trenger vi å skrive ut disse hashes ved slutten av pyramiden. 47 00:02:54,672 --> 00:02:57,930 Så her må vi regne antall hashes. 48 00:02:57,930 --> 00:03:01,930 Vi ser at vi gjør høyde minus rad pluss to. 49 00:03:01,930 --> 00:03:04,170 Så hvordan fikk vi tak i det? 50 00:03:04,170 --> 00:03:08,630 >> Husk at toppen av pyramiden er rad 8, og høyden er åtte. 51 00:03:08,630 --> 00:03:10,890 Og vi fortsatt trykt to hashes. 52 00:03:10,890 --> 00:03:15,420 Så i det minste, 8 minus 8 pluss 2 gir oss det rette svaret. 53 00:03:15,420 --> 00:03:19,170 Og deretter vurdere bunnen av pyramiden, rad 1. 54 00:03:19,170 --> 00:03:24,020 Høyde minus rad vil gi oss 7, og deretter pluss to gir oss ni hashes, 55 00:03:24,020 --> 00:03:26,620 som er nøyaktig antallet av hashes at vi trykket. 56 00:03:26,620 --> 00:03:29,880 Så dette er formelen vi ønsker å bruker til å beregne antall 57 00:03:29,880 --> 00:03:32,220 hashes i hver rad. 58 00:03:32,220 --> 00:03:36,020 >> Ved hjelp av dette nummeret, vi da har en annen for loop, svært lik den 59 00:03:36,020 --> 00:03:41,270 for løkke som vi brukte for mellomrommene, som gjentar flere hashes ganger 60 00:03:41,270 --> 00:03:43,720 skrive ut en enkelt hash hver gang. 61 00:03:43,720 --> 00:03:46,010 På den øverste raden, vil det skrive ut to hashes. 62 00:03:46,010 --> 00:03:48,390 På den nederste raden, vil det skrive ut ni hashes. 63 00:03:48,390 --> 00:03:52,610 Og hverandre rad vil skrive ut alle antall hashes i mellom. 64 00:03:52,610 --> 00:03:57,340 >> Og så helt til slutt, må vi skrive ut vår nye linje for å gå til neste 65 00:03:57,340 --> 00:03:59,400 rad i pyramiden. 66 00:03:59,400 --> 00:04:03,070 Til slutt, må vi skrive den nye linjen ved enden av raden for å 67 00:04:03,070 --> 00:04:06,260 fortsette til den neste raden av pyramiden. 68 00:04:06,260 --> 00:04:08,980 Og på slutten av programmet vårt, vi har avkastningen 0. 69 00:04:08,980 --> 00:04:12,770 >> Per PSett spec, avkastningen 0 er ikke strengt nødvendig. 70 00:04:12,770 --> 00:04:15,710 Men det betyr bety at hoved er gjort. 71 00:04:15,710 --> 00:04:17,610 Mitt navn er Rob, og dette var Mario. 72 00:04:17,610 --> 00:04:22,470 >> [Musikk spilles] 73 00:04:22,470 --> 00:04:25,558