Obligatorisk uppgift: Numerisk kalkylator

Relevanta dokument
Obligatorisk uppgift: Numerisk kalkylator

Obligatorisk uppgift: Numerisk kalkylator

Obligatorisk uppgift 5

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

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

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

Obligatorisk uppgift 5: Symbolisk 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.

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

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

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.

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!

Obligatorisk uppgift: Symbolisk kalkylator

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

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

Inlämningsuppgift MiniPlotter

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

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

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

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

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

DAT043 Objektorienterad Programmering

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

Observera. Tentamen Programmeringsteknik II Skrivtid:

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

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

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.

Obligatorisk uppgift 5: Symbolisk kalkylator

Föreläsnings 9 - Exceptions, I/O

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

Objektorienterad Programmering (TDDC77)

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. Lösningsförslag

Sammanfattning och repetition utgående från typiska tentamensuppgifter

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

F2: Algoritmanalys, sökning, sortering, recursive descent Carl Nettelblad

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

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

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

Del A (obligatorisk för alla)

Exempel på användning av arv: Geometriska figurer

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

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

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

JAVAUTVECKLING LEKTION 4

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

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

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

Lösningar för tenta 2 DAT043,

Föreläsning 3-4 Innehåll

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

Lösningsförslag till tentamen FYTA11 Javaprogrammering

Föreläsning 3. Stack

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

Föreläsning 3. Stack

Chapter 4: Writing Classes/ Att skriva egna klasser.

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

Algoritmer. Två gränssnitt

Föreläsning 14. Filhantering

F3: OU2, undantag, avbildningar, listor och träd. Carl Nettelblad

Tentamen , Introduktion till Java, dtaa98, dtea53

Dugga i Grundläggande programmering STS, åk

Typkonvertering. Java versus C

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

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

Tentamen OOP

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

Recitation 4. 2-D arrays. Exceptions

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

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

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

JAVAUTVECKLING LEKTION 7

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Presentation av trafiksimuleringsprojektet

Föreläsning 5-6 Innehåll

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

F4. programmeringsteknik och Matlab

PROGRAMMERING-Java Omtentamina

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

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

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Föreläsning 8: Exempel och problemlösning

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

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

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

Del A (obligatorisk för alla)

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

Språkkonventioner och redigering av tal.

Presentation av trafiksimuleringsprojektet

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

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

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

Objektorienterad Programkonstruktion. Föreläsning 11 6 dec 2016

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Skillnader mellan Python och Java

Transkript:

(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 användas (i oförändrat skick)! En mall ( ParserTemplate ) given SyntaxException EvaluationException

(12 september 2018 OU2 2 ) Klassen Calculator Huvudklass för kalkylatorn. Innehåller konstruktor, statement (med en hjälpmetod) samt main-metoden. public class Calculator { private Parser parser; private Stokenizer tokenizer; private Map<String, Double> variables; public Calculator(Stokenizer tokenizer) { this.tokenizer = tokenizer; variables = new TreeMap<String, Double>(); variables.put("pi", Math.PI); variables.put("e", Math.E); variables.put("ans", new Double(0.)); parser = new Parser(tokenizer, variables);

(12 september 2018 OU2 3 ) Kalylatorns main-metod public static void main(string[] args) throws IOException { System.out.println("Numerical calculator version 2018-09-11"); Calculator calc = new Calculator(new Stokenizer()); while (true) { statement();

(12 september 2018 OU2 4 ) Kalylatorns statement-metod public void statement() { try { calc.line(); catch (SyntaxException syntaxexception) { throw syntaxexception; catch (EvaluationException evaluationexception) { throw evaluationexception; Röd kod ska ersättas med kod som ger felutskrift och ser till att tokenizern positioneras till slutet på raden

(12 september 2018 OU2 5 ) Hjälpmetod till statement private void line() { do { System.out.print("> "); tokenizer.nexttoken(); while (tokenizer.iseol()); // Skip empty lines statement EOL quit vars file filename EOL String command = tokenizer.gettoken(); // First token if (command.equals("quit") tokenizer.iseos()) { System.out.println("Bye!"); System.exit(0); else if (command.equals("vars")) { System.out.println(variables); tokenizer.nexttoken(); else { double parsed = parser.(); System.out.println(parsed); variables.put("ans", new Double(parsed)); if (!tokenizer.iseol()) { throw new SyntaxException("Expected EOL");

(12 september 2018 OU2 6 ) Syntaxdiagram: Specifikation för Parser-klassen expression expression term = word + eller term Obs: Hette tidigare factor factor ( ) * eller / function name factor number function name word sin cos exp log

(12 september 2018 OU2 7 ) Parser-mallen public class ParserTemplate { private Stokenizer tokenizer; private Map<String, Double> variables; private TreeSet<String> functions; public ParserTemplate(Stokenizer tokenizer, Map<String,Double> variables) { this.tokenizer = tokenizer; this.variables = variables; functions = new TreeSet<String>(); functions.add("sin"); functions.add("cos"); functions.add("exp"); functions.add("log");

(12 september 2018 OU2 8 ) Parser-mallen public double () { double result = expression(); return result; public double expression() { double sum = term(); return sum; public double term() { double prod = factor(); return prod; public double factor() { return ();

(12 september 2018 OU2 9 ) Parser-mallen public double () { double result = 99999; if (tokenizer.isnumber()) { result = tokenizer.getnumber(); tokenizer.nexttoken(); else { throw new SyntaxException(" not complete yet: " + tokenizer.gettoken()); return result;

Tips om hantering av funktionsanropen Funktionsanropen har alla samma syntax: funktionsnamn() function name sin cos exp ( ) log function name number word (12 september 2018 OU2 10 )

(12 september 2018 OU2 11 ) Tips om hantering av funktionsanropen Hanteringen av argumentet (syntaxkontroll av och evaluering) bör alltså göras gemensamt på ett ställe. Inget klipp och klistrande av kod, alltså! För att underlätta det har parsern försetts med ett TreeSet<String> functions som innehåller funktionsnamnen. Följande kod passar då in någonstans i... else if (funtions.contains(tokenizer.gettoken()) { result = functionhandler(tokenizer.gettoken()) else if {...

(12 september 2018 OU2 12 ) Hjälpmetoden functionhandler double functionhandler(string functionname) { tokenizer.nexttoken(); // Pass the function name if (tokenizer.getchar()!= ( ) throw new SyntaxException(...); double argument = (); // Handles the parentheses if (functionname.equals("exp")) return Math.exp(argument); else if (... )... else if (... )...... Metoden utnyttjar alltså för kontrollen av högerparentesen.

(12 september 2018 OU2 13 ) Var kan syntaxfel upptäckas? expression expression term = word + eller term factor ( ) * eller / function name factor number function name word sin cos exp log

(12 september 2018 OU2 14 ) Var kan syntaxfel upptäckas? expression expression term = word + eller term factor ( ) * eller / function name factor function name sin cos exp log number word

(12 september 2018 OU2 15 ) Var kan syntaxfel upptäckas? statement EOL quit EOL vars file filename

(12 september 2018 OU2 16 ) Var kan syntaxfel upptäckas? statement EOL quit EOL vars file filename

(12 september 2018 OU2 17 ) Tips Lägg in undantagshanteringen från början! Se till att följande skrivs ut: Vilken/vilka tokar som förväntades Vilken tok som hittades (gettoken()) Vilken den närmast föregående token var (getprevioustoken()). Det underlättar i hög grad felsökningen i ert program!