List.java. List.java. Printed by Tom Smedsaas

Relevanta dokument
List.java. List.java. Printed by Tom Smedsaas

Obligatorisk uppgift 5

Obligatorisk uppgift 5: Symbolisk kalkylator

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

public boolean containskey(string key) { return search(key, head)!= null; }

Obligatorisk uppgift 5: Symbolisk kalkylator

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

Obligatorisk uppgift: Symbolisk kalkylator

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Observera. Tentamen Programmeringsteknik II Skrivtid:

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Tentamen Programmeringsteknik 2 och MN Skrivtid: Inga hjälpmedel.

Tentamen Imperativ och objektorienterad programmering

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

Lösningar till Tentamen i Programmeringsteknik II och MN

Obligatorisk uppgift: Numerisk kalkylator

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

Obligatorisk uppgift: Numerisk kalkylator

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren att du har förstått dessa även om detaljer kan vara felaktiga.

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Föreläsning 3. Stack

Att skriva till och läsa från terminalfönstret

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

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

//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.

Objektorienterad programmering i Java

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 3. Stack

Inlämningsuppgift MiniPlotter

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

F3: Recursive descent, tokenisering, avbildningar och undantag. Carl Nettelblad

Språkkonventioner och redigering av tal.

Grafik, grafiska användargränssnitt och rörliga bilder

Fördjupad Java. Undantagshantering. Fel

Föreläsning 3: Booleans, if, switch

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

F4. programmeringsteknik och Matlab

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Föreläsning 3-4 Innehåll

Del A (obligatorisk för alla)

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Felhantering. Andra brott mot språkets regler. Man kan också i programmet bryta mot ett antal olika regler som gäller. Exempelvis:

Länkade strukturer, parametriserade typer och undantag

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson

BST implementering, huvudstruktur

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

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Obligatorisk uppgift: Numerisk kalkylator

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

LÖSNINGSFÖRSLAG TILL TENTAMEN PROGRAMMERINGSMETODIK MOM2 - JAVA, 4P.

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

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

TENTAMEN OOP

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

DAT043 Objektorienterad Programmering

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Lösningar för tenta 2 DAT043,

SMD 134 Objektorienterad programmering

TDDC77 Objektorienterad Programmering

Kap J 7-1 Mer om arv. (superklass) (subklass)

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

