Tentamen FYTA11 Javaprogrammering

Relevanta dokument
Lösningsförslag tentamen FYTA11 Javaprogrammering

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Tentamen FYTA11 Javaprogrammering

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Lösningsförslag FYTA11 Javaprogrammering

Lösningsförslag FYTA11 Javaprogrammering

Omentamen FYTA11 Javaprogrammering

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

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

Tentamen FYTA11 Javaprogrammering

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen FYTA11 Javaprogrammering

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

DAT043 - föreläsning 8

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

Repetition av OOP- och Javabegrepp

1 Comparator & Comparable

Tentamen, EDAA30 Programmering i Java fortsättningskurs

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

Repetition av OOP- och Javabegrepp

Interfacen Set och Map, hashtabeller

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Tentamen FYTA11 Javaprogrammering

Tentamen FYTA11 Javaprogrammering

Lösningsförslag tentamen FYTA11 Java

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

tentaplugg.nu av studenter för studenter

Samlingar Collection classes

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

Föreläsning 9 Innehåll

Recitation 4. 2-D arrays. Exceptions

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

PROGRAMMERING-Java Omtentamina

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

Lösningar för tenta 2 DAT043,

Tentamen i Objektorienterad programmering

DAT043 Objektorienterad Programmering

Lösningsförslag till tentamen FYTA11 Javaprogrammering

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

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

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

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)

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

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Arrayer (fält)

LULEÅ TEKNISKA UNIVERSITET

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

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

Algoritmer. Två gränssnitt

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

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Generisk klass med typparameter Inre klass - ListIterator

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Föreläsning 3. Stack

Övning vecka 5. Denna vecka ska vi titta pa samlingar, generics och designmönstren Decorator, Singleton och Iterator.

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

Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9

Laboration 13, Arrayer och objekt

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

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Föreläsning 3. Stack

Objektorienterad Programmering (TDDC77)

Programmering för språkteknologer II, HT2014. Rum

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

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

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

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 Objekt-orienterad programmering i Java, 5p distanskurs

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

Föreläsning 3 Innehåll

Diskutera Sortera objekt

Objektorienterad programmering i Java

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

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

Länkade strukturer. (del 2)

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

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

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

Uno Holmer, Chalmers, :17 Uno Holmer, Chalmers, :17

F4. programmeringsteknik och Matlab

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

Objektsamlingar i Java

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

TDDD78 Viktiga begrepp, del 2

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

Diskutera. Hashfunktion

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

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.

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y;

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

Tentamen OOP

Transkript:

Lunds universitet FYTA11 Institutionen för Astronomi och Teoretisk fysik HT 12 Tentamen FYTA11 Javaprogrammering Onsdag 5 december 2012, 10:15 14: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 koden. Felmeddelandet från kompilering eller körning av programmet visas direkt under raden som orsakade felet. a. b. c. d. if(arr.length = 3) System.out.println("Length is 3"); // error: cannot assign a value to final variable length JButton button; button.settext("click me!"); // error: variable button might not have been initialized public static void main(string[] args) if(args.length!= 1) System.out.println("This program requires one argument!"); System.exit(1); System.out.println("argument was: " + args[1]); // Exception in thread "main" java.lang.arrayindexoutofboundsexception: 1 int year = 60 * 60 * 24 * 365; System.out.println("medellivslängd: " + year * 80 + " sekunder"); // Fel: programmet skriver ut ett negativt tal

e. f. g. h. i. j. private String myname = "Steve"; //... public boolean ismyname(string name) return myname == name; // returnerar ibland falskt vid anrop som detta: ismyname("steve") System.out.println("pi is roughly = " + 22/7); // Skriver ut 3 i stället för 3.14... System.out.println("pi is roughly = " + 3 + Math.sqrt(0.02)); // Skriver ut 30.14... i stället för 3.14... double x, y; do x = Math.random() * 2-1; y = Math.random() * 2-1; double r2 = x * x + y * y; while(r2 < 1); // error: cannot find symbol // symbol: variable r2 Object[] v = new Object[2]; v[0] = "Something"; v[1] = 123; //... String thing = v[0]; // error: incompatible types // found : java.lang.object // required: java.lang.string public class Vehicle private String model; public Vehicle(String model) this.model = model; // I en annan fil: public class Bicycle extends Vehicle public Bicycle(String model) // error: constructor Vehicle in class Vehicle cannot be // applied to given types; this.model = model; // error: model has private access in Vehicle

