Anonim

I våre forrige opplæringsprogrammer om riper i grunnskole og mellomnivå, øvde vi programmering ved å bruke kode for å tegne 2D geometriske figurer som vanligvis dekkes i elementære matematikkplaner. Nå skal vi adressere materiale på mellom- og videregående nivå med en ny problemløsningsstrategi kalt rekursjon, en sentral idé innen informatikk.

Det er et interessant eksempel på rekursjon som finnes i naturen kalt en fraktal. Fraktaler gjentar mønstre som ligner på hver forstørrelsesskala. Vi lærer datamaskinene våre å tegne en berømt fraktal - Sierpiński-trekanten. Hvis du foretrekker videoguider, kan du se veiledningen i stedet.

Dette er hvordan

En rask gjennomgang

  • Besøk scratch.mit.edu.
  • Hvis du ikke allerede har det, kan du registrere deg en konto ved å klikke på "Bli med skrap" øverst til høyre i nettleservinduet. Dette kreves ikke for å bruke skrap faktisk, men det er nødvendig hvis du vil lagre arbeidet ditt.
  • Klikk på "Opprett" -knappen øverst til venstre i nettleservinduet for å starte et nytt prosjekt.
  • I vår nybegynnerveiledning ble vi kjent med utformingen av Scratch-grensesnittet. Sjekk det ut hvis du trenger en grunning på de fire hovedområdene i programmet: scenen, sprite listen, paletten og skriptområdet .

1. utfordring: Grunnleggende oppsett og variabel oppretting.

  • Slett standard Cat sprite ved å velge saksverktøyet i Sprite Toolbar øverst på grensesnittet og deretter klikke på Cat sprite for å fjerne den.
  • Nå legger du til "Ladybug1" -spriten ved å klikke på "Velg Sprite from Library" i Sprite-listen. (Enhver sprite vil gjøre.)
  • Klikk på "Data" -delen i paletten, og klikk deretter på "Lag en variabel" -knappen.
  • Gi variabelen din navn "Størrelse".
  • Klikk OK for å fortsette.
  • Lag ytterligere tre variabler og navngi dem "Levels", "CenteredX" og "CenteredY".
  • Tenk på en variabel som bare en beholder for en verdi. For eksempel har en resultattavle variabler som inneholder poeng.

Andre utfordring: Lag tre tilpassede blokker for tegning av fraktalkunst.

"Lag en blokk" -funksjonen lar deg lage tilpassede prosedyrer som du kan bruke på nytt i Scratch-prosjektene dine. Vi trenger tre tilpassede blokker for dette prosjektet. Slik lager du en tilpasset "trekant" -blokk:

  • Klikk på paletten "Flere blokker", og klikk deretter på knappen "Lag en blokk".
  • Skriv inn "trekant" i feltet for å navngi blokken.
  • Klikk på rullegardinpilen "Alternativer".
  • Klikk på "Legg til et tallinput".
  • Skriv inn "størrelse" for å erstatte "nummer1". Dette tallet vil angi sidelengden på hver trekke tegnet. Programmerere kaller disse inngangsdefinisjonene "parametere".
  • Klikk OK for å fortsette.
  • Legg til kodeblokkene nedenfor i den nye prosedyren "trekant":
Image

Hvordan det fungerer

Ved å ta en indikasjon fra vår første opplæring, inneholder denne nye blokken en tilpasset prosedyre for å bevege seg i et trekantet mønster som gjør det mulig å tegne like sidetrekanter.

Lag en "Sierpiński" -blokk.

  • Lag en andre blokk med navnet "Sierpiński".
  • Klikk på rullegardinmenyen Alternativer.
  • Denne gangen, lag to nummerinnganger.
  • Navn den ene "sidelengde" og den andre "nivåOfRecursions".
  • Klikk OK for å fortsette.
  • Legg til kodeblokkene nedenfor i den nye prosedyren "Sierpiński".