if (n==null) { return null; } else { return new Node(n.data, copy(n.next));

Konstruktion av klasser med klasser

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Recitation 4. 2-D arrays. Exceptions

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

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

TDDD78 Viktiga begrepp, del 2

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

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

1 Programmering i Java. Program element - Introduktion. Exempel. Exempel. Kapitel 3:

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen Programmering fortsättningskurs DIT950

Föreläsning 9 Innehåll

Repetition C-programmering

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Föreläsning 7. Träd och binära sökträd

Föreläsning Innehåll. Hantera många element. Exempel: polygon Godtyckligt antal element. Exempel: polygon forts

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

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

Transkript:

Mar 03, 08 17:48 Page 1/3 class List * Representerar en länkad lista av godtyckliga objekt public class List { ListNode * Noder i listor protected static class ListNode { protected Object data; protected ListNode next; ListNode(Object d, ListNode n) { data = d; next = n; return data.tostring(); List.java ListException * Undantagsklass för List //... Uppgift 2a protected ListNode head; // Första noden i listan head add(); * Lägger in ett nytt objekt först i listan public void add(object o) { //... Uppgift 2b length() * Beräknar längden av listan public int length() { return length(head); protected static int length(listnode l) { //... Uppgift 2c och 2d List.java Mar 03, 08 17:48 Page 2/3 tostring() * Skapar en textrepresentation av listan genom att * använda de lagrade objektens tostring metoder. String res = ""; for (ListNode l = head; l!=null; l=l.next) { res = res + l.tostring(); if (l.next!=null) res = res + " "; return "[" + res + "]"; get() * Tar bort det första elementet ur listan och returnerar * dess värde. * @throws ListException Om listan är tom public Object get() { //... Uppgift 2e contains() * Testar (med equals) om ett objekt finns i listan public boolean contains(object o) { //... behöver ej implementeras remove() * Tar bort första förekomst av ett objekt (definierat av * equals) ur listan. public void remove(object o) { //... behöver ej skrivas removeall() * Tar bort alla förekomster av ett objekt (definierat av * equals) ur listan. Gör ingenting om objektet inte finns public void removeall(object o) { head = removeall(o, head); protected static ListNode removeall(object o, ListNode l) { //... Uppgift 2f Wednesday March 12, 2008 List.java 1/6

Mar 03, 08 17:48 Page 3/3 main() * Metoden skapar några listor och testar klassens metoder public static void main(string [] args) { List l = new List(); for (int i=1; i<=10; i++) l.add(new Integer(i%3)); System.out.println("Listan : " + l); l.remove(new Integer(1)); System.out.println("Utan första 1 an: " + l); l.removeall(new Integer(1)); System.out.println("Utan alla 1 or : " + l); l.removeall(new Integer(42)); try { l.remove(new Integer(42)); catch (ListException e) { System.out.println("*** Fel: " + e.getmessage()); /* Resultat av testkörning Listan : [1 0 2 1 0 2 1 0 2 1] Utan första 1 an: [0 2 1 0 2 1 0 2 1] Utan alla 1 or : [0 2 0 2 0 2] *** Fel: Remove: 42 not in list List.java Set.java Mar 04, 08 9:41 Page 1/1 class Set * Representerar en mängd av godtyckliga objekt. * I en mängd skall inga dubletter finnas (antingen är * ett element med eller så är det inte med) public class Set extends List { * Lägger in ett nytt objekt i mängden. public void add(object o) { //... Uppgift 3a intersection() * Skapar en ny mängd som bestående av alla element som * finns både i den egna mängden och i mängden s public Set intersection(set s) { Set ns = new Set(); ns.head = intersection(head, s.head); return ns; protected ListNode intersection(listnode x, ListNode y) { if (x==null y==null) { return null; if (contains(x.data, y)) { //... Uppgift 3b { //... Uppgift 3b main() * Testmetod public static void main(string [] args) { Set s = new Set(); Set t = new Set(); s.add(new Integer(1)); s.add(new Integer(2)); s.add(new Integer(3)); s.add(new Integer(4)); s.add(new Integer(1)); // Skall ej ändra mängden // eftersom 1 redan finns t.add(new Integer(2)); t.add(new Integer(4)); t.add(new Integer(6)); t.add(new Integer(7)); System.out.println("s : " + s); System.out.println("t : " + t); System.out.println("snittet: " + s.intersection(t)); /* Output: s : [4 3 2 1] t : [7 6 4 2] snittet: [4 2] Wednesday March 12, 2008 List.java, Set.java 2/6

Mar 04, 08 9:33 Page 1/8 class Parser * Parser för artitmetiska uttryck med addition (dvs a+b), * subtraktion (dvs a b), multiplikation (dvs a*b), * division (dvs a/b), negering (dvs a), * exponentiering eller upphöjt till dvs (a^b) * samt absolutbelopp (dvs a ). * Operatorerna har sina vanliga prioriteter och * parenteser kan användas på vanligt sätt för * att ändra evalueringsordning. * Parsern skapar en intern trädrepresentation * av uttrycken. public class Parser { private static final InputStreamReader isr= new InputStreamReader(System.in); private static final BufferedReader br= new BufferedReader(isr); private static final StreamTokenizer st= new StreamTokenizer(br); statement() * Hanterar en enskild sats public static Sexpr statement() Sexpr res = assignment(); if ( st.nexttoken()!=st.tt_eol ) throw new SyntaxError("Expected EOL "); return res; assignment() * Hanterar en eller flera tilldelningar på formen * <uttryck> = <variabel> = <variabel>... public static Sexpr assignment() throws IOException{ Sexpr res = expression(); while (st.nexttoken()== = ) { if (st.nexttoken()!=st.tt_word) throw new SyntaxError("Identifier expected"); res = new Assignment(res, new Variable(st.sval)); return res; expression() * Hanterar ett uttryck som en följd av termer * med + eller emellan. public static boolean isexproper(int c){ return c== + c== ; public static Sexpr expression() Sexpr sum = term(); Mar 04, 08 9:33 Page 2/8 while (isexproper(st.nexttoken())) if (st.ttype== + ) sum = new Addition(sum, term()); sum = new Subtraction(sum, term()); return sum; term() * Hanterar en term som en följd av faktorer * åtskilda av * eller / public static boolean istermoper(int c){ return c== * c== / ; public static Sexpr term() throws IOException{ Sexpr prod=factor(); while (istermoper(st.nexttoken())) if (st.ttype== * ) prod = new Multiplication(prod, factor()); prod = new Division(prod,factor()); return prod; factor() * Hanterar en factor bestående av en följd av * primärer åtskilda med upphöjningsoperatorn ^ public static Sexpr factor() throws IOException{ //... prim() * Hanterar en primär som antingen är tal, * en variabel, en unär operator ( eller ~) * följt av en primär, en tilldelning omgiven av * parenteser. public static Sexpr prim() st.nexttoken(); if (st.ttype== ( ) { Sexpr val = assignment(); if ( st.nexttoken()!= ) ) throw new SyntaxError("Expected ) "); return val; if (st.ttype== ) { return new Uminus(prim()); if (st.ttype==st.tt_number) { return new Constant(st.nval); if (st.ttype==st.tt_word) { return new Variable(st.sval); throw new SyntaxError("I m lost..."); Printed by Tom Smedsaas Wednesday March 12, 2008 3/6

Mar 04, 08 9:33 Page 3/8 main() * main metod för kalkylatorn public static void main(string [] args) st.ordinarychar( ); st.ordinarychar( / ); st.eolissignificant(true); Map<String,Double> h = new HashMap<String,Double>(); System.out.println("Welcome! End with \"q\""); while (true) try { System.out.print("? "); st.nexttoken(); if (st.ttype==st.tt_word && st.sval.equals("q")) break; Sexpr e = statement(); System.out.print(e + " \t : "); System.out.println(e.eval(h)); catch (SyntaxError e) { System.out.println( "*** " + e.getmessage() ); System.out.println( "at " + st); while (st.ttype!=st.tt_eol) st.nexttoken(); catch (EvalError e) { System.out.println( "*** " + e.getmessage()); System.out.println("Bye!"); SyntaxError * Undantagsklass för syntaxfel public class SyntaxError extends RuntimeException { public SyntaxError(String msg) { super(msg); AbsoluteValue * Representerar absolutbeloppsoperationen a //... Addition * Representerar additionsoperationen x+y public class Addition extends Binary { public Addition(Sexpr x, Sexpr y) { Mar 04, 08 9:33 Page 4/8 return 10; return "+"; return left.eval(h) + right.eval(h); Assignement * Representerar en tilldelningsoperation public class Assignment extends Binary { public Assignment(Sexpr x, Sexpr y) { return 5; return "="; double val = left.eval(h); h.put(right.tostring(), val); return val; Atom * Basklass för konstanter och variabler public abstract class Atom extends Sexpr { return tostring(); Binary * Basklass för alla binära operatorer public abstract class Binary extends Sexpr { protected Sexpr left, right; public Binary(Sexpr l, Sexpr r) { left = l; right = r; Wednesday March 12, 2008 4/6

Mar 04, 08 9:33 Page 5/8 String result; if ( left.priority()<priority() ) result = "(" + left + ")"; result = left.tostring(); if ( right.priority()<=priority() ) result = result + getname() + "(" + right + ")"; result = result + getname() + right; return result; Constant * Representerar en konstant public class Constant extends Atom { protected double value; public Constant(double v) { value = v; return "" + value; return value; Division * Representerar en divisionsoperation public class Division extends Binary { public Division(Sexpr x, Sexpr y) { return 20; return "/"; double r = right.eval(h); if (r==0) throw new EvalError("Division med noll"); return left.eval(h)/r; EvalErrror * Undantagsklass för evalueringsfel public class EvalError extends RuntimeException { public EvalError(String msg) { super(msg); Exponentiation * Representerar upphöjt operationen x^y //... Multiplication * Representerar multiplikationsoperationen x*y public class Multiplication extends Binary { Mar 04, 08 9:33 Page 6/8 public Multiplication(Sexpr x, Sexpr y) { return 20; return "*"; return left.eval(h)*right.eval(h); Sexpr * Basklass för alla trädnoder public abstract class Sexpr { * Prioriteten 100 är den högsta av alla. * Ett träd med denna prioritet behöver aldrig * omges av parenteser. return 100; * Beräknar värdet av trädet med denna nod som rot public abstract double eval(map<string, Double> h); * Returnerar nodens namn public abstract String getname(); Printed by Tom Smedsaas Wednesday March 12, 2008 5/6

Mar 04, 08 9:33 Page 7/8 Subtraction * Representerar subtraktionsoperationen x y public class Subtraction extends Binary { public Subtraction(Sexpr x, Sexpr y) { return 10; return " "; Mar 04, 08 9:33 Page 8/8... Variabel * Representerar en variabel public class Variable extends Atom { protected String ident; public Variable(String id) { ident = id; return ident; return left.eval(h) right.eval(h); Uminus * Representerar unärt minus ( a) public class Uminus extends Unary { public Uminus(Sexpr a) { super(a); return " ";... return argument.eval(h); Unary * Basklass för alla operatorer och * funktioner med ett argument public abstract class Unary extends Sexpr { protected Sexpr argument; public Unary(Sexpr a) { argument = a; return 90; Wednesday March 12, 2008 6/6