Uppgift 2: Median av avrundade argument Skriv ett program som tar en uppsättning tal som argument då det startas, och skriver ut medianen av talen efter att ha avrundat vart och ett av dem till närmaste heltal. Medianen av ett udda antal tal definieras som det tal som ligger i mitten när talen sorterats. Medianen av ett jämnt antal tal är medelvärdet av de två mittersta talen (och behöver alltså inte vara ett heltal). Exempelvis skall % java Median 11.2-33.3 12.2 0 90 skriva ut talet 11 (eller 11.0), medan % java Median 11.2 12.2 0 90 skriver ut 11.5. Om något av argumenten inte är ett tal skall en varning skrivas ut men programmet får inte avbrytas utan skall försöka använda resterande argument. Om det inte finns några giltiga tal alls så skall ett felmeddelande skrivas ut. Följande metod i klassen Double kan vara bra att känna till /** 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 double parsedouble(string s) throws NumberFormatException; liksom följande metod i klassen Math public static double rint(double a) Returns the double value that is closest in value to the argument and is equal to a mathematical integer. samt några metoder i Arrays java.util public class Arrays This class contains various methods for manipulating arrays (such as sorting and searching). static void sort(double[] a) Sorts the specified array of doubles into ascending numerical order. static void sort(double[] a, int fromindex, int toindex) Sorts the specified range of the specified array of doubles into ascending numerical order. De båda varianterna av sort finns definierade för fält av alla de inbyggda taltyperna (inklusive int) och dessutom för Object. Jämförelsen av Object sker genom metoden compareto i interfacet Comparable.

Uppgift 3: Molly Malone Molly Malone går med sin kärra och säljer fisk i Dublin. Hon antecknar fisksorten och antalet vid varje försäljning, och vill sedan sammanställa informationen med hjälp av ett datorprogram. Du behöver hjälpa Molly att skriva en metod som sorterar fiskarna och summerar ihop antalet av respektive sort. I klassen FishNotes finns en inre klass FishCount som representerar en rad i Mollys anteckningar, med namnet på en fisk och antalet av den sorten. Ditt jobb är att: (a) skriva klart metoden summarize() som skall byta ut innehållet i fishcounts så som beskrivs i koden: Efter summarize() skall fiskarna vara sorterade alfabetiskt och ihopsummerade efter fisksort (8p). (b) beskriva i ord (eller med kod) hur du skulle göra för att i stället sortera fiskarna efter antal (fortfarande summerade efter sort), utifrån din lösning till (a) (2p). Det finns flera olika sätt att lösa problemet. Följande sidor ger dokumentation för några olika klasser och metoder som kan vara användbara. Minns också hur man itererar över en Collection (som t.ex. ArrayList): for(iterator<?> it = c.iterator(); it.hasnext(); )... it.next()... alternativt for(element type e : collection)... import java.util.*; public class FishNotes /** Ett par av (namn, antal) för någon sorts fisk */ public class FishCount public String fish; public int count; public FishCount() public FishCount(String f, int c) fish = f; count = c; /** Listan över sålda fiskar */ private ArrayList<FishCount> fishcounts = new ArrayList<FishCount>(); /** Lägger till en post till fisklistan */ public void addfish(string name, int count) fishcounts.add(new FishCount(name, count)); /** Sammanställer listan över fiskar så att fiskarna kommer i alfabetisk ordning och varje fisksort finns med en gång, tillsammans med totala antalet av den sorten. */ public void summarize() /** Skriver ut fisklistan */ public void print() for(fishcount fc : fishcounts) System.out.println(fc.fish + "\t" + fc.count);

