<para>Dette er en reference til &kturtle;s &logo;. I dette kapitel næver vi kort alle <link linkend="different-instructions">forskellige instruktionstyper</link>. Derefter forklares alle <link linkend="commands">kommandoer</link> i en af gangen. Herefter følger forklaringer af <link linkend="containers">beholdare</link>, <link linkend="math">math</link>, <link linkend="questions">spørgsmål</link> og <link linkend="controlling-execution">kommandoer til at styre kørslen</link>. Tilsidst vises hvordan du kan oprette dine egne kommandoer med <link linkend="learn">learn</link>.</para>
<para>Ved brug af kommandoerne beder du &kturtle; om at gøre noget. Nogle kommandoer har brug for inddata, nogle giver uddata. <screen># forward er en kommando som behøver inddata, i dette tilfælde tallet 100:
<para>Formodentlig ved du allerede en hel del om tal. Måden som tal bruges i &kturtle; er ikke særlig anderledes end i sprog eller matematik. </para>
<para>Vi har de såkaldte naturlige tal: <userinput>0</userinput>, <userinput>1</userinput>, <userinput>2</userinput>, <userinput>3</userinput>, <userinput>4</userinput>, <userinput>5</userinput>, osv. De negative tal: <userinput>-1</userinput>, <userinput>-2</userinput>, <userinput>-3</userinput>, osv. Og tal med decimaler eller decimaltal, for eksempel: <userinput>0,1</userinput>, <userinput>3,14</userinput>, <userinput>33,3333</userinput>, <userinput>-5,05</userinput>, <userinput>-1,0</userinput>. </para>
<para>Tal kan bruges i <link linkend="math">matematiske beregninger</link> og <link linkend="questions">spørgsmål</link>. De kan også placeres i <link linkend="containers">containere</link>.</para>
<para>Tal er <glossterm>fremhævede</glossterm> med blåt i <link linkend="the-code-editor">kodeditoren</link>.</para>
</screen> I dette eksempel er <userinput>print</userinput> en kommando, mens <userinput>"Goddag, jeg er en streng."</userinput> er en streng. Strenge begynder og slutter med tegnet <userinput>"</userinput>. Det er disse tegn som gør at &kturtle; véd at det er en streng.</para>
<para>Strenge kan placeres i <link linkend="containers">containere</link>, men de kan ikke bruges i <link linkend="math">matematiske beregninger</link> eller i <link linkend="questions">spørgsmål</link>.</para>
<para>Strenge <glossterm>fremhæves</glossterm> med mørkerødt i <link linkend="the-code-editor">kodeditoren</link>.</para>
<para>Når du bruger programsproget &logo; laver du nye ting. Hvis du skriver et program har du ofte brug for <link linkend="containers">containere</link> og sommetider har du brug for <link linkend="learn">learn</link> for at oprette nye kommandoer. Når du laver en <link linkend="containers">container</link> eller en ny kommando med <link linkend="learn">learn</link> skal du angive et navn.</para>
<para>Du kan vælge et hvilket som helst navn, under forudsætning af at det ikke allerede har en betydning. Du kan for eksempel ikke navngive en container <link linkend="forward">forward</link>, eftersom dette navn allerede bruges til en kommando, og allerede har en betydning. <screen>
</screen> Navne kan kun indeholde bogstaver, tal og understregninger (_), og de skal begynde med et bogstav. </para>
<para>Læs gerne dokumentationen om <link linkend="containers">containere</link> og kommandoen <link linkend="learn">learn</link> for en bedre forklaring og flere eksempler. </para>
<para>Tilknytninger udføres med tegnet <userinput>=</userinput>. I programmeringssprog er det bedre ikke at udtale et enkelt <userinput>=</userinput> som 'er lig med' men som 'bliver'. Udtrykket 'er lig med' er m ere passende for <userinput>==</userinput>, som er et <link linkend="questions">spørgsmål</link>.</para>
<para>Tilknytninger bruges i almindelighed af to grunde: (1) for at tilføje indhold til <link linkend="containers">containere</link>, og (2) for at ændre indholdet i en beholder. For eksempel: <screen>x = 10
<para>Spørgsmål kan klistres sammen med såkaldte 'tdelisterord'. Klisterordene er <userinput>og</userinput>, <userinput>eller</userinput>, og det specielle tdelisterord <userinput>ikke</userinput>.</para>
<para>Brug af tdelisterord i spørgsmål forklares i afsnittet om <link linkend="question-glue">tdelisterord i spørgsmål</link>.</para>
</screen> Vi kan tilføje kommentarer til koden, som vi selv og andre kan læse. Kommentarer bruges for at: (1) tilføje en kort beskrivelse af programmet, (2) forklare hvordan et kodeafsnit virker hvis det er svært at forstå, og (3) til at 'kommentere væk' kodelinjer som (midlertidigt) skal ignoreres (se sidste linje i eksemplet).</para>
<para>Kommentarlinjer er <glossterm>fremhævede</glossterm> med mørkegult i <link linkend="the-code-editor">kodeditoren</link>.</para>
<para>Ved brug af kommandoerne beder du &kturtle; om at gøre noget. Nogle kommandoer har brug for inddata, nogle giver uddata. I dette afsnit forklarer vi alle kommandoerne der kan bruges i &kturtle;. Bemærk venligst at alle indbyggede kommandoer som vi diskuterer her er <glossterm>fremhævede</glossterm> med mørkegrønt i <link linkend="the-code-editor">kodeeditoren</link>. Dette kan hjælpe dig med at se dem.</para>
<userinput>forward</userinput> flytter skildpadden X pixels fremad. Når pennen er nede vil skildpadden efterlade et spor. <userinput>forward</userinput> kan forkortes til <userinput>fw</userinput></para></listitem>
<userinput>backward</userinput> flytter skildpadden X pixels tilbage. Når pennen er nede vil skildpadden efterlade et spor. <userinput>backward</userinput> kan forkortes til <userinput>bw</userinput></para></listitem>
<userinput>turnleft</userinput> beder skildpadden om at dreje X grader til venstre. <userinput>turnleft</userinput> kan forkortes til <userinput>tl</userinput>.</para></listitem>
<userinput>turnright</userinput> beder skildpadden om at dreje X grader til højre. <userinput>turnleft</userinput> kan forkortes til <userinput>tr</userinput>.</para></listitem>
<userinput>direction</userinput> sætter skildpaddens retning til X grader talt ud fra nul, og således ikke relativ til skildpaddens tidligere retning. <userinput>direction</userinput> kan forkortes til <userinput>dir</userinput>.</para></listitem>
<userinput>go</userinput> beder skildpadden om at gå til et betsemt sted på kanvassen. Dette sted er X <glossterm linkend="pixels">pixels</glossterm> fra venstre side af kanvassen, og Y <glossterm linkend="pixels">pixels</glossterm> fra toppen af kanvassen. Bemærk at ved brug af <userinput>go</userinput> kommandoen vil skildpadden ikke tenge en linje.</para></listitem>
<userinput>gox</userinput> brug af denne kommando vil få skildpadden til at flytte til X <glossterm linkend="pixels">pixels</glossterm> fra venstre side af kanvassen mens den forbliver på samme højde.</para></listitem>
<userinput>goy</userinput> brug af denne kommando vil få skildpadden til at flytte til X <glossterm linkend="pixels">pixels</glossterm> fra toppen af kanvassen mens afstanden til venstre side er uforandret.</para></listitem>
<para>Skildpadden har en pen, der tegner en linje når skildpadden flyttes. Der er nogle få kommandoer til at kontrollere pennen. I dette afsnit forklarer vi disse kommandoer.</para>
<userinput>pendown</userinput> trykker pennen ned på kanvassen. Når pennen er <quote>down</quote> på kanvassen vil en linje blive tegnet når skildpadden bevæger sig. Se også <userinput>penup</userinput>.</para></listitem>
<userinput>pendown</userinput> trykker pennen ned på kanvassen. Når pennen er <quote>down</quote> på kanvassen vil en linje blive tegnet når skildpadden bevæger sig. Se også <userinput>penup</userinput>. <userinput>pendown</userinput> kan forkortes til <userinput>pd</userinput>.</para></listitem>
<userinput>penwidth</userinput> sætter pennens bredde (linjebredden) til mængden X <glossterm linkend="pixels">pixels</glossterm>. <userinput>penwidth</userinput> kan forkortes til <userinput>pw</userinput>.</para></listitem>
<userinput>pencolor</userinput> sætter pennens farve. <userinput>pencolor</userinput> tager en <glossterm linkend="rgb">RGB kombination</glossterm> som inddata. <userinput>pencolor</userinput> kan forkortes til <userinput>pc</userinput>.</para></listitem>
Med kommandoen <userinput>canvassize</userinput> kan du sætte størrelsen af kanvassen. Den tager X og Y som inddata, hvor X er den nye kanvas' bredde i <glossterm linkend="pixels">pixels</glossterm>, og Y den nye højde for kanvassen i <glossterm linkend="pixels">pixels</glossterm>. <userinput>canvassize</userinput> kan forkortes til <userinput>cs</userinput>.</para></listitem>
<userinput>canvascolor</userinput> sætter farven for kanvassen. <userinput>canvascolor</userinput> tager en <glossterm linkend="rgb">RGB combination</glossterm> som inddata. <userinput>canvascolor</userinput> kan forkortes til <userinput>cc</userinput>.</para></listitem>
Med kommandoen <userinput>wrapon</userinput> kan du slå <glossterm linkend="wrapping">ombrydning</glossterm> <quote>til</quote> for kanvassen. Se venligst ordforklaringen hvis du ønsker at vide hvad <glossterm linkend="wrapping">ombrydning</glossterm> er.</para></listitem>
Med kommandoen <userinput>wrapoff</userinput> kan du slå <glossterm linkend="wrapping">ombrydning</glossterm> <quote>fra</quote> for kanvassen. Dette betyder at skildpadden kan flytte væk fra kanvassen og fare <quote>vild</quote>. Se venligst ordforklaringen hvis du ønsker at vide hvad <glossterm linkend="wrapping">ombrydning</glossterm> er.</para></listitem>
Med <userinput>clear</userinput> kan du rydde alle tegninger væk fra kanvassen. Alt andet forbliver: positionen og vinklen for skildpadden, kanvasfarven, skildpaddens synlighed og kanvassens størrelse. <userinput>clear</userinput> kan forkortes til <userinput>cr</userinput>.</para></listitem>
<userinput>reset</userinput> rydder meget mere gennemgribende op end kommandoen <userinput>clear</userinput>. Efter en <userinput>reset</userinput> kommando er alt som lige efter du netop startede &kturtle;. Skildpadden er lige i midten af skærmen, kanvasfarven er hvis og skildpadden tegner en sort linje på kanvassen.</para></listitem>
<para>Først en kort forklaring af hvad en sprite er: en sprite er et lille billede der kan flyttes rundt på skærmen, ligesom vi man ofte ser i computer-spil. For mere info se ordforklaringen om <glossterm linkend="sprites">sprite</glossterm>). </para>
<para>Herefter vil du finde et fuldt overblik over alle kommandoer til at arbejde med sprite.</para>
<para>[Denne udgave af &kturtle; understøtter endnu ikke brugen af sprite bortset fra skildpadden. I fremtidige udgaver vil du kunne ændre skildpadden til noget du selv har designet.]</para>
<userinput>show</userinput> gør skildpadden synlig igen efter den har været skjult. <userinput>show</userinput> kan forkortes til <userinput>ss</userinput>.</para></listitem>
<userinput>hide</userinput> skjuler skildpadden. Dette kan bruges hvis skildpadden ikke passer ind i din tegning. <userinput>hide</userinput> kan forkortes til <userinput>sh</userinput>.</para></listitem>
<userinput>print</userinput>-kommandoen bruges til atbede skildpadden om at skrive noget på kanvassen. <userinput>print</userinput> tager tal og strenge som inddata. Du kan <userinput>print</userinput> forskellige tal og strenge ved at bruge <quote>+</quote>-symbolet. Se et lille eksempel her: <screen>year = 2003
<userinput>fontsize</userinput> sætter skriftens størrelse der bruges af <userinput>print</userinput>. <userinput>fontsize</userinput> tager inddata der skal være et tal. Størrelsen sættes i <glossterm linkend="pixels">pixels</glossterm>.</para></listitem>
<title>En kommando der ruller en terning for dig</title>
<para>Der er en kommando som ruller terninger for dig. Den kaldes <userinput>random</userinput>, og er meget nyttig til at få uforudsete resultater.</para>
<userinput>random</userinput> er en kommando der bruger inddata og giver uddata. Som inddata kræves to tal, det første (X) sætter minimum for uddata, det andet (Y) sætter maksimum. Uddata er et tilfældigt valgt tal der er større end eller lig med minimum og mindre end eller lig med maksimum. Her er el lille eksempel: <screen>
<title>Input og tilbagemelding gennem dialoger</title>
<para>En dialog er et lille vindue der giver noget tilbagemelding eller beder om noget input. &kturtle; har to kommandoer for dialoger, nemlig: <userinput>message</userinput> og <userinput>inputwindow</userinput></para>
<userinput>message</userinput>-kommandoen tager en <link linkend="string">streng</link> som input. Den viser en dialog der indeholder teksten fra <link linkend="string">strengen</link>. <screen>year = 2003
<userinput>inputwindow</userinput> tager en <link linkend="string">streng</link> som input. Det viser en dialog der indeholder teksten fra strengen, ligesom <link linkend="message">message</link>. Men derudover er der også et inddatafelt i dialogen. Gennem dette inddatafelt kan brugeren indtaste et <link linkend="number">tal</link> eller en <link linkend="string">streng</link> som kan opbevares i en <link linkend="containers">container</link>. For eksempel <screen>
</screen> Når en bruger annullere dialogen, eller ikke indtaster noget over hovedet, bliver <link linkend="containers">containeren</link> tømt.</para></listitem>
<para>Containere er bogstaver eller ord der kan bruges af programmører til at opbevare et tal eller en tekst. Containere der indeholder et tal kaldes <link linkend="variables">variabler</link>, containere der indeholder tekst kaldes <link linkend="string">streng</link>.</para>
</screen> I den første linje gøres bogstavet <userinput>x</userinput> til en variable (tal-container). Som du ser bliver værdien af den variable <userinput>x</userinput> sat til 3. På den anden linje bliver værdien udskrevet.</para>
<para>Bemærk at hvis vi ønskede at udskrive et <quote>x</quote> så skulle vi have skrevet <screen>print "x"
</screen> I de første to linjer bliver variablerne <userinput>A</userinput> og <userinput>B</userinput> sat til 2004 og 25. På den tredje linje bliver variablen <userinput>C</userinput> sat til <userinput>A + B</userinput>, som er 2029. Resten af eksemplet består af 3 <userinput>print</userinput> kommandoer med <userinput>backward 30</userinput> imellem. <userinput>backward 30</userinput> er der for at sørge for at hvert uddata er på en ny linje. I dette eksempel ser du også at variabler kan bruges i <link linkend="math">matematiske beregninger</link>.</para>
</screen> Den almindelige tekst afgrænses af citationstegn. Denne almindelige tekst kalder vi en <link linkend="strings">streng</link>.</para>
<para>Strenge kan også opbevares i <link linkend="containers">containere</link> ligesom <link linkend="number">tal</link>Strenge er meget ligesom variabler. Den største forskel er at de indeholder tekst i stedet for tal. Derfor kan strenge ikke bruges i <link linkend="math">matematiske beregninger</link> og <link linkend="questions">spørgsmål</link>. Et eksempel på brugen af strenge: <screen>
</screen> I den første linje sættes strengen <userinput>x</userinput> til <quote>Goddag</quote>. I den anden linje sættes strengen <userinput>name</userinput> til uddata fra <userinput>inputwindow</userinput> kommandoen. På den tredje linje udskriver programmet en komposition af tre strenge på kanvassen.</para>
<para>Dette program beder dig om at indtaste dit navn. Når du for eksempel indtaster navnet <quote>Jesper</quote>, udskriver programmet <quote>Goddag Jesper, hvordan går det?</quote>. Bemærk venligst at plusset (+) er det eneste matematiske symbol du kan bruge med strenge.</para>
<para>Ja, &kturtle; kanlave matematik for dig. Du kan lægge sammen (+), trække fra (-), gange (*) og dividere (/). Her er et eksempel hvori vi bruger dem allesammen: <screen>
</screen> Ved du hvilken værdi a, b, c og d har? Bemærk venligst brugen af <link linkend="assignment">tilknytnings</link>symbolet <userinput>=</userinput>.</para>
<para>Hvis du blot ønsker at en simpel beregning skal udføres kan du gøre noget i retning af dette: <screen>print 2004-12
</screen> Det der er imellem parenteserne vil blive beregnet først. I dette eksepel, bliver 20-5 beregnet, så ganget med 2, divideret med 30, og derpå adderes 1 (hvilket giver 2).</para>
<para><link linkend="if"><userinput>if</userinput></link> og <link linkend="while"><userinput>while</userinput></link> er <link linkend="controlling-execution">udførselskontroller</link> som vi vil diskutere i næste afsnit. I dette afsnit bruger vi <link linkend="if"><userinput>if</userinput></link>-kommandoen til at forklare spørgsmål.</para>
</screen> I dette eksempel er spørgsmålet <userinput>x > 5</userinput>, hvis svaret på dette spørgsmål er 'sand' så vil koden mellem parenteserne blive udført. Spørgsmål er en vigtig del af programmering og bruges ofte sammen med <link linkend="controlling-execution">udførselskontroller</link>, såsom <link linkend="if"><userinput>if</userinput></link>. Alle tal og <link linkend="variables">variabler</link> (tal-containere) kan sammenlignes med hianden med spørgsmål.</para>
</screen>I dette eksempel bliver tdelister-ordet <userinput>and</userinput> brugt til at klistre 2 spørgsmål (<userinput>a < 5</userinput>, <userinput>b == 5</userinput>) sammen. Hvis en side af <userinput>and</userinput> vil svare 'falsk' så vil hele spørgsmålet svare 'falsk', fordimed tdelister-ordet <userinput>and</userinput> skal begge sider være 'sand' for at svare 'sand'. Glem endelig ikke parenteser rundt om spørgsmålene!</para>
<para>Når to spørgsmål klistres sammen med <userinput>og</userinput> skal begge sider af <userinput>og</userinput> være 'sande' for at resultatet skal være 'sandt'. Et eksempel: <screen>
<para><userinput>not</userinput> er et specielt tdelisterord i spørgsmål eftersom det kun virker med et spørgsmål af gangen. <userinput>not</userinput> ændrer 'sand' til 'falsk' og 'falsk' til 'sand'. Et eksempel: <screen>
</screen> I dette eksempel er det sammenklistrede spørgsmål 'sandt', men <userinput>not</userinput> ændrer det til 'falsk'. Altså skrives <userinput>"Farvel"</userinput> ud på <link linkend="the-canvas">kanvassen</link>.</para>
<para>Udførselskontrol gør dig i stand til — som navnet antyder — at kontrollere udførslen.</para>
<para>Kommandoer til at styre kørslen <glossterm>fremhæves</glossterm> med mørkegrønt og fed type. Kantede parenteser bruges som oftest sammen med kommandoer til at styre kørslen, og de er <glossterm>fremhævet</glossterm> med lysegrønt.</para>
<para>Hvis du har prøvet at programmere noget i &kturtle; har du måske bemærket at skildpadden kan være meget hurtig til at tegne. Denne kommando får skildpadden til at vente et givet stykke tid.</para>
</screen> Denne kode tegne en cirkel, men skildpadden vil vente et halvt sekund ved hvert skridt. Dette giver indtrykket af en skildpadde der bevæger sig langsomt.</para></listitem>
Koden der er placeret på <quote>...</quote> vil kun blive udført hvis altså <userinput>if</userinput> svaret på <link linkend="questions">spørgsmålet</link> er <quote>sand</quote>. Læs venligst mere om <link linkend="questions">spørgsmål</link> i <link linkend="questions">spørgsmålsafsnittet</link>. <screen>
</screen> På første linje sættes <userinput>x</userinput> til 6. På den anden linje stilles <link linkend="questions">spørgsmålet</link> <userinput>x > 5</userinput>. Da svaret på dette spørgsmål er <quote>sand</quote> vil udførselskontrollen <userinput>if</userinput> tillade koden mellem parenteserne at blive udført</para></listitem>
Udførselskontrollen <userinput>while</userinput> er meget lige som <link linkend="if"><userinput>if</userinput></link>. Forskellen er at <userinput>while</userinput> bliver ved med at gentage (gå i løkke) koden mellem parenteserne indtil svaret på <link linkend="questions">spørgsmålet</link> er <quote>falsk</quote>. <screen>
</screen> På den første linje sættes <userinput>x</userinput> til 1. På den anden linje stilles <link linkend="questions">spørgsmålet</link> <userinput>x < 5</userinput>. Da svaret på dette spørgsmål er <quote>sand</quote> starter udførselskontrollen <userinput>while</userinput> udførslen af koden mellem parenteserne indtil svaret på <link linkend="questions">spørgsmålet</link> er <quote>falsk</quote>. I dette tilfælde vil koden mellem parenteserne blive udført 4 gange, fordi hver gang den femte linje udføres bliver <userinput>x</userinput> en større.</para></listitem>
<userinput>else</userinput> kan yderligere bruges i udførselskontrollen <link linkend="if"><userinput>if</userinput></link>. Koden mllem parenteserne efter <userinput>else</userinput> udføres kun hvis svaret på <link linkend="questions">spørgsmålet</link> der stilles er <quote>falsk</quote>. <screen>
</screen> Der <link linkend="questions">spørges</link> om <userinput>x</userinput> er større end 5. Idet <userinput>x</userinput> er sat til 4 på den første linje er svaret på spørgsmålet <quote>falsk</quote>. Dette betyder at koden mellem parenteserne efter <userinput>else</userinput> bliver udført.</para></listitem>
</screen> Hver gang koden mellem parenteserne udføres bliver <userinput>x</userinput> et tal større, indtil x når tallet 10. Koden mellem parenteserne udskriver <userinput>x</userinput> ganget med 7. Efter dette program er færdigt vil du se syv-tabellen på kanvassen.</para></listitem>
<title>Lav dine egne kommandoer med <quote>learn</quote></title>
<para><userinput>learn</userinput> er en meget speciel kommando, fordi den bruges til at lave dine egne kommandoer. Kommandoen du laver kan tage <glossterm linkend="input-output">inddata</glossterm> og give <glossterm linkend="input-output">uddata</glossterm> tilbage. Lad os kigge på hvordan en ny kommando laves. <screen>
</screen> Den nye kommando hedder <userinput>circle</userinput>. <userinput>circle</userinput> tager en <glossterm linkend="input-output">inddata</glossterm>, et tal, til at sætte cirklens størrelse. <userinput>circle</userinput> giver ingen <glossterm linkend="input-output">uddata</glossterm>. <userinput>circle</userinput> kommandoen kan nu bruges ligesom en normal kommando i resten af koden. Se dette eksempel: <screen>learn circle X [
</screen> I dette eksempel laves en ny kommando der hedder <userinput>multiplyBySelf</userinput>. Inddata for denne kommando bliver ganget med sig selv og derefter returneret, ved brug af <anchor id="return"/><userinput>return</userinput> kommandoen. <userinput>return</userinput> kommandoen er måden at få uddata fra en hjemmelavet funktion. </para>