Video: Perimeter and area: the basics | Perimeter, area, and volume | Geometry | Khan Academy 2024
I Ruby kan du skapa en rektangel på skärmen med ASCII-konst. Om du skulle rita en rektangel på papper som fylldes i med ett mönster, vad skulle du behöva göra? Först kan du rita rektangelens kontur, och du kanske kan färga inuti.
Men för ditt program i Ruby vill du istället rita formen från topp till botten, en rad i taget. Hur skulle du beskriva hur man gör det? Gilla detta:
-
Rita upp rektangeln med hjälp av mitten av utsidan (eller kant) för första raden.
-
För varje linje som utgör sidorna och insidan av rektangeln ritar du vänster kant, hela mitten och sedan höger kant.
Upprepa detta steg tills du behöver rita botten av rektangeln.
-
Rita ned rektangens botten precis som du drog överkanten.
Detta är en algoritm för ritning av rektanglar linje för rad från topp till botten.
En algoritm är bara en följd av steg du följer för att utföra viss uppgift eller beräkning. I det här fallet har du skrivit ut sekvensen för att rita en rektangel genom att skanna över från topp till botten, linje för rad.
Ruby-versionen av din algoritm läser mycket som den engelska versionen:
-
Ställ in två variabler som gör det lättare att se vad som händer. Du använder användarens val för formstorlek som både höjd och bredd på den figur du ska rita:
height = shape_size width = shape_size
-
Du kommer att rita rektangeln längs linjen, så skapa en slinga som kommer att upprepa din kod för varje rad (så det betyder att du behöver din ritningskod för att köra höjd gånger):
1. upp till (höjd) gör | rad | # Ritningskoden går här slutet
Loops är ett kraftfullt sätt att upprepa kod ett antal gånger (eller till och med ett oändligt antal gånger)! Ruby har flera sätt att programmera en slinga. Uppåtmetoden är ett enkelt sätt att räkna från ett startnummer till ett slutligt tal. För rektangeln vill du räkna med att börja med 1 för första raden och avsluta räkningen när du når numret som representeras av höjden.
-
För att algoritmen ska kunna fungera måste du kolla vilken rad du vill att programmet ska skriva ut. Du har tre fall: den första raden, de mellersta raderna och den sista raden. Lägg till i fallet för den första raden i mitten av din slinga:
Om rad == 1 sätter outside_letter * width end
Om radvariabeln är lika med en, använder programmet satser för att skriva ut ditt val för det yttre_letter ett antal gånger lika med bredden.
Du använder om uttalanden när du vill se om något villkor är sant eller felaktigt.Symbolen == i Ruby frågar frågan: "Är saken på vänster sida lika med saken på höger sida av == symbolen? "Om det är så kommer Ruby att köra linjerna kod upp till ett annat villkor eller ett slutord.
-
Lägg sedan till en check för att se om det här är sista raden. Elsif-sökordet startar ett annat villkorstest, och du placerar det direkt före det tidigare slutordet. Det är inte ett stavfel, förresten. Ruby har bara ett roligt sätt att säga "annars om"! Hela saken ser så här ut:
Om rad == 1 sätter outside_letter * Bredd elsif row == Höjd lägger outside_letter * Bredd slutet
-
Slutligen måste du hantera displayen av alla rader i mitten, så lägg till ett sista villkor med Ruby s andra nyckelord. Koden går precis före slutet av sökordet. Här är hela blocket av Ruby:
om rad == 1 sätter outside_letter * bredd elsif row == höjd lägger outside_letter * bredd annat mitten = inside_letter * (bredd - 2) sätter "# {outside_letter} # {middle} # { outside_letter} "slutet
Mittenhöljet ser komplicerat ut. Vad gör det? Tja, enligt din algoritm måste den rita vänster och höger kanter och allt i mitten.
Mittenvariabeln beräknar strängen som representerar rektangelens mittpunkt. Om du tar bort en för den vänstra kanten karaktären och en för den högra kanten karaktären, den sista bredden på mitten är full bredd minus två tecken.
Det slutgiltiga uttalandet använder strängbearbetning för att skapa den kombinerade raden.
-
Kör ditt program och se om du har några fel. Får du något som visas här? Om du ser ett fel som säger att något liknande jämförelse mellan Fixnum och String misslyckades betyder det att Ruby hade svårt att använda värdet inuti shape_size som ett nummer.
Ruby är inte säker på hur man använder strängar för siffror.Varför är det ett problem om du skrev in ett nummer? Tja, får läser i din inmatning, men det läser alla de tecken du skriver som en sträng. Du måste hjälpa Ruby att konvertera strängen till ett nummer.
-
Ändra de två raderna där du ställer in längd- och breddvariablerna för att använda metoden to_i, vilket betyder att omvandla denna variabels innehåll till ett heltal (nummer):
height = shape_size. to_i width = shape_size. to_i
Kör din kod igen. Framgång!
Är detta världens mest spännande rektangel?