Programmering. hh.se/db2004. SuperKarel, Nedbrytning & Styrsatser. Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering

Relevanta dokument
Att utvidga klasser. Programmering. Att utvidga klasser. Förvirring. hh.se/db2004

Administrivia. hh.se/db Verónica Gaspes (Kursansvarig) 2 Mattias Enervall (Övningsassistent) Examination. 1 Skriftlig tentamen (betyg)

Administrivia. hh.se/db Verónica Gaspes (Kursansvarig) 2 Daniel Petersson (Labassistent) Examination. 1 Skriftlig tentamen (betyg)

Roboten Karel lär sig Java

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Funktioner. Programmering. Egendefinierade funktioner i Java. En Java-funktions anatomi. hh.se/db2004. Statiska metoder. Funktioner. resultatvärde.

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

Mer om metoder och abstraktioner

Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim Agenda (halvdag)

Omdirigering. Omdirigering

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

tentaplugg.nu av studenter för studenter

Programmering = modellering

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

OOP Objekt-orienterad programmering

Principles of subclasses. Objekt-orienterad programmering och design Alex Gerdes, 2018

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs Verónica Gaspes. IDE-sektionen.

Java-syntax (arv) Exempel: public class Crow extends Bird {... } Jämför med Lab 1: public class FirstApp extends Frame {... }

TENTAMEN OOP

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

tentaplugg.nu av studenter för studenter

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Laboration 1 - Grunderna för OOP i Java

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Objektorienterad programmering

Laboration 2. returnerar true om det är omöjligt för roboten att göra move() utan att. exekveringsfel erhålls, annars returnera false.

Lösningsförslag till exempeltenta 2

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

PROGRAMMERING ÅK 9 INTRODUKTION

Laboration A Objektsamlingar

Modern Programmering (2546) Tentamen lördag

Föreläsning 15: Repetition DVGA02

Exempel: Exempel: Exempel: Exempel: $djur=array("ko","katt","älg"); foreach ($djur as $d) { echo $d. " "; } Resultat. ko katt älg

Input. Programmering. Andra källor

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram?

JUnit. Ska kompletteras med kodexempel på JUnit. DD2385 Programutvecklingsteknik Några bilder till föreläsning 12 21/5 2012

Lösningar till tentamen i EDAF25

Laboration 13, Arrayer och objekt

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Principles of subclasses Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Lösningar till tentamen i EDAF25

Separation of Concern. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Redovisning av inlämningsuppgifter

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Klasshierarkier - repetition

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Tentamen i Objektorienterad programmering

Föreläsning 2. Länkad lista och iterator

Föreläsning 13 Innehåll

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

TENTAMEN OOP

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Konstruktion av klasser med klasser

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

TENTAMEN OOP

Klassdeklaration. Metoddeklaration. Parameteröverföring

Föreläsning REPETITION & EXTENTA

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Programmering i C, 7,5 hp

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

Lösningsförslag till exempeltenta 1

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Fördjupad Java. Undantagshantering. Fel

Tentamen OOP

Föreläsning 8 Programmeringsteknik och Matlab DD1312. Klassmetod. Egen modul

JAVAUTVECKLING LEKTION 4

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Användarhandledning Version 1.2

LÖSNINGSFÖRSLAG TENTAMEN

Objekt-orienterad programmering. Klassbegreppet och C++ UML. UMLs fördelar

Dugga i Grundläggande programmering STS, åk

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 3

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Lite logik. Kap 6: Sid 2

F4. programmeringsteknik och Matlab

OOP Objekt-orienterad programmering

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Tentamen i Grundläggande programmering STS, åk 1 lördag

Transkript:

Programmering hh.se/db2004 Föreläsning 2: SuperKarel, Nedbrytning & Styrsatser Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Center for Research on Embedded Systems IDE-sektionen