Exempel: om fishcounts innehåller (Sill, 12), (Torsk, 2), (Lax, 5), (Sill, 7) före anropet till summarize så skall fishcounts efter anropet innehålla (Lax, 5), (Sill, 19), (Torsk, 2). Vissa dagar säljer Molly otroligt många fiskar så det är lämpligt att metoden inte skalar kvadratiskt (eller värre) med antalet element i fishcounts. java.util public class Collections This class consists exclusively of static methods that operate on or return collections. static <T extends Comparable<? super T>> void sort(list<t> list) Sorts the specified list into ascending order, according to the natural ordering of its elements. Elementen i listan skall alltså vara av en typ som implementerar Comparable<T> där T är typen själv eller en av dess superklasser. static <T> void sort(list<t> list, Comparator<? super T> c) Sorts the specified list according to the order induced by the specified comparator. java.lang public interface Comparable<T> // Compares this object with the specified object for order. Returns a // negative integer, zero, or a positive integer as this object is less // than, equal to, or greater than the specified object. int compareto(t o); This interface imposes a total ordering on the objects of each class that implements it. This ordering is referred to as the class s natural ordering, and the class s compareto method is referred to as its natural comparison method. Lists (and arrays) of objects that implement this interface can be sorted automatically by Collections.sort (and Arrays.sort). Objects that implement this interface can be used as keys in a sorted map or as elements in a sorted set, without the need to specify a comparator. ** Notera att String implementerar detta interface. ** java.util public interface Comparator<T> // Compares its two arguments for order. Returns a negative integer, zero, // or a positive integer as the first argument is less than, equal to, or // greater than the second. // Metoden är alltså ett alternativ till o1.compareto(o2). int compare(t o1, T o2); // Already in Object so you don t have to implement this method. boolean equals(object obj); A comparison function, which imposes a total ordering on some collection of objects. Comparators can be passed to a sort method (such as Collections.sort or Arrays.sort) to allow precise control over the sort order.

java.util public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, Serializable A Red-Black tree based NavigableMap implementation. The map is sorted according to the natural ordering of its keys, or by a Comparator provided at map creation time, depending on which constructor is used. Constructors and method: TreeMap() Constructs a new, empty tree map, using the natural ordering of its keys. All keys inserted into the map must implement the Comparable interface. boolean containskey(object key) Returns true if this map contains a mapping for the specified key. V get(object key) Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. V put(k key, V value) Associates the specified value with the specified key in this map. int size() Returns the number of key-value mappings in this map. Set<Map.Entry<K,V>> entryset() Returns a Set view of the mappings contained in this map. The set s iterator returns the entries in ascending key order. public static interface Map.Entry<K,V> A map entry (key-value pair). K getkey() Returns the key corresponding to this entry. V getvalue() Returns the value corresponding to this entry.

Uppgift 4: Partiklar i potential Du skall simulera partiklar som rör sig i en potential och påverkar varandra. För enkelhets skull antas alla partiklar ha massan 1, så acceration och kraft är ekvivalenta. Simuleringsrogrammet finns redan, men du behöver skriva kod för ditt specifika system. Allting görs i två dimensioner, och klassen Pair (se nästa sida) används för att representera både en punkt (x,y) och en kraftvektor (F x,f y ). Potentialen som du har ges av k r 1 r U(r) = k r < 1 där k är någon konstant, vilket ger accelerationen (och kraften) k r r 1 r a(r) = 3 0 r < 1 för en partikel i punkten r = (x,y). r är längden av r. (a) Implementera interfacet Potential (se nästa sida), i överensstämmelse med ekvationerna ovan. Din klass heter lämpligen MyPotential, och skall ta konstanten k som argument till sin konstruktor. (b) Potential har en metod randomposition som behövs för att kunna slumpa ut positioner på lämpliga positioner. Implementera den metoden så att den returnerar en slumpmässig position r jämnt fördelad över det område där 1 < r < 2. Kraften som verkar på en partikel i till följd av växelverkan med övriga partiklar är F i = j i och den totala energin i växelverkningarna är E = i (r i r j ) r i r j 3 j i 1 r i r j (c) Lägg till interaktioner mellan partiklarna genom att implementera interfacet InteractionPotential. De båda metoderna tar in positionerna hos samtliga partiklar. getforces returnerar krafterna från växelverkan mellan partiklarna, med en kraftvektor per partikel. getenergy returnerar den totala energin hos växelverkningarna.

/** Ett par av värden (x,y), dvs en vektor i 2 dimensioner */ public class Pair public double x; public double y; public Pair() public Pair(double xx, double yy) x = xx; y = yy; public interface Potential /** Returnerar den potentiella energin hos en partikel på den givna positionen. */ double getenergy(pair position); /** Returnerar ett Pair (en vektor (Fx,Fy)) som representerar kraften som verkar på en partikel på den givna positionen (gradienten av -energin). */ Pair getforce(pair position); /** Genererar en slumpmässig punkt i ett lämpligt område för en partikel ** att starta från i simuleringen. */ Pair randomposition(); public interface InteractionPotential /** Returnerar den totala interaktionsenergin hos en uppsättning partiklar på de givna positionerna. */ double getenergy(pair[] positions); /** Returnerar ett fält med lika många Pair som i argumentet. Argumentets Pair representerar partiklarnas koordinater och returvärdets Pair representerar de krafter som verkar på var och en av partiklarna till följd av växelverkan mellan dem. */ Pair[] getforces(pair[] positions);