
Lister og funktioner
Lister
Lister (array) er en datastruktur, som har lidt samme funktion som variabler. De kan gemme værdier under ét navn i en bestemt rækkefølge. Modsat variabler, som kun kan gemme én værdi, kan lister dog gemme mange værdier. Lister kan bruges til at arbejde med større mængder data, som fx point, navne, tal, etc. Lister er dynamiske og man kan tilføje, fjerne og ændre værdierne i en liste.
Hvert element i en liste har et indeks, 1, 2, 3, osv., hvilket gør det muligt at tilgå og ændre de enkelte elementer direkte. Fx hvis du har en liste med navnene ‘Mette, Peter, Susanne’ og man bruger “erstat nummer 2 af liste med Søren” kommer listen i stedet til at hedde ‘Mette, Søren, Susanne’, da Peter havde indeks 2 og derfor blev udskiftet med Søren.
I Scratch laver man lister under menu-feltet Variabler.

Her er et eksempel på et lille program som bruger en liste, som I kan se er dette program en modifikation af programmet fra Øvelse i variabler 2, hvor der kun blev gemt 2 navne under hver sin variabel. Dette program kan i teorien gemme uendelige antal navne, fordi det bruger en liste.

Nulstilling af variabler og lister
Som I kan se i programmet ovenfor starter det med de to sætninger “sæt brugersvar til 0” og “slet alle klassekammerater”. De gør at programmet, når det starter op, nulstiller (sletter) variablen brugerSvar og listen klassekammerater.
Det er vigtigt, at vi altid starter vores programmer med at nulstille alle variabler og lister, som bliver brugt i programmet. Det gør vi for at sikre, at der ikke overføres gammel data fra sidst programmet blev kørt. I sletter variabler og lister med disse to sætninger (husk at vælge de rigtige variabel- og listenavne).

Manipulation af lister
Fordelen ved lister, udover at de er i stand til at gemme store mængder data, er at de kan manipuleres på forskellige måder. Det gør, at vi kan bruge dem til mange ting i vores programmer.
Vi kan tilføje en værdi til en eksisterende liste med sætningen “tilføj ting til listeNavn”. Denne sætning tilføjer altid en værdi i enden af listen.

Vi kan slette værdier fra vores eksisterende liste med sætningen “slet X af listeNavn”. Denne sætning sletter den værdi, som har det indekstal, der angives i feltet. I eksemplet herunder slettes værdien med indeks 1, altså den første i vores liste.

Vi tilføje en værdi i en eksisterende liste på et specifik indekstal med sætningen “indsæt X ved X af listeNavn”. Denne sætning erstatter ikke den værdi, der står på indekset, men overtager pladsen og rykker de efterfølgende værdier ét indekstal ned. Dvs. vi kan skubbe en værdi ind i mellem andre værdier uden at slette eller ændre disse.

Den sidste manipulation af lister, vi kan foretage i Scratch er sætningen “erstat nummer X af listeNavn med X”. Denne sætning erstatter en værdi med en anden værdi, som er placeres på det indekstal, der vælges i sætningen. Modsat den forrige bliver den værdi, der står der i forvejen slettet og erstattet af den nye værdi.

Udover manipulation af lister, kan vi bruge dele af en liste i vores program, fx blokken nummer x af listeNavn. Denne funktion kan bruges til at kalde et element fra listen, som fx et tal eller et navn vha. elementets indekstal. I blokken nedenfor ville vi fx kalde navnet Søren, hvis listen indeholdt navnene Søren (1), Mette (2), Peter (3), Susanne (4), fordi Søren har indekstal 1.

Lister har desuden den fordel, at de registrerer hvor mange elementer, der er i listen, altså længden. Det kan fx bruges, hvis vi ønsker at vide hvor mange elementer, der er i listen eller hvis vi vil udregne gennemsnit eller lignende.

Operatorer og lister
Ligesom med variabler kan udfører forskellige matematiske funktioner (operatorer) på lister. Det kræver dog en lidt mere kompliceret tilgang end med variabler.
Største tal i en liste
For at finde det største tal i en liste vælges det første tal som det foreløbigt største. Derefter gennemgår det resten af tallene ét efter ét og sammenligner hvert tal med det nuværende største. Hvis et tal er større, opdateres den største værdi. Når hele listen er gennemgået, returneres det største tal som resultat.
I Scratch er det lidt mere kompliceret. Først oprettes to variabler: størsteTal, som kan gemme resultatet, og i, som kan gemme den foreløbige position. Der skal bruges en for-løkke, hvor der bruges blokken længden af listeNavn, således at løkker får alle tal fra listen med. Der skal desuden bruges en forgrening, som vurderer betingelsen er den foreløbige position større end det tal, som står i variablen størsteTal. Hvis sandt, ændres variablen med det nye tal, osv. indtil hele listen er gennemgået.

Mindste tal i en liste
For at finde det mindste tal i en liste, gøres mere eller mindre det samme, blot med modsat fortegn. Først vælges det første tal som det foreløbigt mindste. Derefter gennemgår det resten af tallene ét efter ét og sammenligner hvert tal med det nuværende mindste. Hvis et tal er mindre, opdateres den mindste værdi. Når hele listen er gennemgået, returneres det mindste tal som resultat.
I Scratch er koden også næsten den samme. Der skal oprettes 2 variabler, mindsteTal og ii, som bruges på samme måde som tidligere. Vær opmærksom på, at vi i forgreningen vurderer om den foreløbige variabel ii er mindre end variablen mindsteTal.

