Tentamen Imperativ och objektorienterad programmering

Storlek: px
Starta visningen från sidan:

Download "Tentamen Imperativ och objektorienterad programmering"

Transkript

1 Tentamen Imperativ och objektorienterad programmering Skrivtid: Inga hjälpmedel. Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer och namn på alla papper. Skriv inte längst upp i vänstra hörnet - det går inte att läsa där efter sammanhäftning. Fyll i försättssidan fullständigt. Uppgifterna kommer inte i svårighetsordning. 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. Programkod skall vara läslig dvs den skall vara vettigt strukturerad och indenterad. Namn på variabler, metoder, funktioner, klasser etc skall vara beskrivande men kan ändå hållas ganska korta. Såvida inget annat anges så får man bygga på lösningar till föregående uppgifter även om dessa inte har lösts. Det är tillåtet att införa hjälpmetoder och hjälpklasser. Uttrycket skriv en metod som skall alltså inte tolkas så att lösningen inte får struktureras med hjälp av flera metoder. Lycka till! 1

2 Uppgifter 1. Ibland kan det vara fördelaktigt att organisera linjära, länkade listor cirkulärt dvs så att sista elementet pekar till första i stället för NULL. Då kan man låta en lista representeras av en pekare till sista elementet. Detta skulle t ex med fördel kunna ha använts för radnummerlistorna i den första inlämningsuppgiften i C. Det går lätt att lägga till sist och man når ju den första enkelt från den sista t ex för utskrift (eller uttag om det är en kö). I programbilagan listfiles.c finns filer för att implementera detta. Filerna list.h och list.c innehåller det som behövs för att bygga upp och skriva ut cirkulära listor av heltal och listtest.c ett litet testprogram med körresultat. Skriv färdig funktionen listadd körexempel! så att den fungerar enligt specifikation och (3p) 2. I programbilagan treemapfiles.c finns filerna treemap.h och treemap.c som innehåller deklarationer och implementationer för en treemap med strängar som nycklar en godtycklig pekare void * som data. Trädet är organiserat som ett binärt sökträd där mindre nycklar ligger till vänster och större till höger. I programbilagan finns också filen treemaptest som innehåller ett testprogram med körresultat. a) Skriv färdigt funktionen int size(treemap tm) som beräknar och returnerar antalet noder i trädet. (3p) b) Skriv färdigt funktionen put som lagrar ett nyckel-värdepar på rätt plats i trädet i enlighet med specifikationen i koden. (3p) c) Skriv färdigt funktionen containsvalue som returnerar 1 om ett visst värde finns i trädet, annars 0. (3p) d) Det här paketet bygger på att nycklarna är textsträngar (char *). Beskriv vilka ändringar man behöver göra om man vill ha nycklar av en godtycklig typ (dvs void *). Du behöver inte skriva någon kod. (3p) 3. Skriv en main-funktion som läser ord från standard input, lagrar dem tillsammans med en radnummerlista (från uppgift 1 ovan) i ett binärt sökträd (från uppgift 2 ovan). Till din hjälp har du funktionen char *readword() som läser nästa ord från standard input (NULL vid EOF) och funktionen int getlinenumber() som returnerar radnumret för senast levererade ord. Bilagan wordreaderfiles.c innehåller dessa funktioner. Ett exempel på in- och utdata till programmet finns i bilagan data.txt. Tips: Det behövs högst 10 rader (vettigt skriven) kod i funktionen (det räcker med 5 rader förutom main och return men med 8 blir det läsligare) 4. I inlämningsuppgift 5 (kalkylatorn) har ni använt klassen StremTokenizer för att gruppera teckenströmmen från tangentbordet till större enheter såsom tal och ord som sedan hanteras av parsern. Denna klass lämnar ifrån sig dessa enheter via diverse fält (ttype, sval, nval,... ). Ett mer objektorienterat sätt vore att låta tokenizern lämna ifrån sig någon form av tokenobjekt. Eftersom objekten är av olika typ (t ex ord, tal och olika former av specialtecken) så är det lämpligt med en klasshierarki där de olika konkreta klasserna alla är subklasser till en gemensam basklass. Man kan också se till att det finns ett (3p) 2

