Lösningsförslag FYTA11 Javaprogrammering

Relevanta dokument
Lösningsförslag, tentamen FYTA11 Javaprogrammering

Tentamen FYTA11 Javaprogrammering

Tentamen FYTA11 Javaprogrammering

Lösningsförslag till tentamen FYTA11 Javaprogrammering

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

Tentamen FYTA11 Javaprogrammering

Lösningsförslag tentamen FYTA11 Java

Tentamen FYTA11 Javaprogrammering

Lösningsförslag FYTA11 Javaprogrammering

Lösningsförslag FYTA11 Javaprogrammering

Recitation 4. 2-D arrays. Exceptions

Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Omentamen FYTA11 Javaprogrammering

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

Tentamen FYTA11 Javaprogrammering

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

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

Tentamen FYTA11 Javaprogrammering

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

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.

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

Objektorienterad Programmering (TDDC77)

F4. programmeringsteknik och Matlab

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen. Lösningsförslag

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

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

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

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

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

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

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

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

Tentamen OOP

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

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.

Objektorienterad programmering D2

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

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ösningsförslag tentamen FYTA11 Javaprogrammering

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

DAT043 Objektorienterad Programmering

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

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

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Språkkonventioner och redigering av tal.

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

Objektorienterad Programmering (TDDC77)

D0010E. Hello world! Nedräkning. Sågtand. Övningsuppgifter i Eclipse. Skapa ett program som skriver ut "Hello world" på skärmen.

Tentamen. Grundläggande programmering i Java A 5p, DTAA

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

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

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

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

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Tentamen i Programmeringsteknik I

TENTAMEN OOP

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Tentamen Programmering fortsättningskurs DIT950

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

OOP Tentamen

Grundläggande programmering med C# 7,5 högskolepoäng

Föreläsning 5-6 Innehåll

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

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

TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15

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

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

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

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

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

Lösningar för tenta 2 DAT043,

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

Tentamen, EDAA10 Programmering i Java

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

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag aug - 23 Tentamen i Objektorientering och Java Skrivtid 5 h

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

Tentamen för TTIT71 Programmering kl Institutionen för datavetenskap Linköpings universitet. Uppgift 1. (2 p)

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

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

Del A (obligatorisk för alla)

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert AWT. Paket för hantering av grafik

Lösningsförslag till tentamen

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

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

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

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

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

OOP Objekt-orienterad programmering

Dugga i Grundläggande programmering STS, åk

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

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

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

Transkript:

Lunds universitet FYTA11 Institutionen för Astronomi och Teoretisk fysik HT 14 Lösningsförslag FYTA11 Javaprogrammering Torsdag 29 januari 2015, 09:15 13:15 Instruktioner Hjälpmedel: Papper och penna. Behandla högst en uppgift per papper och sätt ditt namn och uppgiftens nummer på varje papper. Skriv läsligt och kommentera utförligt vad du gör det kan ge dig poäng även om resultatet blir fel. Tentamen omfattar fyra uppgifter som vardera kan ge upp till tio poäng. För G och VG krävs 20 respektive 30 poäng, inräknat de högst fem bonuspoängen från simuleringsövningarna.

Uppgift 1: Små fel Korrigera felen i följande kodstycken där felens natur anges av kommentarer i/efter koden. Skriv en korrekt version av raden/raderna som ändras (och tänk på att det kan behöva framgå vilken rad det rör sig om). a. b. c. d. e. f. int tries = 10; //for(int try = 0; try < tries; ++try) // error: not a statement for(int t = 0; t < tries; ++t) // "try" är reserverat ord trysomething(); //int ints[12] = new int[12]; int[] ints = new int[12]; // alternativt: int ints[] =... // error: ] expected // error: illegal start of expression //public static void square(double x) public static double square(double x) // returtyp return x * x; // cannot return a value from method whose result type is void int max = 12; //System.out.println((int)Math.random()*max); System.out.println((int)(Math.random()*max)); // Skriver alltid ut 0 /* set initial width and height to 3 */ //int width = height = 3; int width = 3, height = 3; // error: cannot find symbol /* i en konstruktor i ett grafiskt program */ ActionListener a = new ActionListener() // void actionperformed(actionevent ae) /*... */ // <- här public void actionperformed(actionevent ae) /*... */ ; // error: actionperformed(actionevent) in <anonymous Test$1> cannot // implement actionperformed(actionevent) in ActionListener // attempting to assign weaker access privileges; was public

g. public class Test /* Constructor */ // public void Test(int value) <- felet var dock här public Test(int value) this.value = value; public void print() System.out.println(value); private int value; public static void main(string[] s) Test t = new Test(42); <- felet pekar på denna rad t.print(); // constructor Test in class Test cannot be applied to given types // required: no arguments // found: int h. i. public static void main(string[] s) // if(s.length == 0 s[0] == "help") if(s.length == 0 s[0].equals("help")) // 1: 2: equals System.out.println("please give one argument"); // Dubbelfel: // Fel 1: programmet krashar med ArrayIndexOutOfBoundsException // om man kör det utan argument // Fel 2: programmet skriver inte ut hjäptexten om man ger "help" // som argument på kommandoraden try Integer.parseInt(s[0]); // catch(e) // error: <identifier> expected catch(exception e) System.out.println("exception!");

