Tentamen FYTA11 Javaprogrammering

Relevanta dokument
Lösningsförslag FYTA11 Javaprogrammering

Tentamen FYTA11 Javaprogrammering

Tentamen FYTA11 Javaprogrammering

Lösningsförslag, tentamen FYTA11 Javaprogrammering

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

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

Lösningsförslag tentamen FYTA11 Java

TENTAMEN OOP

OOP Tentamen

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

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 FYTA11 Javaprogrammering

Tentamen FYTA11 Javaprogrammering

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

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

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

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

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

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

Del A (obligatorisk för alla)

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 OOP

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

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

PROGRAMMERING-Java TENTAMINA

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 FYTA11 Javaprogrammering

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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

Föreläsning 5-6 Innehåll

tentaplugg.nu av studenter för studenter

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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 PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Del A (obligatorisk för alla)

Monday, November 16, Senaste Labben

Föreläsning 2, vecka 8: Repetition

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 Programmeringsteknik I

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

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

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

Exempel: Exempel: Exempel: Exempel: $djur=array("ko","katt","älg"); foreach ($djur as $d) { echo $d. " "; } Resultat. ko katt älg

OOP Objekt-orienterad programmering

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Tentamen OOP

PROGRAMMERING-Java Omtentamina

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

OOP Tenta

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

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

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

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

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

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

Tentamen ID1004 Objektorienterad programmering April 7, 2015

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

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.

Föreläsning 3-4 Innehåll

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

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

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.

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

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

Tentamen i Programmeringsteknik I, ES,

Lösningsförslag till exempeltenta 2

TDDD78 Viktiga begrepp, del 2

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

Tentamen i Objektorienterad programmering

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

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Lösningsförslag till tentamen FYTA11 Javaprogrammering

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

F4. programmeringsteknik och Matlab

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

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

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

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

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Tentamen. Lösningsförslag

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

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

Laboration A Objektsamlingar

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

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

Classes och Interfaces, Objects och References, Initialization

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

Transkript:

Lunds universitet FYTA11 Institutionen för Astronomi och Teoretisk fysik HT 14 Tentamen FYTA11 Javaprogrammering Fredag 19 december 2014, 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/efter koden. a. b. c. for(int i = 0, i < 10, ++i) //... // error: ; expected // error: illegal start of type // error: illegal start of expression int steps; while(!done()) steps++; // error: variable steps might not have been initialized public print(string s) System.out.println("output: " + s); // error: invalid method declaration; return type required

d. e. f. g. h. i. j. for(int i = 0; i < args.length(); ++i) System.out.println(args[i]); // error: cannot find symbol // symbol: method length() switch((int)2. * Math.random()) /*... */ // error: possible loss of precision switch( /* enligt ovan */ ) case 0: foo(); case 1: bar(); // fel vid körning: anropar ibland både foo och bar public class MyListener extends ActionListener /*... */ // error: no interface expected here ArrayList<String> doubles = new ArrayList<String>; // error: ( or [ expected List<double> doubles; // error: unexpected type // required: reference // found: double for(int i = 0; i < 10; i++) if(i % 2 == 0) for(int j = 0; i < j; j++) if(j % 2 == 0) System.out.println(i + " " + j); // Should print pairs of odd numbers, prints nothing

Uppgift 2: Finna orden I en rektangel full av bokstäver gömmer sig ett antal ord, vågrätt (från vänster) eller lodrätt (uppifrån). Du får en lista på ord och skall avgöra hur många av dem som står att finna i rektangeln. Ett exempel är detta: KNÄCKA OÖJULJ LTSCOU AMUSTL DADELF Antag att du fått en lista med de sju orden NÖT, JUL, KNÄCK, DADEL, MUST, KOLA och GRAN. Rätt svar är 6, för alla ord utom GRAN finns med. Din uppgift är att skriva en metod för att räkna hur många av orden som finns i rektangeln. Metoden skall ha följande signatur: int countwords(arraylist<string> rect, ArrayList<String> words) där rect i exemplet skulle innehålla strängarna "KNÄCKA", "OÖJULJ" och så vidare, och words skulle innehålla "NÖT", "JUL" och så vidare. Du kan förutsätta att alla strängar i rect är lika långa, och att rect innehåller minst ett tecken. Notera att ett ord kan finnas med flera gånger i rektangeln men frågan är hur många av orden som alls finns med. I klassen String finns ett antal potentiellt användbara metoder. Ett urval listas på bifogat blad. De grundläggande metoderna i ArrayList<T> bör du minnas: size(), get(int index) och add(t t).

