&kturtle;'s &logo; programmeringsreferenceDette er en reference til &kturtle;s &logo;. I dette kapitel næver vi kort alle forskellige instruktionstyper. Derefter forklares alle kommandoer i en af gangen. Herefter følger forklaringer af beholdare, math, spørgsmål og kommandoer til at styre kørslen. Tilsidst vises hvordan du kan oprette dine egne kommandoer med learn.Forskellige instruktionstyperSom i alle sprog har Logo forskellige typer af ord og symboler. Her forklares kortfattet forskellen mellem typerne.KommandoerVed brug af kommandoerne beder du &kturtle; om at gøre noget. Nogle kommandoer har brug for inddata, nogle giver uddata. # forward er en kommando som behøver inddata, i dette tilfælde tallet 100:
forward 100
For en detaljeret oversigt over alle kommandoer som &kturtle; understøtter, se her.TalFormodentlig 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. Vi har de såkaldte naturlige tal: 0, 1, 2, 3, 4, 5, osv. De negative tal: -1, -2, -3, osv. Og tal med decimaler eller decimaltal, for eksempel: 0,1, 3,14, 33,3333, -5,05, -1,0. Tal kan bruges i matematiske beregninger og spørgsmål. De kan også placeres i containere.Tal er fremhævede med blåt i kodeditoren.StrengeFørst et eksempel:
skriv "Goddag, jeg er en streng."
I dette eksempel er print en kommando, mens "Goddag, jeg er en streng." er en streng. Strenge begynder og slutter med tegnet ". Det er disse tegn som gør at &kturtle; véd at det er en streng.Strenge kan placeres i containere, men de kan ikke bruges i matematiske beregninger eller i spørgsmål.Strenge fremhæves med mørkerødt i kodeditoren.NavneNår du bruger programsproget &logo; laver du nye ting. Hvis du skriver et program har du ofte brug for containere og sommetider har du brug for learn for at oprette nye kommandoer. Når du laver en container eller en ny kommando med learn skal du angive et navn.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 forward, eftersom dette navn allerede bruges til en kommando, og allerede har en betydning.
# Her bruges forward som en container, men det har allerede en betydning,
# altså forårsager dette et fejl:
forward = 20
# Dette virker:
forward 20
Navne kan kun indeholde bogstaver, tal og understregninger (_), og de skal begynde med et bogstav. Læs gerne dokumentationen om containere og kommandoen learn for en bedre forklaring og flere eksempler. TilknytningerTilknytninger udføres med tegnet =. I programmeringssprog er det bedre ikke at udtale et enkelt = som 'er lig med' men som 'bliver'. Udtrykket 'er lig med' er m ere passende for ==, som er et spørgsmål.Tilknytninger bruges i almindelighed af to grunde: (1) for at tilføje indhold til containere, og (2) for at ændre indholdet i en beholder. For eksempel: x = 10
# Containeren x indeholder nu tallet 10.
W = "Min alder er: "
# Containeren W indeholder nu "Min alder er: ".
# Dette udskriver ud containerne 'W' og 'x' på kanvassen
print W + x
For flere eksempler, se afsnittet om containere.Matematiske symboler&kturtle; understøtter alle grundlæggende matematiske symboler: addere (+), subtrahere (-), multiplicere (*), dividere (/) og parenteser ( og ).For en fuldstændig forklaring og flere eksempler, se afsnittet om matematiske beregninger.SpørgsmålVi kan stille enkle spørgsmål hvor svaret er 'sand' eller 'falsk'.At bruge spørgsmål beskrives udførligt i afsnittet om spørgsmål.Spørgsmål tdelister-ordSpørgsmål kan klistres sammen med såkaldte 'tdelisterord'. Klisterordene er og, eller, og det specielle tdelisterord ikke.Brug af tdelisterord i spørgsmål forklares i afsnittet om tdelisterord i spørgsmål.KommentarerKommentarer er linjer som begynder med tegnet #. For eksempel:
# Dette er en kommentar!
print "Dette er ikke en kommentar"
# Foregående linje er ikke en kommentar, men den næste linje er det:
# print "Dette er ikke en kommentar"
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).Kommentarlinjer er fremhævede med mørkegult i kodeditoren.KommandoerVed 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 fremhævede med mørkegrønt i kodeeditoren. Dette kan hjælpe dig med at se dem.Flyt skildpaddenDer er adskillige kommandoer til at flytte skildpadden rundt på skærmen.forward (fw)forwardforward Xforward flytter skildpadden X pixels fremad. Når pennen er nede vil skildpadden efterlade et spor. forward kan forkortes til fwbackward (bw)backwardbackward Xbackward flytter skildpadden X pixels tilbage. Når pennen er nede vil skildpadden efterlade et spor. backward kan forkortes til bwturnleft (tl)turnleftturnleft Xturnleft beder skildpadden om at dreje X grader til venstre. turnleft kan forkortes til tl.turnright (tr)turnrightturnright Xturnright beder skildpadden om at dreje X grader til højre. turnleft kan forkortes til tr.direction (dir)directiondirection Xdirection sætter skildpaddens retning til X grader talt ud fra nul, og således ikke relativ til skildpaddens tidligere retning. direction kan forkortes til dir.centercentercentercenter flytter skildpadden til centrum for kanvassen.gogogo X,Ygo beder skildpadden om at gå til et betsemt sted på kanvassen. Dette sted er X pixels fra venstre side af kanvassen, og Y pixels fra toppen af kanvassen. Bemærk at ved brug af go kommandoen vil skildpadden ikke tenge en linje.goxgoxgox Xgox brug af denne kommando vil få skildpadden til at flytte til X pixels fra venstre side af kanvassen mens den forbliver på samme højde.goygoygoy Ygoy brug af denne kommando vil få skildpadden til at flytte til X pixels fra toppen af kanvassen mens afstanden til venstre side er uforandret.Skildpadden har en penSkildpadden 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.penup (pu)penuppenuppendown trykker pennen ned på kanvassen. Når pennen er down på kanvassen vil en linje blive tegnet når skildpadden bevæger sig. Se også penup.pendown (pd)pendownpendownpendown trykker pennen ned på kanvassen. Når pennen er down på kanvassen vil en linje blive tegnet når skildpadden bevæger sig. Se også penup. pendown kan forkortes til pd.penwidth (pw)penwidthpenwidth Xpenwidth sætter pennens bredde (linjebredden) til mængden X pixels. penwidth kan forkortes til pw.pencolor (pc)pencolorpencolor R,G,Bpencolor sætter pennens farve. pencolor tager en RGB kombination som inddata. pencolor kan forkortes til pc.Kommandoer til at kontrollere kanvassenDer er adskillige kommandoer til at kontrollere kanvassen.canvassize (cs)canvassizecanvassize X,Y
Med kommandoen canvassize kan du sætte størrelsen af kanvassen. Den tager X og Y som inddata, hvor X er den nye kanvas' bredde i pixels, og Y den nye højde for kanvassen i pixels. canvassize kan forkortes til cs.canvascolor (cc)canvascolorcanvascolor R,G,Bcanvascolor sætter farven for kanvassen. canvascolor tager en RGB combination som inddata. canvascolor kan forkortes til cc.wraponwraponwrapon
Med kommandoen wrapon kan du slå ombrydningtil for kanvassen. Se venligst ordforklaringen hvis du ønsker at vide hvad ombrydning er.wrapoffwrapoffwrapoff
Med kommandoen wrapoff kan du slå ombrydningfra for kanvassen. Dette betyder at skildpadden kan flytte væk fra kanvassen og fare vild. Se venligst ordforklaringen hvis du ønsker at vide hvad ombrydning er.Kommandoer til at rydde opDer er to kommandoer til at rydde op på kanvassen efter du har rodet.clear (cr)clearclear
Med clear kan du rydde alle tegninger væk fra kanvassen. Alt andet forbliver: positionen og vinklen for skildpadden, kanvasfarven, skildpaddens synlighed og kanvassens størrelse. clear kan forkortes til cr.resetresetresetreset rydder meget mere gennemgribende op end kommandoen clear. Efter en reset 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.Skildpadden er en spriteFø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 sprite). Herefter vil du finde et fuldt overblik over alle kommandoer til at arbejde med sprite.[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.]showshow (ss)showshow gør skildpadden synlig igen efter den har været skjult. show kan forkortes til ss.hide (sh)hidehidehide skjuler skildpadden. Dette kan bruges hvis skildpadden ikke passer ind i din tegning. hide kan forkortes til sh.Kan skildpadderne skrive?Svaret er: ja. Skildpaddenkan skrive, han skiver næsten alt det du beder den om at skrive.printprintprint Xprint-kommandoen bruges til atbede skildpadden om at skrive noget på kanvassen. print tager tal og strenge som inddata. Du kan print forskellige tal og strenge ved at bruge +-symbolet. Se et lille eksempel her: year = 2003
author = "Cies"
print author + " startede KTurtle-projektet i " + year + " og nyder stadig at arbejde med det!"
fontsizefontsizefontsize Xfontsize sætter skriftens størrelse der bruges af print. fontsize tager inddata der skal være et tal. Størrelsen sættes i pixels.En kommando der ruller en terning for digDer er en kommando som ruller terninger for dig. Den kaldes random, og er meget nyttig til at få uforudsete resultater.tilfældigrandom X,Yrandom 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:
repeat 500 [
x = random 1,20
forward x
turnleft 10 - x
]
Brug af random-kommandoen kan tilføje lidt kaos til dit program.Input og tilbagemelding gennem dialogerEn dialog er et lille vindue der giver noget tilbagemelding eller beder om noget input. &kturtle; har to kommandoer for dialoger, nemlig: message og inputwindowmessagemessagemessage Xmessage-kommandoen tager en streng som input. Den viser en dialog der indeholder teksten fra strengen. year = 2003
author = "Cies"
print author + " startede KTurtle-projektet i " + year + " og nyder stadig at arbejde med det!"
inputwindowinputwindowinputwindow Xinputwindow tager en streng som input. Det viser en dialog der indeholder teksten fra strengen, ligesom message. Men derudover er der også et inddatafelt i dialogen. Gennem dette inddatafelt kan brugeren indtaste et tal eller en streng som kan opbevares i en container. For eksempel
in = inputwindow "Hvor gammel er du?"
out = 2003 - in
print "I 2003 var du " + out + " år gammel på et tidspunkt."
Når en bruger annullere dialogen, eller ikke indtaster noget over hovedet, bliver containeren tømt.ContainereContainere er bogstaver eller ord der kan bruges af programmører til at opbevare et tal eller en tekst. Containere der indeholder et tal kaldes variabler, containere der indeholder tekst kaldes streng.Containere der ikke bruges indeholder ingenting. Et eksempel:
print N
Dette vil ingenting udskrive. Hvis vi prøver at udføre math med tomme containere vil vi få fejl. Variabler: antal containereLad os starte med et eksempel:
x = 3
print x
I den første linje gøres bogstavet x til en variable (tal-container). Som du ser bliver værdien af den variable x sat til 3. På den anden linje bliver værdien udskrevet.Bemærk at hvis vi ønskede at udskrive et x så skulle vi have skrevet print "x"
Det var nemt, nu til et lidt sværere eksempel:
A = 2004
B = 25
C = A + B
# den næste kommando udskriver "2029"
print C
backward 30
# den næste kommando udskriver "2004 plus 25"
print A + " plus " + B
backward 30
# den næste kommando udskriver "1979"
print A - B
I de første to linjer bliver variablerne A og B sat til 2004 og 25. På den tredje linje bliver variablen C sat til A + B, som er 2029. Resten af eksemplet består af 3 print kommandoer med backward 30 imellem. backward 30 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 matematiske beregninger.Containere som indeholder tekst (strenge)I programkode indledes og afsluttes almindelig tekst med citationstegn. Som vi allerede har set:
skriv "Hej, programmør!"
Den almindelige tekst afgrænses af citationstegn. Denne almindelige tekst kalder vi en streng.Strenge kan også opbevares i containere ligesom talStrenge er meget ligesom variabler. Den største forskel er at de indeholder tekst i stedet for tal. Derfor kan strenge ikke bruges i matematiske beregninger og spørgsmål. Et eksempel på brugen af strenge:
x = "Goddag "
name = inputwindow "indtast venligst dit navn..."
print x + name + ", hvordan går det?"
I den første linje sættes strengen x til Goddag. I den anden linje sættes strengen name til uddata fra inputwindow kommandoen. På den tredje linje udskriver programmet en komposition af tre strenge på kanvassen.Dette program beder dig om at indtaste dit navn. Når du for eksempel indtaster navnet Jesper, udskriver programmet Goddag Jesper, hvordan går det?. Bemærk venligst at plusset (+) er det eneste matematiske symbol du kan bruge med strenge.Kan skildpadden lave matematik?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:
a = 20 - 5
b = 15 * 2
c = 30 / 30
d = 1 + 1
print "a: "+a+", b: "+b+", c: "+c+", d: "+d
Ved du hvilken værdi a, b, c og d har? Bemærk venligst brugen af tilknytningssymbolet =.Hvis du blot ønsker at en simpel beregning skal udføres kan du gøre noget i retning af dette: print 2004-12
Nu et eksempel med parenteser:
print ( ( 20 - 5 ) * 2 / 30 ) + 1
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).Stille spørgsmål, få svar...if og while er udførselskontroller som vi vil diskutere i næste afsnit. I dette afsnit bruger vi if-kommandoen til at forklare spørgsmål.SpørgsmålEt simpelt eksempel på et spørgsmål:
x = 6
if x > 5 [
print hello
]
I dette eksempel er spørgsmålet x > 5, 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 udførselskontroller, såsom if. Alle tal og variabler (tal-containere) kan sammenlignes med hianden med spørgsmål.Her er alle mulige spørgsmål:
Typer af spørgsmåla == ber lig medsvaret er sand hvis a er lig med ba != bikke lig medsvaret er sand hvis a ikke er lig med ba > bstørre endsvaret er sand hvis a er større end ba < bmindre endsvaret er sand hvis a er mindre end ba >= bstørre end eller lig medsvaret er sand hvis a er større end eller lig med ba <= bmindre end eller lig medsvaret er sand hvis a er mindre end eller lig med b
Spørgsmål er fremhævede med lyseblåt i kodeditoren.SpørgsmålsklisterSpørgsmålenes tdelisterord kan få nogle spørgsmål til at blive til et stort spørgsmål.
a = 1
b = 5
if a < 5 and b == 5 [
print goddag
]
I dette eksempel bliver tdelister-ordet and brugt til at klistre 2 spørgsmål (a < 5, b == 5) sammen. Hvis en side af and vil svare 'falsk' så vil hele spørgsmålet svare 'falsk', fordimed tdelister-ordet and skal begge sider være 'sand' for at svare 'sand'. Glem endelig ikke parenteser rundt om spørgsmålene!Her er en skematisk oversigt, en mere detaljeret forklaring følger nedenfor:
Spørgsmål tdelister-ordandBegge sider skal være 'sande' for at svaret er 'sand'orHvis en af siderne er 'sand' så er svaret 'sand'notSpecialtilfælde: virker kun for et spørgsmål. Ændrer 'sand' til 'falsk' og 'falsk' til 'sand'.
Klisterord i spørgsmål er fremhævede med violet i kodeditoren.andNår to spørgsmål klistres sammen med og skal begge sider af og være 'sande' for at resultatet skal være 'sandt'. Et eksempel:
a = 1
b = 5
if ((a < 10) and (b == 5)) and (a < b) [
print "Hej"
]
I dette eksempel ser du et spørgsmål klistret sammen med et andet spørgsmål.orHvis et af de to spørgsmål som klistres sammen med eller er 'sandt' er resultatet 'sandt'. Et eksempel:
a = 1
b = 5
if ((a < 10) or (b == 10)) or (a == 0) [
print "Hej"
]
I dette eksempel ser du et spørgsmål klistret sammen med et andet spørgsmål.notnot er et specielt tdelisterord i spørgsmål eftersom det kun virker med et spørgsmål af gangen. not ændrer 'sand' til 'falsk' og 'falsk' til 'sand'. Et eksempel:
a = 1
b = 5
if not ((a < 10) and (b == 5)) [
print "Goddag"
]
else
[
print "Farvel"
]
I dette eksempel er det sammenklistrede spørgsmål 'sandt', men not ændrer det til 'falsk'. Altså skrives "Farvel" ud på kanvassen.UdførselskontrolUdførselskontrol gør dig i stand til — som navnet antyder — at kontrollere udførslen.Kommandoer til at styre kørslen fremhæves med mørkegrønt og fed type. Kantede parenteser bruges som oftest sammen med kommandoer til at styre kørslen, og de er fremhævet med lysegrønt.Lad skildpadden venteHvis 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.waitwait Xwait lader skildpadden vente i X sekunder.
repeat 36 [
forward 5
turnright 10
wait 0.5
]
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.Udfør "if"ifif spørgsmål [ ... ]
Koden der er placeret på ... vil kun blive udført hvis altså if svaret på spørgsmålet er sand. Læs venligst mere om spørgsmål i spørgsmålsafsnittet.
x = 6
if x > 5 [
print "x er større end fem!"
]
På første linje sættes x til 6. På den anden linje stilles spørgsmålet x > 5. Da svaret på dette spørgsmål er sand vil udførselskontrollen if tillade koden mellem parenteserne at blive udført"while"-løkkenwhilewhile spørgsmål [ ... ]
Udførselskontrollen while er meget lige som if. Forskellen er at while bliver ved med at gentage (gå i løkke) koden mellem parenteserne indtil svaret på spørgsmålet er falsk.
x = 1
while x < 5 [
forward 10
wait 1
x = x + 1
]
På den første linje sættes x til 1. På den anden linje stilles spørgsmålet x < 5. Da svaret på dette spørgsmål er sand starter udførselskontrollen while udførslen af koden mellem parenteserne indtil svaret på spørgsmålet er falsk. I dette tilfælde vil koden mellem parenteserne blive udført 4 gange, fordi hver gang den femte linje udføres bliver x en større.Hvis ikke, så med andre ord ellers: "else"elseif spørgsmål [ ... ] else [ ... ]else kan yderligere bruges i udførselskontrollen if. Koden mllem parenteserne efter else udføres kun hvis svaret på spørgsmålet der stilles er falsk.
reset
x = 4
if x > 5 [
print "x er større end fem!"
]
else
[
print "x er mindre end seks!"
]
Der spørges om x er større end 5. Idet x er sat til 4 på den første linje er svaret på spørgsmålet falsk. Dette betyder at koden mellem parenteserne efter else bliver udført."for" løkken, en tælleløkkeforfor startpunkt til slutpunkt [ ... ]for løkken er en tælleløkke, den tæller for dig.
for x = 1 to 10 [
print x * 7
forward 15
]
Hver gang koden mellem parenteserne udføres bliver x et tal større, indtil x når tallet 10. Koden mellem parenteserne udskriver x ganget med 7. Efter dette program er færdigt vil du se syv-tabellen på kanvassen.Lav dine egne kommandoer med learnlearn er en meget speciel kommando, fordi den bruges til at lave dine egne kommandoer. Kommandoen du laver kan tage inddata og give uddata tilbage. Lad os kigge på hvordan en ny kommando laves.
learn circle x [
repeat 36 [
forward x
turnleft 10
]
]
Den nye kommando hedder circle. circle tager en inddata, et tal, til at sætte cirklens størrelse. circle giver ingen uddata. circle kommandoen kan nu bruges ligesom en normal kommando i resten af koden. Se dette eksempel: learn circle X [
repeat 36 [
forward X
turnleft 10
]
]
go 30,30
circle 20
go 40,40
circle 50
I det næste eksempel vil en kommando med en returværdi blive lavet.
reset
learn multiplyBySelf n [
r = n * 1
r = n * n
return r
]
i = inputwindow "Indtast venligst et tal og tryk på o.k."
print i + " ganget med sig selv er: " + multiplyBySelf i
I dette eksempel laves en ny kommando der hedder multiplyBySelf. Inddata for denne kommando bliver ganget med sig selv og derefter returneret, ved brug af return kommandoen. return kommandoen er måden at få uddata fra en hjemmelavet funktion.