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

Relevanta dokument
Obligatorisk uppgift 5

Obligatorisk uppgift 5: Symbolisk kalkylator

Obligatorisk uppgift 5: Symbolisk kalkylator

Obligatorisk uppgift: Symbolisk kalkylator

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

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

Lösningar till Tentamen i Programmeringsteknik II och MN

Obligatorisk uppgift: Numerisk kalkylator

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Obligatorisk uppgift: Numerisk kalkylator

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.

Objektorienterad programmering i Java

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

Språkkonventioner och redigering av tal.

Fördjupad Java. Undantagshantering. Fel

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

F4. programmeringsteknik och Matlab

Föreläsning 3-4 Innehåll

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

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

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

Lösningar för tenta 2 DAT043,

SMD 134 Objektorienterad programmering

TDDC77 Objektorienterad Programmering

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.

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.

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

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

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

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