Uppgift 2: Magiska kvadrater En äkta magisk kvadrat av ordning n är en kvadrat bestående av n 2 rutor ifyllda med heltalen 1 till n 2 på så sätt att varje kolumn och rad och de båda diagonalerna bildar samma summa, M(n) = 1 2 (n3 +n). Se figur. Din uppgift är att skriva en metod som avgör om dess input är en magisk kvadrat. Metodens signatur är static boolean ismagicsquare(int[][] sq) där sq beskriver en kvadrat av storlek n n. Om någon av raderna (eller kolumnerna beroendepåvilken tolkning viväljer) isqinteharrätt antalelement så skall metoden returnera false. Annars skall metoden returnera true om och endast om alla tal från 1 till n 2 förekommer i kvadraten och samtliga rad-, kolumn- och diagonalsummor är M(n). Metoden är tänkt att vara användbar för ganska stora kvadrater, exempelvis n = 3000. Tänk på vad detta innebär för hur M(n) representeras. Dessutom bör tids- och minnesåtgången inte skala sämre än n 2.

public static boolean ismagicsquare(int[][] sq) int n = sq.length; // För att kolla så alla n*n tal förekommit boolean[] seen = new boolean[n * n + 1]; // Kolla så det är en kvadrat med unika tal 1...n*n for(int i = 0; i < n; ++i) if(sq[i] == null sq[i].length!= n) return false; for(int j = 0; j < n; ++j) int v = sq[i][j]; if(v < 1 v > n*n seen[v]) return false; // Räkna ut M(n). Notera long för att klara stora n long m = ((long)n * n * n + n) / 2; // Summorna längs diagonalerna long diasum1 = 0, diasum2 = 0; for(int i = 0; i < n; ++i) // Summa i rad och kolumn long rowsum = 0, colsum = 0; for(int j = 0; j < n; ++j) rowsum += sq[i][j]; colsum += sq[j][i]; if(rowsum!= m colsum!= m) return false; diasum1 += sq[i][i]; diasum2 += sq[i][n-1 - i]; if(diasum1!= m diasum2!= m) return false; return true; // testfall: // int[][] a = 2,7,6, 9,5,1, 4,3,8; // System.out.println(isMagicSquare(a));

Uppgift 3: Fakultet Produktenavallapositivatalmindreän,ellerlikamedettgivettalnkallasn-fakultet och skrivs n!. Fakulteten kan definieras rekursivt enligt: n! = (n 1)! n, 1! = 1, 0! = 1. Skriv en klass med en rekursiv metod som, givet ett heltal av typen long, returnerar fakulteten för detta heltal. Om argumentet är negativt eller för stort skall ett exception av klasserna NegativeFactorialException respektive LargeFactorialException genereras. Det största möjliga heltalet ges av klassvariabeln MAX_VALUE i klassen Long, så om fakulteten (n 1)! redan är uträknad så vet vi att argumentet n är för stort om (n 1)! är större än MAX_VALUE dividerat med n. public class FactorialException extends Exception public FactorialException(String what) super(what); public class NegativeFactorialException extends FactorialException public NegativeFactorialException() super("negative argument to Factorial."); public class LargeFactorialException extends FactorialException public LargeFactorialException() super("too large argument to Factorial."); Lösning: se uppgift 4.

Uppgift 4: Fakultet igen Lägg till en main-metod i klassen från den förgående uppgiften. Denna metod skall för varje kommandoradsargument till programmet skriva ut fakulteten för motsvarande tal. Om ett argument inte är ett tal skall ett felmeddelande skrivas ut, men resterande argument behandlas som vanligt. Om ett tal får metoden från föregående uppgift att kasta ett exception skall motsvarande felmeddelande skrivas ut; minns att Exception har metoden string getmessage(). Ett exempel: $ java Factorial 10 apa -1 100 17 10! = 3628800 ERROR: apa is not an integer. ERROR: -1 Negative argument to Factorial. ERROR: 100 Too large argument to Factorial. 17! = 355687428096000 Följande metod i klassen Long kan vara till nytta: public class Long /** Returns a double value initialized to the value represented * by the specified String. * @param s the string to be parsed. * @return the double value represented by the string argument. * @throws NumberFormatException if the string does not contain * a parsable double. */ public static long parselong(string s) throws NumberFormatException; //...

// Lösning till uppgift 3 public class Factorial public static long factorial(long n) throws FactorialException if(n < 0) throw new NegativeFactorialException(); if(n <= 1) return 1; long nm1 = factorial(n-1); if(nm1 > Long.MAX_VALUE / n) throw new LargeFactorialException(); return n*nm1; // Lösning till uppgift 4 public static void main(string[] args) for(int i = 0; i < args.length; ++i) try long f = factorial(long.parselong(args[i])); System.out.println(args[i] + "! = " + f); catch(factorialexception e) System.out.println("ERROR: " + args[i] + " " + e.getmessage()); catch(numberformatexception e) System.out.println("ERROR: " + args[i] + " is not an integer.");