Uppgift 3: Kaniner som skuttar Det skall skrivas ett program som simulerar kaniner som skuttar runt på ett fält, äter gräs, får ungar och dör. För enkelhets skull anses kaniner kunna föröka sig genom delning. Antag att ramverket för simuleringarna är färdigt och det som återstår är att skriva en klass som beskriver kaniner. Du har fått en abstrakt klass Animal som din kaninklass skall ärva från (se nästa sida). För att hantera slumptal på ett bra sätt så skall du skapa en klass AnimalSimulation vars instanser äger en slumptalsgenerator av typen java.util.random. I klassen AnimalSimulation lägger du din kaninklass Rabbit som en inre klass. Konstruktorn till Rabbit skall ta ett argument: djurets initiala energi som Animal behöver veta. Varje kanin har en ålder, ett heltal som Rabbit måste hålla reda på. Åldern för en ny kanin är 0. Metoden divisionenergy returnerar den insamlade energi som behövs för delning av en kanin. Låt denna modellparameter ha värdet 20. Metoden choosemove är den huvudsakliga metoden här. Dess uppgift är att bestämma i vilken riktning kaninen skall försöka flytta sig. Metoden är också ansvarig för att öka kaninens ålder med ett vid varje anrop. Om åldern når 50 skall choosemove returnera konstanten DEATH för att meddela att kaninen skall dö. I annat fall väljer choosemove en riktning baserat på mängden mat i den närmaste omgivningen. Världen är ett rutnät och mängden mat i de närmaste rutorna skickas som argument till choosemove så som beskrivs i kommentaren i koden. Det finns fyra möjliga riktningar (NORTH, SOUTH, EAST, WEST) att att gå i, och kaninen skall bedöma vilken av dessa riktningar som är bäst. Varje riktning poängsätts enligt följande: poängen för en riktning är dubbla mängden mat på rutan i den riktningen, plus mängden mat på den av de båda angränsande (diagonala) rutor det finns mest på. (Det finns ingen mat på den ruta där djuret redan står.) Exempel: Mat Poäng 4 2 3 8 3 * 0 10 * 3 1 0 1 1 I det här fallet skall kaninen alltså gå västerut för att 2 3+max(4,1) = 10 är mer än poängen för någon av de andra rutorna. Om det inte finns en entydigt bästa riktning så blir kaninen förvirrad och väljer en av de fyra riktningarna slumpmässigt med hjälp av Random-objektet. (Det kan vara bra att minnas att nextint(int n) ger ett heltal mindre än n.)

public abstract class Animal /** Possible moves: directions and death. */ public static final int NORTH = 0, SOUTH = 1, EAST = 2, WEST = 3, DEATH = 4; public Animal(int energy) this.energy = energy; /** Chooses a direction to move in. @param food a 3x3 array with the amount of food in the squares around this animal. The animal is at [y=1][x=1]. North is [0][1], south is [2][1], west is [1][0] and east is [1][2]. @return one of the possible directions, or death. */ public abstract int choosemove(int[][] food); /** The amount of energy needed for spawning offspring. */ protected abstract int divisionenergy(); /** increases the animal s energy level */ public void addenergy(int e) energy += e; /** returns the animal s current energy level */ public int getenergy() return energy; /** Returns true and sets energy to 0 if spawning offspring is possible */ public boolean spawnifpossible() if(energy >= divisionenergy()) energy = 0; return true; return false; // Current energy private int energy;