3 enhetligt sätt att komma åt textrepresentationen av objekten så att man inte behöver använda sval ibland, ttype ibland och konvertera nval till text ibland. En annan fördel med detta sätt är att användaren av klassen skulle kunna spara tokenströmmen i t ex en lista. Förutom klasshierarkien med olika sorters tokens behövs en klass MyTokenizer som kopplar en indataström till tokenizern och tillhandahåller en metod nexttoken() för att stega fram och några andra metoder som current(), tostring(),... I bilagan TokenizerTest finns kod som exemplifierar användningen. a) Skriv basklassen MyToken samt underklasserna MyWord för ord, MyNumber för tal, MyEOL för radslut, MyEOF för filslut och MyChar för tecken som inte ingår i något av de föregående. Klasserna skall innehålla det data de representerar som attribut samt metoder för att komma åt värdet i textform och, i förekommande fall, talform. (5p) b) I bilagan MyTokenizer.java finns klassen MyTokenizer påbörjad. Den använder den inbyggda klassen StreamTokenizer för att gruppera teckenströmmen. Skriv färdig metoden nexttoken()! (3p) 5. I bilagor till skrivningen finns ett program som läser och evaluerar uttryck på samma sätt som inlämningsuppgift 5. Bilagan Parser.java innehåller parser-metoder samt main-metoden, bilagan Klasshierarki.java innehåller klasserna som definierar de olika nodtyperna i den interna representationen och bilagan Symbolic.java innehåller metoder för symbolisk/numerisk aritmetik. Vissa delar av koden är utelämnade. Av utrymmeskäl är också alla import- och package-satser borttagna. Till skillnad från inlämningsuppgiften så hanteras (utförs) kommandon (quit och variables) av parsern och utskrifter av metoden statement(). Dessutom är, av utrymmesskäl, hantering av funktionerna sin och cos utelämnade. Programmet kan även hantera absolutbelopp som framgår av körexemplen:? 2*(3=a=b)=c Read : 2.0*(3.0=a=b)=c Evaluated : 6.0? variables Variables: {a=3.0, b=3.0, c=6.0? a Read : a Evaluated : 3.0? x + y = z Read : x+y=z Evaluated : x+y? z Read : z Evaluated : x+y? 1=x Read : 1.0=x Evaluated : 1.0? 2=y Read : 2.0=y Evaluated : 2.0? x+y=z Read : x+y=z Evaluated : 3.0 3

4 ? variables Variables: {a=3.0, b=3.0, c=6.0, x=1.0, y=2.0, z=3.0? a-2*b = c Read : a-2.0*b=c Evaluated : -3.0? c Read : c Evaluated : -3.0? c = c Read : c =c Evaluated : 3.0? -2=x Read : - 2.0=x Evaluated : -2.0? x - 2* y = z Read : x -2.0* y =z Evaluated : 2.0? variables Variables: {a=3.0, b=3.0, c=3.0, x=-2.0, y=2.0, z=2.0? " x -4* y = b = z Read : "( x -4.0* y =b )=z Evaluated : x -4.0* y =b? variables Variables: {a=0.0, b=3.0, c=3.0, x=-2.0, y=2.0, z= x -4.0* y =b? z Read : z Evaluated : x -4.0* y =b? &z Read : & z Evaluated : 6.0? variables Variables: {a=0.0, b=-6.0, c=3.0, x=-2.0, y=2.0, z= x -4.0* y =b? z x Read : z x *** Eval Error: Can not differentiate:? "(x=y) x Read : "(x=y) x *** Eval Error: Can not differentiate: =? quit a) Skriv assignment-metoden i klassen Parser som parsar tilldelningsuttryck (assignment) enligt samma syntax som i inlämningsuppgift 5. Se körexemplen! (4p) b) Skriv färdigt eval-metoden i klasserna Assignment så att de fungerar som i körexemplen (och inlämningsuppgiften). (4p) c) Komplettera parsern så att den kan hantera absolutbeloppsoperatorn. Denna operator skrivs så att den omger sin operand med vertikalstreck ( ). Se körexempel! Parsern skall skapa objekt av typen Positive för absultbeloppsuttryck. Implementera också klassen Positive och och metoden positive i Symbolic som hanterar absolutbelopp så att funktionen blir enligt körexemplen. Absolutbeloppsoperatorn är inte deriverbar. Tips: Syntaktiskt har denna operator vissa likheter med parentesuttryck. (6p) 4

5 Dec 10, 09 9:22 Page 1/1 /* list.h Listor med heltal typedef struct listnode { int line; struct listnode *next; listnode, *List; List listadd(list l, int line); // Ny nod sist void listprint(list l); // Skriver ut listan /* /* list.c Implementationsfil för heltalslistor #include <stdio.h> #include <stdlib.h> #include "list.h" * Skapar och lägger in en ny nod sist i listan * Precondition: l pekar till sista noden eller NULL * Returnerar : pekare till den nya sista noden * Invariant : Sista nodens next pekar till första noden List listadd(list l, int line) { List node = (List) malloc(sizeof(listnode)); //... *** Uppgift 1 void listprint(list l) { printf("["); if ( l!=null) { List t = l >next; // Börja med första elementet do { printf("%d ", t >line); t = t >next; while (t!=l >next); // Så länge sista elementet inte nåtts printf("]"); /* /* listtest.c #include <stdio.h> #include "list.h" int main() { List l = NULL; l = listadd(l, 2); l = listadd(l, 7); l = listadd(l, 17); l = listadd(l, 42); listprint(l); printf("\n"); listfiles.c Dec 10, 09 9:23 Page 1/3 /* treemap.h typedef struct treenode { char *key; void *data; struct treenode *left; struct treenode *right; treenode, *link; typedef link TreeMap; // Avsedd för externt bruk Konstruktor TreeMap newtreemap(); Lagrar paret (nyckel, data) i trädet tm. * Om nyckeln inte finns i trädet så skapas en ny nod (nyckel,data) * annars ändras värdet för den lagrade nyckeln. * Returnerar pekare till roten i det modifierade (del )trädet. link put (TreeMap tm, char *key, void *data); Returnerar det som är lagrat med nyckeln key eller NULL om key * inte finns i trädet void *get (TreeMap tm, char *key); Returnerar ett värde!= 0 om key finns i trädet, annars 0 int containskey (TreeMap tm, char *key); Returnerar ett värde!= 0 om någon nod i trädet har ett datafält * som är lika med val. * equals är en funktion som avgör vad som menas med lika. int containsvalue(treemap tm, void *val, int equals(void *, void *)); Skriver ut noderna i trädet. * data delen skrivs ut genom anrop till funktionen prt void print (TreeMap tm, void prt(void *)); Returnerar antalet noder i trädet int size (TreeMap tm); treemapfiles.c /* Output: [ ] Thursday December 10, 2009 listfiles.c, treemapfiles.c 1/10

6 Dec 10, 09 9:23 Page 2/3 /* /* treemap.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include "treemap.h" TreeMap newtreemap() { return NULL; link newtreenode(char *key, void *data) { link n = (link) malloc(sizeof(treenode)); n >key = key; n >data = data; n >left = n >right = NULL; return n; int size(treemap r) { //... *** Uppgift 2a int containskey(treemap r, char *key) { //... Behöver ej skrivas link put(treemap r, char *key, void *data) { //... *** Uppgift 2b void *get(treemap r, char *key) { if (r==null) return NULL; if ( strcmp(key, r >key) < 0 ) return get(r >left, key); if ( strcmp(key, r >key) > 0 ) return get(r >right, key); return r >data; int containsvalue(treemap r, void *data, int equals(void *, void *)) { //... *** Uppgift 2c void print(treemap r, void prt(void *)) { if (r) { print(r >left, prt); printf("%10s : ", r >key); prt(r >data); printf("\n"); print(r >right, prt); treemapfiles.c Dec 10, 09 9:23 Page 3/3 /* /* treemaptest.c #include <stdio.h> #include "treemap.h" int equals(void *x, void *y) { // För jämför av datadelen return (int)x == (int) y; void prt(void *data) { // För utskrift av testdata printf(" %d", (int)data); int main() { TreeMap tm = newtreemap(); tm = put(tm, "x", (void *)1); // Ett brutalt och aningen tm = put(tm, "y", (void *)2); // riskabelt sätt men tm = put(tm, "z", (void *)3); // duger för enkel testning tm = put(tm, "a", (void *)4); // och demonstration tm = put(tm, "z", (void *)5); if (containskey(tm, "z")) { printf("ja, z finns med värdet: %d\n", (int) get(tm, "z")); if (containsvalue(tm, (void *)17, equals)) { printf("ja, 17 finns\n"); { printf("nej, 17 finns inte\n"); if (containsvalue(tm, (void *)5, equals)) { printf("ja, 5 finns\n"); { printf("nej, 5 finns inte\n"); printf("\nträdet har %d noder och innehåller följande (i ordning):\n", size(tm)); print(tm, prt); return 0; /* Output: ja, z finns med värdet: 5 nej, 17 finns inte ja, 5 finns treemapfiles.c Trädet har 4 noder och innehåller följande (i ordning): a : 4 x : 1 y : 2 z : 5 Thursday December 10, 2009 treemapfiles.c 2/10

7 Dec 10, 09 9:23 Page 1/1 /* wordreader.h char *readword(); // Returnerar nästa ord int getlinenumber(); // Returnerar aktuellt radnummer /* /* wordreader.c #include <stdio.h> #include <ctype.h> #include <string.h> #include "wordreader.h" static int linenumber = 1; * Returnerar nästa ord (obruten sekvens av bokstäver) från * standard input char *readword() { char buffer[1000]; int i; int c= getchar(); while (!isalpha(c)) { // Hitta första bokstav if (c==eof) return NULL; if (c== \n ) linenumber++; c = getchar(); wordreaderfiles.c i = 0; while (isalpha(c)) { // samla bokstäver buffer[i++] = c; c = getchar(); buffer[i] = \0 ; ungetc(c, stdin); // Lägg tillbaka "icke bokstaven" return strdup(buffer); // Kopiera till lagom stor area Dec 10, 09 9:24 Page 1/1 Indata: Den mätta dagen, den är aldrig störst. Den bästa dagen är en dag av törst. Nog finns det mål och mening i vår färd men det är vägen, som är mödan värd. Utdata: Den : [1 2 ] Nog : [4 ] aldrig : [1 ] av : [2 ] bästa : [2 ] dag : [2 ] dagen : [1 2 ] den : [1 ] det : [4 5 ] en : [2 ] finns : [4 ] färd : [4 ] i : [4 ] men : [5 ] mening : [4 ] mätta : [1 ] mål : [4 ] mödan : [5 ] och : [4 ] som : [5 ] störst : [1 ] törst : [2 ] vägen : [5 ] värd : [5 ] vår : [4 ] är : [ ] data.txt * Returnerar aktuellt radnummer int getlinenumber() { return linenumber; Thursday December 10, 2009 wordreaderfiles.c, data.txt 3/10

8 Dec 10, 09 9:25 Page 1/1 * Testprogram för MyTokenizer import mytokenizer.*; import java.io.ioexception; public class TokenizerTest { TokenizerTest.java public static void main(string[] args) throws IOException { MyTokenizer mt = new MyTokenizer(); MyToken t; System.out.println("End with quit or EOF"); System.out.print("> "); do { t = mt.nexttoken(); System.out.println(t.toString() + " \t: " + mt.tostring()); try { // Prova något eventuellt illegalt if (t.isnumber() t.isword() ) { double nbr = t.getnumber(); catch (MyToken.MyTokenException me) { System.out.println("*** Error *** " + me.getmessage() + ": " + t); System.out.println("*** occured after: " + mt.previous()); if (t.iseol()) { // Ny prompter vid radslut System.out.println("End with quit or EOF"); System.out.print("> "); while (!t.iseof() &&!t.tostring().equals("quit")); /* Testkörning: rontok$ java TokenizerTest End with quit or EOF > =x : class mytokenizer.mynumber[123.0] on line 1 + : class mytokenizer.mychar[+] on line : class mytokenizer.mynumber[567.0] on line 1 = : class mytokenizer.mychar[=] on line 1 x : class mytokenizer.myword[x] on line 1 *** Error *** getnumber called for a nonnumber: x *** occured after: = + : class mytokenizer.mychar[+] on line : class mytokenizer.mynumber[18.0] on line 1 *EOL* : class mytokenizer.myeol[*eol*] on line 2 End with quit or EOF > ()(2) ( : class mytokenizer.mychar[(] on line 2 ) : class mytokenizer.mychar[)] on line 2 ( : class mytokenizer.mychar[(] on line : class mytokenizer.mynumber[2.0] on line 2 ) : class mytokenizer.mychar[)] on line 2 *EOL* : class mytokenizer.myeol[*eol*] on line 3 End with quit or EOF > quit quit : class mytokenizer.myword[quit] on line 3 *** Error *** getnumber called for a nonnumber: quit *** occured after: *EOL* rontok$ Dec 10, 09 9:27 Page 1/1 package mytokenizer; import java.io.*; A tokenizer for standard input. A token is one of the following subclasses to MyToken: MyNumber a number (digits, possibly with decimals) MyWord a word (a sequence of letters) MyEOL an eol MyEOF an eof MyChar a char i.e any nonspace character not forming the above tokens The tokenizer keeps track of the current and the previous token. public class MyTokenizer { private StreamTokenizer st = new StreamTokenizer( new BufferedReader( new InputStreamReader(System.in)));; private MyToken current; private MyToken previous; public MyTokenizer() throws IOException { st.eolissignificant(true); st.ordinarychar( + ); st.ordinarychar( ); previous = current = new MyWord("*BOF*"); //"Beginning Of File" public String tostring() { return current.getclass() +"[" + current + "] on line " + st.lineno(); * Advances to next token next token (i e the new current token) public MyToken nexttoken() throws IOException { //... *** Uppgift 4 current token public MyToken current() { return current; the previous current token public MyToken previous() { return previous; MyTokenizerFiles.java the line number for the current token public int lineno() { return st.lineno(); Thursday December 10, 2009 TokenizerTest.java, MyTokenizerFiles.java 4/10

9 Dec 10, 09 9:28 Page 1/4 /* Symbolisk kalkylator Förvillkor för alla parser metoder förutom main, run: Tokenizern positionerad till det första obehandlade token dvs till det token som står på tur att behandlas. Eftervillkor för alla parser metoder utom main, run och statement: Tokenizern positionerad till det första obehandlade token. import java.util.*; import java.io.*; import symbolic.*; public class Parser { private StreamTokenizer st; private TreeMap<String, Sexpr> map; private HashSet<String> commands; private HashSet<String> unaries; Parser.java public class SyntaxException extends RuntimeException { public SyntaxException(String msg) { super(msg); public static void main(string [] args) throws IOException { Parser p = new Parser(); p.run(); public Parser() throws IOException { st = new StreamTokenizer( new BufferedReader( new InputStreamReader(System.in))); st.eolissignificant(true); st.ordinarychar( + ); st.ordinarychar( ); st.ordinarychar( / ); st.ordinarychar( * ); st.ordinarychar( ); st.ordinarychar( \ ); st.ordinarychar( " ); {char c= " ; // To fool a2ps st.ordinarychar( & ); Parser.java Dec 10, 09 9:28 Page 2/4 System.out.print("? "); while ( st.nexttoken() == StreamTokenizer.TT_EOL ); statement(); catch (SyntaxException e) { System.out.println("* Syntax Error: " + e.getmessage()); while ( st.ttype!= StreamTokenizer.TT_EOL ) catch (EvaluationException e) { System.out.println("*** Eval Error: " + e.getmessage()); public void statement() throws IOException { if ( st.ttype==streamtokenizer.tt_word && commands.contains(st.sval) ) { command(); { Sexpr d = assignment(); System.out.println("Read : " + d); Sexpr v = d.eval(map); map.put("ans", v); System.out.println("Evaluated : " + v); if ( st.ttype!= StreamTokenizer.TT_EOL ) throw new SyntaxException("Expected EOL but found: " + st); public void command() throws IOException { if (st.sval.equals("quit") ) { System.out.println("Bye"); System.exit(0); if ( st.sval.equals("variables") ) { System.out.println("Variables: " + map); if (st.sval.equals("clear")) { while (st.ttype==streamtokenizer.tt_word) { map.remove(st.sval); if ( st.ttype!=streamtokenizer.tt_eol) throw new SyntaxException("Expected EOL but found: " + st); throw new SyntaxException("Unknown command: " + st); map = new TreeMap<String,Sexpr>(); unaries = new HashSet<String>(); commands = new HashSet<String>(); unaries.add(" "); unaries.add("exp"); unaries.add("log"); unaries.add("\""); unaries.add("&"); commands.add("quit"); commands.add("variables"); commands.add("clear"); public Sexpr assignment() throws IOException { //... *** Uppgift 5 a public Sexpr expression() throws IOException { Sexpr sum = term(); while ( st.ttype == + st.ttype == ) { int oper = st.ttype; if (oper== + ) sum = new Addition(sum, term()); sum = new Subtraction(sum, term()); public void run() throws IOException { while (true) try { do { return sum; Thursday December 10, 2009 Parser.java 5/10

10 Parser.java Dec 10, 09 9:28 Page 3/4 public Sexpr term() throws IOException { Sexpr prod = factor(); while ( st.ttype == * st.ttype == / ) { int oper = st.ttype; if ( oper == * ) prod = new Multiplication(prod, factor()); prod = new Division(prod, factor()); return prod; Parser.java Dec 10, 09 9:28 Page 4/4 return new Evaluation(primary()); if (op.equals("exp")) return new Exp(primary()); if (op.equals("log")) return new Log(primary()); throw new SyntaxException("Undefined operator: " + op); public Sexpr factor() throws IOException { Sexpr result = primary(); while ( st.ttype == \ ) { if ( st.ttype!= StreamTokenizer.TT_WORD ) throw new SyntaxException("Expected identifier but found: " + st); { result = new Differentiation(result, new Variable(st.sval)); return result; public Sexpr primary() throws IOException { Sexpr result = null; if ( st.ttype == ( ) { // ( assignment ) result = assignment(); if ( st.ttype!= ) ) throw new SyntaxException("Expected ) but found " + st); if ( st.ttype == StreamTokenizer.TT_NUMBER ) { // number result = new Constant(st.nval); { String op = "" + (char) st.ttype; if ( st.ttype == StreamTokenizer.TT_WORD ) op = st.sval; if ( unaries.contains(op) ) { // unary result = unary(op); if ( st.ttype == StreamTokenizer.TT_WORD ) { // identifier result = new Variable(op); { // error throw new SyntaxException("Unexpected: " + st); return result; public Sexpr unary(string op) throws IOException { if (op.equals(" ")) return new Negation(primary()); if (op.equals("\"")) return new Quotation(primary()); if (op.equals("&")) Thursday December 10, 2009 Parser.java 6/10

11 Dec 10, 09 9:29 Page 1/6 // class Addition public class Addition extends Binary { public Addition(Sexpr left, Sexpr right) { super(left, right); return Symbolic.add( left.eval(map), right.eval(map)); return "+"; return Symbolic.add(left.diff(x), right.diff(x)); return 10; // class Assignment public class Assignment extends Binary { //... *** Uppgift 5 b // class Atom public abstract class Atom extends Sexpr { public String tostring() { return getname(); // class Binary public abstract class Binary extends Sexpr { protected final Sexpr left, right; public Binary(Sexpr left, Sexpr right) { this.left = left; this.right = right; return 30; // Default for *, / public String tostring() { //... behöver inte skrivas // class Constant public class Constant extends Atom { private final double value; public Constant(double value) { this.value = value; Klasshieararki.java Dec 10, 09 9:29 Page 2/6 return this; return "" + value; return new Constant(0); public double getvalue() { return value; public boolean isconstant() { return true; public isconstant(double value) { return value==this.value; // class Differentiation public class Differentiation extends Binary { public Differentiation(Sexpr left, Sexpr right) { super(left, right); Sexpr val = left.eval(map); return val.diff(right); return " "; return 40; // class Division public class Division extends Binary { public Division(Sexpr left, Sexpr right) { super(left, right); return Symbolic.divide(left.eval(map), right.eval(map)); return "/"; Klasshieararki.java Thursday December 10, 2009 Klasshieararki.java 7/10

12 Dec 10, 09 9:29 Page 3/6 Sexpr numerator = Symbolic.subtract( Symbolic.multiply(left.diff(x), right), Symbolic.multiply(left, right.diff(x)) ); Sexpr denominator = Symbolic.multiply(right, right); return Symbolic.divide(numerator, denominator); return 30; // class Evaluation public class Evaluation extends Unary { public Evaluation(Sexpr argument) { super(argument); return argument.eval(map).eval(map); return "&"; // class EvaluationException public class EvaluationException extends RuntimeException { Klasshieararki.java public EvaluationException(String msg) { super(msg); // class Exp public class Exp extends Unary { public Log(Sexpr argument) { super(argument); return Symbolic.log(argument.eval(map)); return "log"; return Symbolic.divide(argument.diff(x), x); // class Multiplication public class Multiplication extends Binary { Dec 10, 09 9:29 Klasshieararki.java Page 4/6 public Multiplication(Sexpr left, Sexpr right) { super(left, right); return Symbolic.multiply( left.eval(map), right.eval(map)); return "*"; return Symbolic.add( Symbolic.multiply(left.diff(x), right), Symbolic.multiply(left, right.diff(x)) ); return 30; public Exp(Sexpr argument) { super(argument); return Symbolic.exp(argument.eval(map)); return "exp"; return Symbolic.multiply(argument.diff(x), new Exp(x)); // class Log public class Log extends Unary { // class Negation public class Negation extends Unary { public Negation(Sexpr argument) { super(argument); return Symbolic.negate(argument.eval(map)); return " "; return Symbolic.negate(argument.diff(x)); Thursday December 10, 2009 Klasshieararki.java 8/10

13 // class Quotation public class Quotation extends Unary { Dec 10, 09 9:29 Klasshieararki.java Page 5/6 public Quotation(Sexpr argument) { super(argument); return argument; return "\""; // class Sexpr public abstract class Sexpr { public abstract Sexpr eval(map<string, Sexpr> map); public abstract String getname(); Dec 10, 09 9:29 Page 6/6 return Symbolic.subtract(left.diff(x), right.diff(x)); return 10; // class Unary public abstract class Unary extends Sexpr { protected final Sexpr argument; public Unary(Sexpr argument) { this.argument = argument; return 50; Klasshieararki.java throw new EvaluationException("Can not differentiate: " + getname()); public double getvalue() { throw new RuntimeException("Internal error: getvalue()"); public String tostring() { if ( argument.priority() <= priority() ) return getname() + "(" + argument.tostring() + ")"; return getname() + " " + argument.tostring(); return 100; public boolean isconstant() { return false; // class Variable public class Variable extends Atom { private final String ident; public Variable(String ident) { this.ident = ident; public boolean isconstant(double v) { return false; public boolean equals(sexpr e) { return tostring().equals(e.tostring()); // class Subtraction public class Subtraction extends Binary { public Subtraction(Sexpr left, Sexpr right) { super(left, right); return Symbolic.subtract( left.eval(map), right.eval(map)); return " "; if ( map.containskey(ident) ) return map.get(ident); return this; return ident; if (ident.equals(x.getname())) return new Constant(1.); return new Constant(0.); Thursday December 10, 2009 Klasshieararki.java 9/10

14 Dec 10, 09 9:29 Page 1/2 package symbolic; public class Symbolic { public static Sexpr add(sexpr a, Sexpr b) { if ( a.isconstant() && b.isconstant() ) return new Constant(a.getValue() + b.getvalue()); if ( a.isconstant(0.) ) return b; if ( b.isconstant(0.) ) return a; if ( a.equals(b) ) return new Multiplication(new Constant(2.), a); return new Addition(a, b); Symbolic.java public static Sexpr multiply(sexpr a, Sexpr b) { if ( a.isconstant() && b.isconstant() ) return new Constant(a.getValue() * b.getvalue()); if ( a.isconstant(0.) b.isconstant(0.) ) return new Constant(0); if ( a.isconstant(1.) ) return b; if ( b.isconstant(1.) ) return a; return new Multiplication(a, b); Dec 10, 09 9:29 Page 2/2 if ( x.isconstant() ) return new Constant( Math.log(x.getValue()) ); return new Log(x); public static Sexpr negate(sexpr x) { if ( x.isconstant() ) return new Constant( x.getvalue()); return new Negation(x); Symbolic.java public static Sexpr positive(sexpr x) { if (x.isconstant()) return new Constant(Math.abs(x.getValue())); return new Positive(x); public static Sexpr subtract(sexpr a, Sexpr b) { if ( a.isconstant() && b.isconstant() ) return new Constant(a.getValue() b.getvalue()); if ( b.isconstant(0.) ) return a; if ( a.equals(b) ) return new Constant(0); return new Subtraction(a, b); public static Sexpr divide(sexpr a, Sexpr b) { if ( a.isconstant() && b.isconstant() ) return new Constant(a.getValue() / b.getvalue()); if ( a.isconstant(0.) ) return new Constant(0.); if ( b.isconstant(1.) ) return a; if ( a.equals(b) ) return new Constant(1.); return new Division(a, b); public static Sexpr exp(sexpr x) { if ( x.isconstant() ) return new Constant( Math.exp(x.getValue()) ); return new Exp(x); public static Sexpr log(sexpr x) { Thursday December 10, 2009 Symbolic.java 10/10

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

List.java. List.java. Printed by Tom Smedsaas Dec 17, 08 8:35 Page 1/2 /** class List * Representerar en länkad lista av godtyckliga objekt public class List { /** class ListNode * Noder i listor protected static class ListNode { protected Object

Läs mer

Obligatorisk uppgift 5

Obligatorisk uppgift 5 (5 oktober 2018 Symbolisk kalkylator 1 ) Obligatorisk uppgift 5 En kalkylator som hanterar uttryck symboliskt dvs värden är uttryck inte bara tal. Uppgiften exemplifierar: objektorientering återanvändning

Läs mer

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

List.java. List.java. Printed by Tom Smedsaas 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

Läs mer

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

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel. Tentamen Programmeringsteknik II för STS 2007-03-09 Skrivtid: 1500-2000 Inga hjälpmedel. Tänk på följande OBS: För betygen 4, 5 och VG kommer något högre gränser än normalt användas. Skriv läsligt! Använd

Läs mer

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

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck Betrakta följande uttryck a +(b + c) d + e (f + g h) Parsing med Recursive Descent, Avbildningsklasser Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 22 november 2010 Beräkning med regler: multiplikation

Läs mer

Obligatorisk uppgift 5: Symbolisk kalkylator

Obligatorisk uppgift 5: Symbolisk kalkylator Informationsteknologi Tobias Wrigstad IOOP HT10 Obligatorisk uppgift 5: Symbolisk kalkylator Moment: Objektorientering med klasshierarkier, arv och dynamisk bindning samt dynamiska strukturer, undantag,

Läs mer

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.

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. Tentamen Programmeringsteknik II 2013-06-05 Skrivtid: 1400-1700 Hjälpmedel: Java-bok (vilken som helst) Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja

Läs mer

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! Tentamen Programmeringsteknik II 2014-01-09 Skrivtid: 0800-1300 Hjälpmedel: Java-bok (vilken som helst) Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja

Läs mer

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

public boolean containskey(string key) { return search(key, head)!= null; } Tentamen Programmeringsteknik II 2009-05-26 med lösningar Skrivtid: 0900-1200 Uppgifter 1. Programbilagan ListMap.java innehåller en klass som implementerar en avbildning mellan mängden strängar och mängden

Läs mer

Observera. Tentamen Programmeringsteknik II Skrivtid:

Observera. Tentamen Programmeringsteknik II Skrivtid: Tentamen Programmeringsteknik II 2016-10-19 Skrivtid: 0800 1300 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper. Fyll i försättssidan

Läs mer

Obligatorisk uppgift 5: Symbolisk kalkylator

Obligatorisk uppgift 5: Symbolisk kalkylator Informationsteknologi Tom Smedsaas IOOP ht09 Obligatorisk uppgift 5: Symbolisk kalkylator Moment: Objektorientering med klasshierarkier, arv och dynamisk bindning samt dynamiska strukturer, undantag, samlingar

Läs mer

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.

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 Programmeringsteknik II 2015-05-26 Skrivtid: 0800 1300 Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg

Läs mer

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

Tentamen Programmeringsteknik 2 och MN Skrivtid: Inga hjälpmedel. Tentamen Programmeringsteknik 2 och MN2 2006-03-10 Skrivtid: 0900-1400 Inga hjälpmedel. Tänk på följande OBS: För betygen 4, 5 och VG kommer något högre gränser än normalt användas. Skriv läsligt! Använd

Läs mer

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 kod överst i högra hörnet på alla papper. Tentamen Programmeringsteknik II 2016-10-19 Skrivtid: 0800 1300 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper. Fyll i försättssidan

Läs mer

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! Tentamen Programmeringsteknik II 2013-10-22 Skrivtid: 0800-1300 Hjälpmedel: Java-bok (vilken som helst) Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja

Läs mer

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.

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 Programmeringsteknik II 2014-0-27 Skrivtid: 0800 100 Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg

Läs mer

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 kod överst i högra hörnet på alla papper. Tentamen Programmeringsteknik II 2016-05-30 Skrivtid: 1400 1900 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg

Läs mer

Obligatorisk uppgift: Numerisk kalkylator

Obligatorisk uppgift: Numerisk kalkylator (11 april 2016 T03.1 ) Obligatorisk uppgift: Numerisk kalkylator Följande klasser skall ingå Calculator Stokenizer Parser Till stor del given. Kompletteras bara med exceptionhantering. Given - skall användas

Läs mer

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 kod överst i högra hörnet på alla papper. Tentamen Programmeringsteknik II 2017-10-23 Skrivtid: 14:00 19:00 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper. Fyll i försättssidan

Läs mer

Obligatorisk uppgift: Numerisk kalkylator

Obligatorisk uppgift: Numerisk kalkylator (12 september 2018 OU2 1 ) Obligatorisk uppgift: Numerisk kalkylator Följande klasser skall ingå Calculator Stokenizer Parser Till stor del given. Kompletteras bara med exceptionhantering. Given - skall

Läs mer

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

Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10. Skriv bara på framsidan av varje papper. Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10 Skrivtid: 0800-1300 Inga hjälpmedel. Tänk på följande Maximal poäng är 40. För betygen 3 krävs 18 poäng. För betygen 4, 5 kommer något

Läs mer

Obligatorisk uppgift: Symbolisk kalkylator

Obligatorisk uppgift: Symbolisk kalkylator Informationsteknologi Programmeringsteknik II 22 augusti 2018 Obligatorisk uppgift: Symbolisk kalkylator Moment: Dynamiska strukturer (särskilt trädstrukturer), klasshierarkier, arv, dynamisk bindning,

Läs mer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Tentamen Programmeringsteknik II 2018-10-19 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

Övning från förra gången: readword

Övning från förra gången: readword (9 september 2010 T4.1 ) Övning från förra gången: readword /** readword.c * * int readword(char w[], int n) { * * Läser tecken tills en bokstav påträffas. * Läser och lagrar sedan högst n-1 bokstäver

Läs mer

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

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 Tentamen Programmeringsteknik II 2017-10-23 Skrivtid: 14:00 19:00 Inledning Skrivningen innehåller ett antal bilagor: Bilagan listsandtrees innehåller fyra klasser: Klassen List med några grundläggande

Läs mer

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

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 2015-03-19 Skrivtid: 14:00 19:00 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Läs mer

Obligatorisk uppgift: Numerisk kalkylator

Obligatorisk uppgift: Numerisk kalkylator Informationsteknologi Tom Smedsaas 22 augusti 2018 Obligatorisk uppgift: Numerisk kalkylator Programmet skall läsa in aritmetiska uttryck samt beräkna och skriva ut deras värden. Programmet ska läsa från

Läs mer

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P UME UNIVERSITET Datavetenskap 981212 TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P Datum : 981212 Tid : 9-15 HjŠlpmedel : Inga Antal uppgifter : 9 TotalpoŠng : 60 (halva pošngtalet kršvs normalt fšr

Läs mer

Symboliska konstanter const

Symboliska konstanter const (5 oktober 2010 T11.1 ) Symboliska konstanter const Tre sätt som en preprocessormacro med const-deklaration med enum-deklaration (endast heltalskonstanter) Exempel: #define SIZE 100 const int ANSWER =

Läs mer

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

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 2014-10-17 Skrivtid: 0800-1300 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till

Läs mer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Tentamen Programmeringsteknik I 2018-03-16 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod ö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. Tentamen Programmeringsteknik II 2017-05-29 Skrivtid: 0800 1300 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper. Fyll i försättssidan

Läs mer

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 kod överst i högra hörnet på alla papper. Tentamen Programmeringsteknik II 2016-05-30 Skrivtid: 1400 1900 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg

Läs mer

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

F3: Recursive descent, tokenisering, avbildningar och undantag. Carl Nettelblad F3: Recursive descent, tokenisering, avbildningar och undantag Carl Nettelblad 2017-04-03 Säg vad du vill göra Varför skriver vi kod? För att få datorn att göra det vi vill För att själva läsa koden För

Läs mer

Lösningar till Tentamen i Programmeringsteknik II och MN

Lösningar till Tentamen i Programmeringsteknik II och MN Lösningar till Tentamen i Programmeringsteknik II och MN2 2006-03-10 1. En nyckel har en unik plats i såväl binära sökträd som i hashtabeller. Dubletter skall alltså inte lagras. Det blir ogörligt att

Läs mer

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

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 2012-03-14 Skrivtid: 0800-1100 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till

Läs mer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Tentamen Programmeringsteknik I 2017-03-16 Skrivtid: 0800 1300 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Tentamen Programmeringsteknik I 2016-03-17 Skrivtid: 1400 1900 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning. Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java

Läs mer

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

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 2014-06-12 Skrivtid: 1400-1900 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Läs mer

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

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 2012-09-01 Skrivtid: 0900-1200 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till

Läs mer

Imperativ programmering

Imperativ programmering Imperativ programmering Vad är det? Ett programmeringsparadigm att jämföras med funktionell programmering och logikprogrammering. Vanlig programmering Programmen skrivs som en sekvens av satser (kommandon)

Läs mer

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

Att skriva till och läsa från terminalfönstret Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen

Läs mer

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 2015-01-10 Skrivtid: 8.00 13.00 Hjälpmedel: Java-bok Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till

Läs mer

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

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 2014-10-17 Skrivtid: 0800-1300 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till

Läs mer

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Tentamen Programmeringsteknik II Inledning. Anmälningskod: Tentamen Programmeringsteknik II 2016-01-11 Inledning I bilagan finns ett antal mer eller mindre ofullständiga klasser. Några ingår i en hierarki: List, SortedList, SplayList och ListSet enligt vidstående

Läs mer

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

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ orienterad programmering Föreläsning 3 Exempel: Telefonboken Fält som funktionsresultat Exempel Definiera static double[] vectorsum(double[] a, double[] b) Betrakta sedan följande kodavsnitt:... double[]

Läs mer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Tentamen Programmeringsteknik I 2019-03-22 Skrivtid: 14:00 19:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Tentamen Programmeringsteknik I 2016-03-17 Skrivtid: 1400 1900 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Tentamen Programmeringsteknik I 2016-06-11 Skrivtid: 0900 1400 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

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

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 2015-06-11 Skrivtid: 08:00 13:00 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Läs mer

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

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 AID-nummer: Datum: 2014-12-18 Kurskod: 725G61 Provkod: LAB1 Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 Skrivningstid: 2014-12-18 klockan 8.00-10.00. Hjälpmedel: Inga. För varje fråga

Läs mer

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

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid: Omtentamen för TDA540 Objektorienterad Programmering Institutionen för Datavetenskap CTH HT-16, TDA540 Dag: 2017-04-12, Tid: 14.00-18.00 Ansvarig: Examinator: Alex Gerdes Carlo A. Furia Förfrågningar:

Läs mer

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

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

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

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 2012-06-04 Skrivtid: 1400-1700 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till

Läs mer

Språkkonventioner och redigering av tal.

Språkkonventioner och redigering av tal. Språkkonventioner och redigering av tal. Kap J3-1 Konventioner för olika språk hanteras med hjälp av klassen java.util.locale Ett objekt i denna klass beskriver en lokal konvention. Lokala konventioner

Läs mer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Tentamen Programmeringsteknik I 2016-06-11 Skrivtid: 0900 1400 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

Tentamen i Programmeringsteknik I

Tentamen i Programmeringsteknik I Tentamen i Programmeringsteknik I 2017-01-03 Skrivtid: 8.00-13.00 Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Skriv ej högst upp i det vänstra hörnet

Läs mer

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. 1 (8) TENTMEN: lgoritmer och datastrukturer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. örja varje uppgift på ett nytt blad. Skriv inga lösningar i tesen. Skriv ditt idnummer

Läs mer

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

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 2015-06-11 Skrivtid: 08:00 13:00 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Läs mer

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

if (n==null) { return null; } else { return new Node(n.data, copy(n.next)); Inledning I bilagor finns ett antal mer eller mindre ofullständiga klasser. Klassen List innehåller några grundläggande komponenter för att skapa och hantera enkellänkade listor av heltal. Listorna hålls

Läs mer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Tentamen Programmeringsteknik I 2017-10-23 Skrivtid: 0800 1300 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

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

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga. Tentamen Programmeringsteknik I 2011-03-17 Skrivtid: 1400-1700 Hjälpmedel: Java-bok Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja alltid ny uppgift

Läs mer

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod ö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. Tentamen Programmeringsteknik II 2017-05-29 Skrivtid: 0800 1300 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper. Fyll i försättssidan

Läs mer

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

Grafik, grafiska användargränssnitt och rörliga bilder (22 maj 2015 F14.1 ) Grafik, grafiska användargränssnitt och rörliga bilder Viktigt: Grafiska komponenter: Fönster, etiketter, knappar, textfält,... Tekniken med att med genom arv definiera t ex sitt eget

Läs mer

Objektorienterad programmering i Java

Objektorienterad programmering i Java Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet

Läs mer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Tentamen Programmeringsteknik I 2017-10-23 Skrivtid: 0800 1300 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Sammanfattning och repetition utgående från typiska tentamensuppgifter (2 mars 2018 F6 1 ) Dagens föreläsning Sammanfattning och repetition utgående från typiska tentamensuppgifter (2 mars 2018 F6 2 ) A-fråga Hur många objekt skapas av nedanstående kod? World w = new World();

Läs mer

Malmö högskola 2008/2009 CTS

Malmö högskola 2008/2009 CTS Laboration 8 Avsikten med laborationen är att du lära dig skapa objekt med hjälp av klasser. Detta är en introduktion till ett objektorienterat tankesätt. Med hjälp av detta tankesätt kan du så småningom

Läs mer

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Mer om Interface Generiska klasser Undantag Nästlade klasser 1

Läs mer

Tentamen i Programmeringsteknik I

Tentamen i Programmeringsteknik I Tentamen i Programmeringsteknik I 2016-10-17 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

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

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta

Läs mer

Exempel ( )

Exempel ( ) Exempel Antag att vi vill ha en generell stack. En stack är en mekanism som man kan lagra i och hämta från enligt principen sist in, först ut (eng LIFO). Man skall alltså kunna Skapa en stack Lägga värden

Läs mer

TENTAMEN OOP

TENTAMEN OOP TENTAMEN OOP 2013-08-08 ANVISNINGAR Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. BETYGSÄTTNING Max antal poäng är 30. För att bli

Läs mer

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

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel Idag Ett exempel Undantag Substitutierbarhet, subtyper, subklasser När val av metod beror av typerna hos två objekt Lite om överlagring Exempel, version 2 Notera: för samtliga figurer gäller: arean av

Läs mer

Lösningsförslag till exempeltenta 1

Lösningsförslag till exempeltenta 1 Lösningsförslag till exempeltenta 1 1 1. Beskriv hur binärsökning fungerar. Beskriv dess pseudokod och förklara så klart som möjligt hur den fungerar. 2 Uppgift 1 - Lösning Huvudidé: - Titta på datan i

Läs mer

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

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 202-0-25 Skrivtid: 400-700 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Läs mer

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

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004 Lösningsförslag Programmeringsmetodik, KV: Java och OOP 17 januari 2004 Examinator: Johan Karlsson Skrivtid: 9-15 Hjälpmedel: En av följande böcker: Barnes & Kölling: Objects First With Java a practical

Läs mer

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016 Command line argumenter Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 /* Cla. java * Programmet illustrerar

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Outline Felhantering Eclipse Felsökning Command line argumenter

Läs mer

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000

Läs mer

Pekare ( )

Pekare ( ) Pekare Varje variabel har en adress En variabels adress ges av den unära adressoperatorn & Adresser hanteras kan lagras i variabler (pekarvariabel) Den unära avrefereringsoperatorn * används dels vid deklaration

Läs mer

Föreläsning 14. Filhantering

Föreläsning 14. Filhantering Föreläsning 14 Filhantering Filhantering Att hantera filer, dvs att läsa eller skriva data till en fil är en viktig del i de flesta program. Ur Javas synvinkel är filer objekt med egenskaper och metoder

Läs mer

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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar

Läs mer

Föreläsning 3. Stack

Föreläsning 3. Stack Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista ADT Stack Grundprinciper: En stack

Läs mer

TENTAMEN OOP

TENTAMEN OOP TENTAMEN OOP 2014-01-19 ANVISNINGAR Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. BETYGSÄTTNING Max antal poäng är 30. För att bli

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Interface Generiska klasser Undantag

Läs mer

(n 1)(n) 2 för n 1, dvs att tidskomplexiteten är kvadratisk i värsta fall. 0 + 1 + 2 +... + (n 1) =

(n 1)(n) 2 för n 1, dvs att tidskomplexiteten är kvadratisk i värsta fall. 0 + 1 + 2 +... + (n 1) = LULEÅ TEKNISKA UNIVERSITET Tentamen i Objektorienterad design Totala antalet uppgifter: 6 Lärare: Håkan Jonsson, Tomas Johansson, 491700, 491465 Resultatet anslås senast 2006-05-20 i A-huset. Tillåtna

Läs mer

Konstruktion av klasser med klasser

Konstruktion av klasser med klasser Konstruktion av klasser med klasser Klasser kan byggas på redan denierade klasser genom att klassobjekt används som dataattribut när en ny klass beskrivs. Exempel: Klassen PairOfDice har två attribut attribut

Läs mer

Inlämningsuppgift MiniPlotter

Inlämningsuppgift MiniPlotter LUNDS TEKNISKA HÖGSKOLA Institutionen för datavetenskap EDAA01 Programmeringsteknik fördjupningskurs Inlämningsuppgift MiniPlotter I den här uppgiften ska ett program som ritar grafer av matematiska funktioner

Läs mer

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

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA för SY2 1999-03-17, kl 14.00-18.00 Hjälpmedel: En lärobok i Java programmering Återlämningstillfälle:

Läs mer

F4. programmeringsteknik och Matlab

F4. programmeringsteknik och Matlab Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner

Läs mer

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod ö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. Tentamen Programmeringsteknik II 2018-05-28 Skrivtid: 0800 1300 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper. Fyll i försättssidan

Läs mer

Tentamen, Algoritmer och datastrukturer

Tentamen, Algoritmer och datastrukturer UNDS TEKNISKA ÖGSKOA (6) Institutionen för datavetenskap Tentamen, Algoritmer och datastrukturer 23 8 29, 8. 3. Anvisningar: Denna tentamen består av fem uppgifter. Totalt är skrivningen på 36 poäng och

Läs mer

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11 Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11 Undantag Engelska: exceptions Skansholm: exceptionella händelser Fel som genereras om man försöker

Läs mer

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X Algoritmer och Datastrukturer Kary FRÄMLING/Göran PULKKIS (v23) Kap. 7, Sid 1 BINÄRA TRÄD Träd används för att representera olika slags hierarkier som ordnats på något sätt. Den mest använda trädstrukturen

Läs mer

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

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson Fakulteten för ekonomi, kommunikation och IT Corba Datum: 2007-10-17 Namn: Kurs: Henrik Bäck Mathias Andersson DVGC02 Innehållsförteckning Implementation 3 IDL-fil 3 Server 3 Klient 3 Körning 3 Bilagor

Läs mer

DAT043 Objektorienterad Programmering

DAT043 Objektorienterad Programmering DAT043 Objektorienterad Programmering Detta är en exempeltenta som innehåller gamla tentauppgifter av ungefär liknande slag som ni kan förvänta er se på ordinarie tenta i Del 1 respektive Del 2. Dock är

Läs mer

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

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag Undantagshantering Fördjupad Java Ett undantag (Exception) är ett objekt som påtalar en ovanlig eller felaktig situation i ett program. Undantag kastas av programmet och kan fångas och hanteras. Java har

Läs mer