Video: Spinosaurus fishes for prey | Planet Dinosaur | BBC 2024
I Ruby kan du lage et rektangel på skjermen ved hjelp av ASCII-kunst. Hvis du skulle tegne et rektangel på papir som var fylt med et mønster, hva ville du måtte gjøre? For det første kan du trekke omrisset av rektangelet, og så kan du farge innvendig.
Men for programmet ditt i Ruby, vil du i stedet tegne formen fra topp til bunn, en linje om gangen. Hvordan vil du beskrive hvordan du gjør det? Som dette:
-
Tegn toppen av rektangelet ved hjelp av utvendig (eller kant) mønster for første linje.
-
For hver av linjene som utgjør sidene og innsiden av rektangelet, tegner du venstre kant, hele midten og deretter den høyre kanten.
Gjenta dette trinnet til du må tegne bunnen av rektangelet.
-
Tegn bunnen av rektangelet nøyaktig som du trakk toppkanten.
Dette er en algoritme for å tegne rektangler linje for linje fra topp til bunn.
En algoritme er bare en sekvens av trinnene du følger for å utføre noen oppgaver eller beregninger. I dette tilfellet har du skrevet ut sekvensen for å tegne et rektangel ved å skanne over fra topp til bunn, linje for linje.
Ruby-versjonen av algoritmen din leser mye som den engelske versjonen:
-
Sett opp to variabler som gjør det lettere å se hva som skjer. Du bruker brukerens valg for formstørrelse som både høyde og bredde på figuren du skal tegne:
height = shape_size width = shape_size
-
Du skal tegne rektangellinjen etter linje, så Sett opp en sløyfe som gjentar koden din for hver rad (det betyr at du trenger tegningskoden din til å kjøre høyde ganger):
1. opp til (høyde) gjør | rad | # Tegningskode går her slutten
Loops er en kraftig måte å gjenta kode noen ganger (eller til og med et uendelig antall ganger)! Ruby har flere måter å programmere en loop på. Opptil-metoden er en enkel måte å telle fra et startnummer til et sluttnummer. For rektangelet, vil du telle som starter ved 1 for første rad og etterbehandling teller når du når tallet representert av høyde.
-
Nå, for algoritmen skal fungere, må du sjekke for å se hvilken rad du vil at programmet skal skrive ut. Du har tre saker: den første raden, de midterste radene og den siste raden. Legg til i tilfellet for første rad i midten av sløyfen din:
Hvis rad == 1 setter outside_letter * bredde ende
Hvis radvariabelen er lik en, bruker programmet sett til å skrive ut ditt valg for det ytre_letter et antall ganger lik bredden.
Du bruker om setninger når du vil se om noen tilstand er sann eller falsk.Symbolet == i Ruby stiller spørsmålet: "Er saken på venstre side lik tinget på høyre side av == symbolet? "Hvis det er, vil Ruby kjøre linjene med kode frem til en annen betingelse eller et slutt søkeord.
-
Legg deretter inn en sjekk for å se om dette er den siste raden. Elsif-søkeordet starter en annen tilstandstest, og du plasserer den rett før forrige slutt søkeord. Det er ikke en stavefeil, forresten. Ruby har bare en morsom måte å si "annet hvis"! Det hele ser slik ut:
hvis rad == 1 legger outside_letter * bredde elsif rad == høyde setter outside_letter * bredde ende
-
Til slutt må du håndtere visning av alle rader i midten, så legg til en siste betingelse ved hjelp av Ruby's annet søkeord. Denne koden går rett før slutt søkeordet. Her er hele blokken Ruby:
hvis rad == 1 setter outside_letter * bredde elsif rad == høyde setter outside_letter * bredde annet midt = inside_letter * (bredde - 2) setter "# {outside_letter} # {middle} # { outside_letter} "end
Mellomhuset ser komplisert ut. Hva gjør det? Vel, i henhold til algoritmen din, må den tegne venstre og høyre kant og alt i midten.
Mellomvariabelen beregner strengen som representerer rektangelens midtpunkt. Hvis du tar bort en til venstre kantkarakter og en for høyre kantkarakter, er den endelige bredden på midten full bredde minus to tegn.
Den endelige setningen inneholder setningstrengbehandling for å lage den kombinerte raden.
-
Kjør programmet og se om du har noen feil. Får du noe som vises her? Hvis du ser en feil som sier noe som en sammenligning av Fixnum med String mislyktes, betyr dette at Ruby hadde det vanskelig å bruke verdien i form_size som et tall.
Ruby er ikke sikker på hvordan man bruker strenge for tall.Hvorfor er det et problem hvis du skrev inn et tall? Vel, får leser i innspillet ditt, men det leser alle tegnene du skriver som en streng. Du må hjelpe Ruby konvertere strengen til et tall.
-
Endre de to linjene hvor du angir høyde- og breddevariablene for å bruke metoden to_i, som betyr å konvertere innholdet til denne variabelen til et helt tall:
height = shape_size. to_i width = shape_size. to_i
Kjør koden din på nytt. Suksess!
Er dette verdens mest spennende rektangel?