Uppgift 4: Kaninerna skuttar vidare I denna uppgift skall du skriva färdigt programmet som simulerar kaninerna i föregående uppgift. Du får klassen AnimalSimulation som antas innehålla en fungerande implementation av klassen Rabbit. Se efterföljande två sidor. Klassen har instansvariabler för brädets storlek (width, height), vilka djur som finns på brädets rutor (animals), hur mycket mat det finns på rutorna (food) och totala antalet djur (population). Det finns en konstruktor som initierar alla instansvariabler och slumpar ut djur på brädet. Brädet har periodiska randvillkor. Metoderna xwrap och ywrap korrigerar koordinater som är negativa eller för höga, så att de hamnar inom de tillåtna intervallen. Metoden getfoodcontext använder dessa metoder när den hämtar ut information från brädet till 3x3-arrayen som skall skickas Animal.chooseMove. Det finns också metoder för att fylla på mat på brädet (updatefood) och exekvera ett tidssteg i simuleringen (oneround). Det som saknas är innehållet i metoden moveone. Denna metod skall du skriva, och den skall göra följande (som också beskrivs i kommentar i koden): 1. Först kolla så att det finns några djur att flytta. 2. Slumpa fram en position som faktiskt innehåller ett djur. 3. Anropa Animal.chooseMove med information om den lokala tillgången till mat. 4. Om djuret skall dö så skall det tas bort från brädet. 5. Annars räkna ut koordinater för den ruta djuret vill gå till. (Glöm inte att ta hänsyn till de periodiska randvillkoren; använd xwrap och ywrap.) 6. Gör inget mer om destinationsrutan är upptagen. 7. Flytta djuret till destinationsrutan. 8. Ge djuret all mat/energi som finns på destinationsrutan. (Glöm inte att ta bort maten från brädet.) 9. Om djuret har energi nog till att dela sig, skapa en ny Rabbit på rutan som djuret just kom gående från. (Det är fult att vi skapar en ny Rabbit när koden i övrigt klarar djur av andra sorter men en snygg lösning skulle kräva mer kod.)

public class AnimalSimulation private java.util.random rand = new java.util.random(); // Rabbit class goes here public AnimalSimulation(int h, int w, double popdensity) height = h; width = w; food = new int[h][w]; animals = new Animal[h][w]; for(int y = 0; y < h; ++y) for(int x = 0; x < w; ++x) if(rand.nextdouble() < popdensity) animals[y][x] = new Rabbit(0); ++population; // Returns x with periodic boundary conditions private int xwrap(int x) return (x + width) % width; // Returns y with periodic boundary conditions private int ywrap(int y) return (y + height) % height; private int[][] getfoodcontext(int y, int x) int[][] fc = new int[3][3]; for(int dx = -1; dx <= 1; ++dx) for(int dy = -1; dy <= 1; ++dy) int ny = ywrap(y + dy); int nx = xwrap(x + dx); fc[dy + 1][dx + 1] = food[ny][nx]; return fc;

private void updatefood() for(int y = 0; y < height; ++y) for(int x = 0; x < width; ++x) if(animals[y][x] == null) food[y][x]++; public void moveone() // To be implemented: // Return if no animals // Draw a random position that has an animal // Get local food context // Choose move for animal // Check for death // Find destination coordinates // Move if unoccupied destination square // Take all energy from destination square // If able to spawn, spawn new Rabbit at source position public void oneround() updatefood(); int pop = population; for(int i = 0; i < pop; ++i) moveone(); public static void main(string[] s) AnimalSimulation sim = new AnimalSimulation(100, 100,.6); for(int i = 0; i < 1000; ++i) sim.oneround(); System.out.println(i + "\t" + sim.population); int population = 0; // non-null elements in animals array int height, width; // size of the board int[][] food; // amount of food/energy, food[y][x] Animal[][] animals; // Animal at position [y][x], or null.