Image
Her bruker vi den betingede testen for å avgjøre om den rekursive samtalen skal foretas eller ikke. Hvis den evalueres til "sann", vil vi utføre "trekant" -blokken og tegne en trekant.
  • Imidlertid, hvis testen evalueres til "falsk", utfører vi i stedet koden i den andre delen av betinget. Der blir en rekursiv samtale til Sierpiński og parameteren "levelOfRecursions" blir dekrementert av en.
  • Blokkene "Flytt" og "Drei" dirigerer Sprite til neste passende posisjon før du tegner en ny trekant.
  • Etter hvert vil "levelOfRecursions" nå null, rekursjonen vil stoppe, og den minste forekomsten av trekanten vil bli trukket på scenen.
  • Den resulterende sluttutgangen er en stor trekant bestående av mindre, selvlignende trekanter.
  • Vi kan følge flytskjemaet nedenfor for å demonstrere hvordan Sierpiński fungerer når det kalles med et "levelOfRecursions" -argument av 1:

    Image

    Prosedyren starter med brukerinndata på 1 rekursjonsnivå og en største trekantsidelengde på 300 piksler. Prosedyren sjekker først om "levelOfRecursions" er lik 0. Siden 1 ikke er lik 0, trekker prosedyren 1 fra "levelOfRecursions" og kaller seg selv med et argument på 0. Blokkene "Move" og "Turn" er ikke ennå nådd, og ingenting blir trukket på scenen.

    I den andre samtalen tilsvarer "levelOfRecursions" 0 og utfører et anrop til prosedyren "trekant", som tegner en trekant med en sidelengde på 150 piksler. Prosedyren går tilbake til "Move" og "Turn" -blokkene fra den første samtalen, flytter 300 piksler og svinger 120 grader. Denne prosessen gjentas tre ganger totalt som kreves av "Gjenta" -sløyfen i utsagnet "Annet", og tegner ytterligere to trekanter på 150 piksler på forskjellige posisjoner på scenen.

    Lag en "centerTheDrawing" -blokk.

    • Lag en tredje blokk med navnet "centerTheDrawing".
    • Klikk på rullegardinmenyen Alternativer.
    • Klikk på "Legg til et tallinput".
    • Skriv inn "sidelengde" for å erstatte "nummer1".
    • Legg til kodeblokkene nedenfor i den nye prosedyren "centerTheDrawing":
    Image

    Hvordan det fungerer

    • Den neste tilpassede prosedyren sentrerer hele tegningen på scenen ved å beregne riktig startposisjon for Sprite basert på brukerens ønskede størrelsesinngang. Sierpiński-prosedyren tegner fraktalen i et spiralformet, mot klokken fra nederste venstre hjørne av den største trekanten.
    • Scenen er et firekvadrant koordinatnett med opprinnelse (0, 0) i sentrum. X-grensene er 240 og -240, og Y-grensene er 180 og -180.
    • Så hvis vi vet at scenen har et midtpunkt på X = 0, så for å sentrere trekanten horisontalt, skal tegningen starte på centeredX = "0 - sidelengde / 2". Vi vurderer at basen i denne trekanten er dens bredde.
    • For å finne det vertikale senteret, må vi først finne høyden på den likesidede trekanten fordi den ikke er den samme som lengden på sidene. Denne formelen er høyde = (√ 3/2) sidelengde . Nå som vi vet dens høyde, kan vi sentrere trekanttegningen vertikalt ved å beregne sentrertY = "0 - høyde / 2"

    Tredje utfordring: Skriv hovedkodesekvensen nedenfor for å få feilen til å tegne fraktale trekanter basert på brukerinput.

    • Image

      Scratch er et prosjekt for den livslange barnehagegruppen på MIT Media Lab.

      (Klikk for å forstørre.)

      Image

      (Klikk for å forstørre.)

      De første seks blokkene i vår hovedsekvens størrelse, plassering og orientering av vår Sprite rydder deretter scenen for alle tidligere tegninger.
    • Blokken "Spør () og vent", funnet i "Sensing" -paletten, ber brukeren om å legge inn et tall opp til 300. Dette tallet vil være størrelsen på den største trekanten i piksler. Brukerens innspill blir lagret i "Svar" -blokken.
    • Vi bruker en betinget uttalelse for å teste om brukeren oppgir et gyldig størrelsesnummer. Med noe større enn 300, vil tegningen ikke passe pent på scenen.
      • Hvis brukeren legger inn et tall større enn 300, setter vi uansett variabelen "Size" til 300, og bruker "Think" -blokken for å gi brukeren noen tilbakemeldinger om grensen.
      • Ellers har brukeren lagt inn en størrelse opp til 300, og vi setter variabelen "Size" til brukerens input.
    • Neste "spør" brukeren hvor mange rekursjonsnivåer de ønsker å se i fraktaltegningen.
    • Vi bruker en betinget uttalelse for å teste om brukeren legger inn et antall på 6 eller mindre. På grunn av oppløsningen av scenen, ville vi uansett ikke kunne se mer enn seks rekursjoner i Sierpiński-trekanttegningen.
      • Hvis brukeren legger inn et tall som er større enn 300, setter vi uansett variabelen "Nivå" til 6, og bruker "Tenk" -blokken for å gi brukeren noen tilbakemeldinger om grensen.
      • Ellers har brukeren lagt inn et gyldig nummer, og vi setter variabelen "Nivå" til brukerens inngang.
    • Nå som variablene "Størrelse" og "Nivå" er satt, overfører vi disse verdiene til prosedyrene "centerTheDrawing" og Sierpiński og utfører dem.
    • Å sette inn "Pen Down" -blokken mellom våre tilpassede prosedyresamtaler sikrer at vi begynner å tegne til rett tid.

    Len deg tilbake og nyt litt iøynefallende, animert matematisk kunst!

    Pakk inn

    Dette har vært den rikeste beregningsmessige tenkningsaktiviteten så langt, og dekker prinsipper som sekvenser, hendelser, løkker, operatører, betingelser, funksjoner og data . Spesielt viktig har vi introdusert rekursjon - en viktig teknikk for problemløsing innen informatikk.

    Hvis du ønsker å dykke dypere, kan du utforske andre skrapelærerressurser:

    • Her er en flott ressurs om undervisning med fraktaler fra Cynthia Lanius fra Rice University og EL Computing Scholars of Tomorrow Alliance.
    • Sjekk ut noen Scratch-studioer med samlinger av fraktalbaserte prosjekter:
      • Fractal Gallery
      • The Ultimate Fractal Gallery
      • Min fraktalsamling
    • Besøk nettstedet ScratchEd, et fellesskap av lærere som hjelper hverandre å lære og bruke skrap. Du kan finne leksjoner, aktiviteter, prosjektideer eller svar fra vennlige medpedagoger.
    • Creative Computing Workshop er et gratis online verksted hvor du kan lære mer om bruk av Scratch og støtte beregningstenkning.
    • Scratch Day er et verdensomspennende nettverk av samlinger der Scratchers møter opp, deler prosjekter og opplevelser og lærer mer om Scratch. Flott for barn og voksne!
    • Sierpiński Triangles er lenken der du kan finne koden for dette prosjektet.