Gennemsnit af en listes værdier
Et program finder gennemsnittet af værdierne i en liste ved først at summere alle tallene i listen og derefter dividere summen med antallet af tal. Først starter programmet med en sum, der er nul, og gennemgår listen én værdi ad gangen, hvor hver værdi lægges til summen. Når alle værdier er talt med, finder programmet gennemsnittet ved at dividere summen med antallet af elementer i listen. Til sidst returneres resultatet som gennemsnittet af tallene.
I Scratch betyder det, at der skal oprettes 2 variabler, gennemsnit og iii (foreløbig variabel). Der skal bruges en for-løkke som gentages længden af listeNavn gange. Efter løkken divideres alle tallene fra listen med antallet af tal i listen (længden af liste) og den nye værdie tildeles variablen gennemsnit.

Øvelse i lister
Lav et program, som bruger en liste. Programmet bede brugeren om at indtaste et tal mellem 0 og 20. Tallene skal gemmes i en liste. Programmet skal blive ved med at bede brugeren om at indtaste et tal, indtil brugeren skriver nej eller Nej. Når programmet er færdigt, skal programmet sige tallene fra listen til brugeren. I kan med fordel se på programmet fra eksemplet på program, der bruger liste.
Tag et screenshot af koden og tilføj den til jeres logbog.
Eksempel på brug af lister
Nedenfor er der et program, som gennemløber 7-tabellen vha. en for-løkke 10 gange.

Dette program kan vi udvide, så det gemmer alle værdierne i en liste. Nedenfor kan I se en modificeret udgave af 7-tabel-programmet fra før, der gemmer beregningerne i listen tabelBeregninger. Programmet bruger sætningen “indsæt X ved X af listeNavn”, så vi kan sikre os at resultatet indsættes på henholdsvis indeks 1, 2, 3, 4, 5, 6, 7, 8, 9 og 10 for hver beregning. Vær opmærksom på, at programmet starter med at nulstille både variablen tæller og listen tabelBeregninger.

Opsamlingsøvelser til løkker og lister
Øvelse i programmering 3
Med udgangspunkt i 7-tabel-programmet fra før, skal I nu lave et program, hvor brugeren selv kan bestemme hvilken tabel, der skal vises og hvor mange beregninger, det skal foretage. Programmet skal opfylde følgende krav:
- Brugeren skal selv bestemme, hvilken tabel programmet skal beregne.
- Brugeren skal selv bestemme, hvor mange beregninger programmet skal foretage (brugeren kan fx vælge 5-tabellen med et gennemløb på 5, dvs. 1×5 … 5×5).
- Alle de beregnede værdier skal gemmes i en liste.
- Når programmet er færdigt, skal summen af alle beregningerne beregnes (I kan tjekke med med resultaterne 6-tabellen i 10 gennemløb = 330 og 8-tabellen i 20 gennemløb = 1.680) (hint: lav en variabel navngivet sum og brug sætningen “ændre sum med xx” for at tilføje for hver udregning).
Tag et screenshot af koden og tilføj den til jeres logbog.
Øvelse i programmering 4
Lav et program, hvor brugeren skal indtaste tal. Brugeren skal selv kunne bestemme, hvornår indtastningen skal stoppe (fx ved at indtaste “n” eller “0”). Når brugeren er færdig med indtastningen skal programmet vise:
- Alle de indtastede tal (hint: gem dem i en liste).
- Antallet af indtastede tal (hint: brug sætningen “længden af tabelNavn”).
- Summen af de indtastede tal (hint: lav en variabel navngivet sum og brug sætningen “ændre sum med xx” for at tilføje for hver udregning).
- Det største tal
- Det mindste tal
- Gennemsnittet af de indtastede tal
Tag et screenshot af koden og tilføj den til jeres logbog.
Funktioner
Ofte i programmering har man brug for at udføre en del kode flere gange, altså skrive den samme kode flere gange i samme program. Det er ikke effektivt, da det giver længere kode og har større risiko for fejl. For at undgå dette kan man bruge funktioner.
I Scratch er en funktion en blok af kode, der kan genbruges flere gange for dermed at gøre programmet mere effektivt og overskueligt. Funktioner kan tage input og udføre bestemte handlinger, men de returnerer ikke værdier, som i traditionelle programmeringssprog. De bruges ofte til at strukturere koden, til at undgå gentagelser og til at gøre projekter
I Scratch kan funktioner findes under Mine brikker, hvor I kan oprette en ny blok og give den et bestemt formål.

I Scratch bruges funktioner primært til at strukturere kode og til at undgå gentagelser. Fordelen er, at koden kun skal skrives én gang og så kan kaldes mange gange efter det.
Øvelse i funktioner 1
Se videoen og lav koden, som den bliver præsenteret. Den viser et tydeligt eksempel på hvorfor funktioner er smarte, og hvordan de kan hjælpe med at genbruge kodestykker.
Øvelse i funktioner 2
Se videoen og lav programmet i samme rækkefølge som læreren. Den viser tydeligt, hvordan man kan sparre tid ved at kalde funktioner med et kodestykke, i stedet for at skrive koden mange gange.