Att utvidga klasser Man definierar en ny klass public class BeeperPickingKarel extends Karel { klassdefinitionens kropp Vad är det man säger? Här säger klassheadern att BeeperPickingKarel är en utvidgning av standardklassen Karel som importeras från stanford.karel-biblioteket.

Att utvidga klasser Man definierar en ny klass public class BeeperPickingKarel extends Karel { klassdefinitionens kropp Vad är det man menar? Den nya klassen (här BeeperPickingKarel) bygger på allt som den befintliga klassen (här Karel) erbjuder.

Förvirring När en klass definieras med utvidgning kallas den nya klassen för en subklass av moderklassen. I vårt exempel, är BeeperPickingKarel en subklass av Karel. På motsvarande sätt kallas Karel för en superklass till BeeperPickingKarel. En subklass utvidgar sin superklass och kan då lägga till ny funktionalitet till den

Förvirring När en klass definieras med utvidgning kallas den nya klassen för en subklass av moderklassen. I vårt exempel, är BeeperPickingKarel en subklass av Karel. På motsvarande sätt kallas Karel för en superklass till BeeperPickingKarel. En subklass utvidgar sin superklass och kan då lägga till ny funktionalitet till den

Nya metoder Nya beteenden hos objekt introduceras genom att definiera nya metoder Exempel public class SomeTaskKarel extends Karel{ public void run(){ /* Uppdraget! */ private void turnright(){ turnleft();turnleft();turnleft(); private void turnaround(){ turnleft();turnleft();

En förbättrad Karel Metoderna är användbara! Vi vill att många klasser skall kunna använda turnright() och turnaround(). Vi skulle vilja lägga till de i Karel! Men! Vi har inte tillgång till klassen Karel! Lösning! Även om vi hade det, vi bör inte ändra i den efterssom det är många andra som använder Karel och vi kan då förstöra deras program! Definiera en ny klass som erbjuder dessa metoder och som alla andra klasser kan ärva från!

En förbättrad Karel Metoderna är användbara! Vi vill att många klasser skall kunna använda turnright() och turnaround(). Vi skulle vilja lägga till de i Karel! Men! Vi har inte tillgång till klassen Karel! Lösning! Även om vi hade det, vi bör inte ändra i den efterssom det är många andra som använder Karel och vi kan då förstöra deras program! Definiera en ny klass som erbjuder dessa metoder och som alla andra klasser kan ärva från!

En förbättrad Karel Metoderna är användbara! Vi vill att många klasser skall kunna använda turnright() och turnaround(). Vi skulle vilja lägga till de i Karel! Men! Vi har inte tillgång till klassen Karel! Lösning! Även om vi hade det, vi bör inte ändra i den efterssom det är många andra som använder Karel och vi kan då förstöra deras program! Definiera en ny klass som erbjuder dessa metoder och som alla andra klasser kan ärva från!

En förbättrad Karel Metoderna är användbara! Vi vill att många klasser skall kunna använda turnright() och turnaround(). Vi skulle vilja lägga till de i Karel! Men! Vi har inte tillgång till klassen Karel! Lösning! Även om vi hade det, vi bör inte ändra i den efterssom det är många andra som använder Karel och vi kan då förstöra deras program! Definiera en ny klass som erbjuder dessa metoder och som alla andra klasser kan ärva från!

En förbättrad Karel Metoderna är användbara! Vi vill att många klasser skall kunna använda turnright() och turnaround(). Vi skulle vilja lägga till de i Karel! Men! Vi har inte tillgång till klassen Karel! Lösning! Även om vi hade det, vi bör inte ändra i den efterssom det är många andra som använder Karel och vi kan då förstöra deras program! Definiera en ny klass som erbjuder dessa metoder och som alla andra klasser kan ärva från!

En förbättrad Karel /* * The NewImprovedKarel class extends the basic Karel * class so that any subclasses have access to the * turnright and turnaround methods. It does not define * any run method of its own. */ import stanford.karel.*; public class NewImprovedKarel extends Karel { public void turnright() { turnleft();turnleft();turnleft(); public void turnaround() {turnleft();turnleft();

SuperKarel stanford.karel Paketet innehåller redan en klass SuperKarel som erbjuder detta och lite till! Så i fortsättningen kommer vi att utvidga SuperKarel i våra program. Förvirring Karel är en superklass av SuperKarel!

SuperKarel stanford.karel Paketet innehåller redan en klass SuperKarel som erbjuder detta och lite till! Så i fortsättningen kommer vi att utvidga SuperKarel i våra program. Förvirring Karel är en superklass av SuperKarel!

Mera exempel Karel lagar en väg Hur kan man tänka? Till exempel: 1 Flytta till gropen. 2 Fyll gropen genom att lämna en beeper där. 3 Flytta till nästa korsningen. Som programfragment public void run() { move(); fillpothole(); move();

Mera exempel Karel lagar en väg Hur kan man tänka? Till exempel: 1 Flytta till gropen. 2 Fyll gropen genom att lämna en beeper där. 3 Flytta till nästa korsningen. Som programfragment public void run() { move(); fillpothole(); move();

Mera exempel Karel lagar en väg Hur kan man tänka? Till exempel: 1 Flytta till gropen. 2 Fyll gropen genom att lämna en beeper där. 3 Flytta till nästa korsningen. Som programfragment public void run() { move(); fillpothole(); move();

Mera exempel Karel lagar en väg Hur kan man tänka? Till exempel: 1 Flytta till gropen. 2 Fyll gropen genom att lämna en beeper där. 3 Flytta till nästa korsningen. Som programfragment public void run() { move(); fillpothole(); move();

Mera exempel Karel lagar en väg Hur kan man tänka? Till exempel: 1 Flytta till gropen. 2 Fyll gropen genom att lämna en beeper där. 3 Flytta till nästa korsningen. Som programfragment public void run() { move(); fillpothole(); move();

Mera exempel Karel lagar en väg Eller: 1 Klättra ner från hyllan. 2 Lämna en beeper. 3 Klättra upp till hyllan. Som programfragment public void run() { climbdown(); putbeeper(); climbup();

Mera exempel Karel lagar en väg Eller: 1 Klättra ner från hyllan. 2 Lämna en beeper. 3 Klättra upp till hyllan. Som programfragment public void run() { climbdown(); putbeeper(); climbup();

Mera exempel Karel lagar en väg Eller: 1 Klättra ner från hyllan. 2 Lämna en beeper. 3 Klättra upp till hyllan. Som programfragment public void run() { climbdown(); putbeeper(); climbup();

Mera exempel Karel lagar en väg Eller: 1 Klättra ner från hyllan. 2 Lämna en beeper. 3 Klättra upp till hyllan. Som programfragment public void run() { climbdown(); putbeeper(); climbup();

Mera exempel Karel lagar en väg Eller: 1 Klättra ner från hyllan. 2 Lämna en beeper. 3 Klättra upp till hyllan. Som programfragment public void run() { climbdown(); putbeeper(); climbup();

Nedbrytning Vi säger att vi bryter ner problemet i mindre problem som kan också brytas ner till enklare problem... tills vi kommer till problem som kan lösas med enkla kommandon. Det brukar kallas för stepwise refinment (stegviss förfining). I nästa steg definierar man de metoder som inte är baskommandon. Vad skall man tänka på? Varje delproblem bör utföra en begreppsmässig enkel uppgift. Ett gott tecken på om Du har lyckats med att hitta en rimlig uppgift kommer från det namn Du ger din metod. Varje delproblem bör utföra en uppgift som är så allmän som möjligt så att den kan användas i flera sammanhang.

Nedbrytning Vi säger att vi bryter ner problemet i mindre problem som kan också brytas ner till enklare problem... tills vi kommer till problem som kan lösas med enkla kommandon. Det brukar kallas för stepwise refinment (stegviss förfining). I nästa steg definierar man de metoder som inte är baskommandon. Vad skall man tänka på? Varje delproblem bör utföra en begreppsmässig enkel uppgift. Ett gott tecken på om Du har lyckats med att hitta en rimlig uppgift kommer från det namn Du ger din metod. Varje delproblem bör utföra en uppgift som är så allmän som möjligt så att den kan användas i flera sammanhang.

Nedbrytning Vi säger att vi bryter ner problemet i mindre problem som kan också brytas ner till enklare problem... tills vi kommer till problem som kan lösas med enkla kommandon. Det brukar kallas för stepwise refinment (stegviss förfining). I nästa steg definierar man de metoder som inte är baskommandon. Vad skall man tänka på? Varje delproblem bör utföra en begreppsmässig enkel uppgift. Ett gott tecken på om Du har lyckats med att hitta en rimlig uppgift kommer från det namn Du ger din metod. Varje delproblem bör utföra en uppgift som är så allmän som möjligt så att den kan användas i flera sammanhang.

Nedbrytning Vi säger att vi bryter ner problemet i mindre problem som kan också brytas ner till enklare problem... tills vi kommer till problem som kan lösas med enkla kommandon. Det brukar kallas för stepwise refinment (stegviss förfining). I nästa steg definierar man de metoder som inte är baskommandon. Vad skall man tänka på? Varje delproblem bör utföra en begreppsmässig enkel uppgift. Ett gott tecken på om Du har lyckats med att hitta en rimlig uppgift kommer från det namn Du ger din metod. Varje delproblem bör utföra en uppgift som är så allmän som möjligt så att den kan användas i flera sammanhang.

Nedbrytning Vi säger att vi bryter ner problemet i mindre problem som kan också brytas ner till enklare problem... tills vi kommer till problem som kan lösas med enkla kommandon. Det brukar kallas för stepwise refinment (stegviss förfining). I nästa steg definierar man de metoder som inte är baskommandon. Vad skall man tänka på? Varje delproblem bör utföra en begreppsmässig enkel uppgift. Ett gott tecken på om Du har lyckats med att hitta en rimlig uppgift kommer från det namn Du ger din metod. Varje delproblem bör utföra en uppgift som är så allmän som möjligt så att den kan användas i flera sammanhang.

Nya delar av Karel-språket Upprepningar Man kan vilja instruera Karel att göra samma sak ett antal gånger. turnright for-loop turnleft(); turnleft(); turnleft(); by Andy Wahrol for(int i = 0; i < 3 ; i++){ turnleft();

Nya delar av Karel-språket Upprepningar Man kan vilja instruera Karel att göra samma sak ett antal gånger. turnright for-loop turnleft(); turnleft(); turnleft(); by Andy Wahrol for(int i = 0; i < 3 ; i++){ turnleft();

Nya delar av Karel-språket Upprepningar Man kan vilja instruera Karel att göra samma sak ett antal gånger. turnright for-loop turnleft(); turnleft(); turnleft(); by Andy Wahrol for(int i = 0; i < 3 ; i++){ turnleft();

Nya delar av Karel-språket Upprepningar Man kan vilja instruera Karel att göra samma sak medan ett villkor gäller gettonextwall move();move();... så längre det inte finns några murar while-loop while ( frontisclear() ){ move();

Nya delar av Karel-språket Upprepningar Man kan vilja instruera Karel att göra samma sak medan ett villkor gäller gettonextwall move();move();... så längre det inte finns några murar while-loop while ( frontisclear() ){ move();

Nya delar av Karel-språket Upprepningar Man kan vilja instruera Karel att göra samma sak medan ett villkor gäller gettonextwall move();move();... så längre det inte finns några murar while-loop while ( frontisclear() ){ move();

Vilka villkor kan Karel testa? Karel kan känna av omgivningen Mer generella program Karel går runt ett varv i en värld av godtycklig storlek!

Vilka villkor kan Karel testa? Karel kan känna av omgivningen Mer generella program Karel går runt ett varv i en värld av godtycklig storlek!

Algoritmer och kodning Karel skall dubblera antalet beepers i en hög Karel finns intill en hög med beepers och skall dubblera antalet beepers i högen. Karel har gränslös med beepers i säcken. Algoritmen Karel kan inte räkna! Men han skulle kunna lägga ner 2 beepers för varje beeper han plockar. Han kommer att behöva bygga en extra hög och flytta den. Kodfragment private void doublebeepersinpile(){ while(beeperspresent()){ put2beepersnextdoor(); movebackpilenextdoor();

Algoritmer och kodning Karel skall dubblera antalet beepers i en hög Karel finns intill en hög med beepers och skall dubblera antalet beepers i högen. Karel har gränslös med beepers i säcken. Algoritmen Karel kan inte räkna! Men han skulle kunna lägga ner 2 beepers för varje beeper han plockar. Han kommer att behöva bygga en extra hög och flytta den. Kodfragment private void doublebeepersinpile(){ while(beeperspresent()){ put2beepersnextdoor(); movebackpilenextdoor();

Algoritmer och kodning Karel skall dubblera antalet beepers i en hög Karel finns intill en hög med beepers och skall dubblera antalet beepers i högen. Karel har gränslös med beepers i säcken. Algoritmen Karel kan inte räkna! Men han skulle kunna lägga ner 2 beepers för varje beeper han plockar. Han kommer att behöva bygga en extra hög och flytta den. Kodfragment private void doublebeepersinpile(){ while(beeperspresent()){ put2beepersnextdoor(); movebackpilenextdoor();

Mera kodfragment private void put2beepersnextdoor(){ pickbeeper(); move(); putbeeper(); putbeeper(); moveback(); Om koden För klasser och metoder och styrsatser, skriver man kroppen lite indragen i texten så att man kan lätt se strukturen. Kommentarer är viktiga. Ett sätt att kommentera metod definitioner är att beskriva vad de skall åstadkomma men även pre- och post- conditions.

Mera kodfragment private void put2beepersnextdoor(){ pickbeeper(); move(); putbeeper(); putbeeper(); moveback(); Om koden För klasser och metoder och styrsatser, skriver man kroppen lite indragen i texten så att man kan lätt se strukturen. Kommentarer är viktiga. Ett sätt att kommentera metod definitioner är att beskriva vad de skall åstadkomma men även pre- och post- conditions.

Mera kodfragment private void put2beepersnextdoor(){ pickbeeper(); move(); putbeeper(); putbeeper(); moveback(); Om koden För klasser och metoder och styrsatser, skriver man kroppen lite indragen i texten så att man kan lätt se strukturen. Kommentarer är viktiga. Ett sätt att kommentera metod definitioner är att beskriva vad de skall åstadkomma men även pre- och post- conditions.

Mera kodfragment private void put2beepersnextdoor(){ pickbeeper(); move(); putbeeper(); putbeeper(); moveback(); Om koden För klasser och metoder och styrsatser, skriver man kroppen lite indragen i texten så att man kan lätt se strukturen. Kommentarer är viktiga. Ett sätt att kommentera metod definitioner är att beskriva vad de skall åstadkomma men även pre- och post- conditions.

Om koden /* * Precondition: Karel står på en korsning * där det finns minst en beeper. * * Postcondition: Karel står på samma korsning * tittar åt samma håll och det finns en beeper mindre * och det finns 2 beepers mer i korsningen intill. */ private void put2beepersnextdoor(){ pickbeeper(); move(); putbeeper(); putbeeper(); moveback();

Några vanliga fel Infinite loops I vissa tillstånd kan while(frontisclear()){ turnleft(); leda till en oändlig beteende. Det är inte så ovanlig att man skriver while-loopar som i visa situationer inte kommer närmare att villkoret skall sluta gälla!

Några vanliga fel Off-by-one-bug (OBOB) Det är inte så ovanligt heller att man glömmer speciella fall antigen i början av en loop eller i slutet. Till exempel, om Karel skall fylla alla korsningar med en beeper, så är while (frontisclear()){ putbeeper(); move(); while (frontisclear()){ putbeeper(); move(); putbeeper(); inte tillräcklig!

Några vanliga fel Off-by-one-bug (OBOB) Det är inte så ovanligt heller att man glömmer speciella fall antigen i början av en loop eller i slutet. Till exempel, om Karel skall fylla alla korsningar med en beeper, så är while (frontisclear()){ putbeeper(); move(); inte tillräcklig! while (frontisclear()){ putbeeper(); move(); putbeeper();

Några vanliga fel Off-by-one-bug (OBOB) Det är inte så ovanligt heller att man glömmer speciella fall antigen i början av en loop eller i slutet. Till exempel, om Karel skall fylla alla korsningar med en beeper, så är while (frontisclear()){ putbeeper(); move(); inte tillräcklig! while (frontisclear()){ putbeeper(); move(); putbeeper();

Ytterliggare en styrsats Man kan välja att utföra något bara om ett vilkor gäller. removebeeper pickbeeper() om det finns en beeper! if if ( beeperpresent() ) { pickbeeper();

Ytterliggare en styrsats Man kan välja att utföra något bara om ett vilkor gäller. removebeeper pickbeeper() om det finns en beeper! if if ( beeperpresent() ) { pickbeeper();

Ytterliggare en styrsats Man kan välja att utföra något bara om ett vilkor gäller. removebeeper pickbeeper() om det finns en beeper! if if ( beeperpresent() ) { pickbeeper();

Ytterliggare en styrsats Man kan även välja mellan 2 alternativa beteenden beroende på om villkoret gäller eller ej. if-else if ( beeperpresent() ) { pickbeeper(); else { putbeeper();

Ytterliggare en styrsats Man kan även välja mellan 2 alternativa beteenden beroende på om villkoret gäller eller ej. if-else if ( beeperpresent() ) { pickbeeper(); else { putbeeper();

Ytterliggare ett exempel Karel springer 100 meter häck.