Lösningsförslag till tentamen

Relevanta dokument
Lösningsförslag till tentamen

Lösningsförslag till tentamen

Lösningsförslag till tentamen

Lösningsförslag till tentamen

Lösningsförslag till tentamen

Institutionen för TENTAMEN CTH VT-14 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

Lösningsförslag till tentamen

Lösningsförslag till tentamen

Lösningsförslag till tentamen

Lösningsförslag till tentamen

Lösningsförslag till tentamen

Lösningsförslag till tentamen

Lösningsförslag till tentamen

Lösningsförslag: Instuderingsfrågor, del A

OOP Objekt-orienterad programmering

Föreläsning 3. Iteration while-satsen

Föreläsning 3. Iteration. while-satsen for-satsen do-satsen

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

OOP Objekt-orienterad programmering

Lösningsförslag till tentamen

Iteration. Föreläsning 3. TDA540 - Objektorienterad Programmering

OOP Objekt-orienterad programmering

Objektorienterad programmering

Lösningsförslag till tentamen

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

Föreläsning 7. for-satsen Fält

lgammal2.txt // Lösningar till gammal tentamen // Uppgift 1 a

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

Iteration while-satsen

Föreläsning 3-4 Innehåll

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

F4. programmeringsteknik och Matlab

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

Lösningsförslag övning 2.

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Tentamen OOP

TENTAMEN OOP

OOP Objekt-orienterad programmering

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

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

Tentamen. Lösningsförslag

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

Föreläsning 3. Föreläsning 3. Iteration. while-satsen for-satsen do-satsen. while-satsen. do-satsen. Datatypen double

Institutionen för TENTAMEN CTH HT-14 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

Parallellism, återblick

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

Lösningsförslag: Instuderingsfrågor, del D

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

Lösningsförslag tentamen FYTA11 Java

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.

Del A (obligatorisk för alla)

JAVAUTVECKLING LEKTION 7

Laboration 13, Arrayer och objekt

Lösningsförslag, tentamen FYTA11 Javaprogrammering

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Föreläsning 3. Föreläsning 3

Föreläsning 3. Föreläsning 3

Föreläsning 8. Klassen String Mer om fält Klassen ArrayList

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

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

DAT043 Objektorienterad Programmering

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

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

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

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

Tentamen FYTA11 Javaprogrammering

Lösningar för tenta 3 DAT043,

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Skillnader mellan Python och Java

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

TENTAMEN OOP

Föreläsning 3: Händelsestyrda program och användargränssnitt

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

TENTAMEN OOP

Kort om klasser och objekt En introduktion till GUI-programmering i Java

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

Tentamen , Introduktion till Java, dtaa98, dtea53

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

OOP Objekt-orienterad programmering

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

Föreläsning REPETITION & EXTENTA

Föreläsning 2. Primitiva datatyper Selektering

ITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius

Tentamen FYTA11 Javaprogrammering

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

Laboration 24 Databasen MySQL och java

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

OOP Objekt-orienterad programmering

JAVAUTVECKLING LEKTION 4

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

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

Typkonvertering. Java versus C

Lösningsförslag till tentamen

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

Malmö högskola 2008/2009 CTS

Objektorienterad Programmering (TDDC77)

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

Objektorienterad Programmering (TDDC77)

Transkript:

Uppgift 1 Lösningsförslag till tentamen 140423 a) Vad kompilatorn klagar på är att metoden Math.sqrt() inte finns! Detta kan ju verka något mystiskt eftersom vi alla vet att det i klassen Math finns en klassmetod sqrt(). Alla vet också att klassen Math finns i paketet java.lang och att detta paket inte behöver importeras. Så varför blir det då fel? Jo, problemet är att också den egna klassen heter Math!! Vid namngivning i Java gäller närhetsregeln, därför avser Math i anropet Math.sqrt(tal) den egna klassen Math och inte java.lang.math. Kompilatorn har givetvis rätt, i den egna klassen finns ingen metod sqrt definierad. För att rätta till felet skall vi således specificera att det är klassen java.lang.math vi avser: import javax.swing.*; public class Math { public static void main (String[] arg) { String indata = JOptionPane.showInputDialog("Ange ett tal: "); double tal = Double.parseDouble(indata); double root = java.lang.math.sqrt(tal); JOptionPane.showMessageDialog(null, "Roten ur talet " + tal + " är " + root); //main //Math Vi skulle också kunna ändra namnet på den egna klassen: import javax.swing.*; public class AnOtherMath { public static void main (String[] arg) { String indata = JOptionPane.showInputDialog("Ange ett tal: "); double tal = Double.parseDouble(indata); double root = Math.sqrt(tal); JOptionPane.showMessageDialog(null, "Roten ur talet " + tal + " är " + root); //main //AnOtherMath Uppgiften var dock formulerad på så sätt att förändringarna skulle göras i filen Main.java, dvs. den egna klassen får inte döpas om. b) Den styrande variabeln index i for-satsen löper till och värdet vekt.length -1, vilket är index för det sista elementet i fältet vekt. Inuti for-satsen refereras dock till fältelement vekt[index+1]. for-satsen löper helt enkelt ett varv för mycket. En korrekt version av metoden skall ha följande utseende: public static boolean sorted(int[] vekt){ boolean okey = true ; for (int index = 0; index < vekt.length - 1; index = index + 1) if (vekt[index] > vekt[index+1]) okey = false ; return okey; //sorted c) Metoden nextint är en instansmetod och inte en statisk metod, därför är anropet Random.nextInt(10) felaktigt. Vi måste skapa en instans av Random och anropa denna instans: public static void main (String[] arg) { Random rand = new Random(); for (int i = 1; i <= 100; i = i + 1) { int val = rand.nextint(10) + 1; System.out.println("Random number between 1 and 10 is " + val); //main

Uppgift 2 Lösning med användning av dialogrutor: while (true) { String indata = JOptionPane.showInputDialog("Ange lånat belopp, antal år och ränta : "); if (indata == null) Scanner sc = new Scanner(indata); double loan = sc.nextdouble(); int years = sc.nextint(); double rate = sc.nextdouble(); if (loan <= 0 years <= 0 rate <= 0) JOptionPane.showMessageDialog(null, "Felaktig indata! Försök igen!"); else JOptionPane.showMessageDialog(null, "Månatlig kostnad blir: " + String.format("%.0f kronor.", calculatepayment(loan, rate, years))); //main Lösning med användning av System.in och System.out och String.format: import java.util.*; public class Mortgage { Scanner console = new Scanner(System.in); while (true) { System.out.print("Ange lånat belopp, antal år och ränta : "); if (!console.hasnext()) double loan = console.nextdouble(); int years = console.nextint(); double rate = console.nextdouble(); if (loan <= 0 years <= 0 rate <= 0) System.out.println( "Felaktig indata! Försök igen!"); else System.out.println("Månatlig kostnad blir: " + (int) calculatepayment(loan, rate, years) + " kronor."); //main private static double calculatepayment(double loan, double rate, int years) { int n = 12 * years; double c = rate / 12.0 / 100.0; return loan * c * Math.pow(1 + c, n) / (Math.pow(1 + c, n) - 1); //calculatepayment //Mortgage

Uppgift 3 public static boolean verifycreditcardchecksum(int[] digits) { int sum = 0; for (int i = 0; i < digits.length; i = i + 1) { if (i % 2 == 0) { int value = digits[i] * 2; sum = sum + value / 10 + value % 10; else { sum = sum + digits[i]; return sum % 10 == 0; // verifycreditcardchecksum Alternativ lösning med användning av hjälpmetoder: public static boolean verifycreditcardchecksum(int[] digits) { int[] doubledvalues = doubleevenindices(digits); int[] summeddigits = sumdigits(doubledvalues); return sum(summeddigits) % 10 == 0; // verifycreditcardchecksum private static int[] doubleevenindices(int[] digits) { int[] doubledvalues = new int[digits.length]; for (int i = 0; i < digits.length; i = i + 1) { if (i % 2 == 0) doubledvalues[i] = digits[i] * 2; else doubledvalues[i] = digits[i]; return doubledvalues; // doubleevenindices private static int[] sumdigits(int[] digits) { int[] summeddigits = new int[digits.length]; for (int i = 0; i < digits.length; i = i + 1) { summeddigits[i] = digits[i]; return summeddigits; // sumdigits private static int sum(int[] array) { int accumulate = 0; for (int i = 0; i < array.length; i++) { accumulate += array[i]; return accumulate; //sum

Uppgift 4 public class Uppgift4 { public static int[][][] fourcopies(int[][][] samples) { int[][][] newsamples = new int[samples.length][samples[0].length][3]; for (int row = 0; row < samples.length/2; row++) { for (int col = 0; col < samples[row].length/2; col++) { for (int i = 0; i < 3; i = i + 1) { int value = mean(samples, row, col, i); newsamples[row][col][i] = value; newsamples[row+samples.length/2][col][i] = value; newsamples[row][col + samples[row].length/2][i] = value; newsamples[row + samples.length/2][col + samples[row].length/2][i] = value; return newsamples; //fourcopies public static int mean(int[][][] samples, int row, int col, int color) { int sum = samples[2*row][2*col][color] + samples[2*row][2*col + 1][color] + samples[2*row + 1][2*col][color] + samples[2*row + 1][2*col + 1][color]; return (int) (sum / 4.0); //mean //Uppgift4

Uppgift 5 a) b) import java.util.random; public class LCRDice { private final Random rand = new Random(); private final String[] symbols = {"L", "C", "R", ".", ".", "."; public String roll() { int i = rand.nextint(5); return symbols[i]; private Player getplayerleft() { int i = players.indexof(actual); return players.get((i + 1) % players.size()); private Player getplayerright() { int i = players.indexof(actual); if (i == 0) { i = players.size(); return players.get(i - 1); c) private int getnrolls() { int nchip = actual.getnchips(); if (nchip >= 3) { return 3; else { return nchip; public boolean gameover() { int count = 0; for (Player p : players) { if (p.getnchips() > 0) { count++; return count == 1;

d) e) public void roll() { result.clear(); for (int i = 0; i < getnrolls(); i++) { result.add(dice.roll()); for (String s : result) { switch (s) { case "L": actual.removechip(); getplayerleft().addchip(); case "C": actual.removechip(); case "R": actual.removechip(); getplayerright().addchip(); case ".": // Do nothing actual = getplayerleft(); //roll boolean done = false; List<Player> players = Arrays.asList(new Player("Pelle", 3), new Player("Fia", 3), new Player("Sven", 3)); LCRGame lcr = new LCRGame(players, new LCRDice()); lcr.start(); System.out.println("LCR started"); System.out.print("Players are "); dump(lcr); Scanner s = new Scanner(System.in); while (!done) { System.out.println("Player is " + lcr.getactualplayer()); System.out.print("> "); String cmd = s.nextline(); switch (cmd) { case "r": lcr.roll(); dump(lcr); if (lcr.gameover()){ done = true; case "q": done = true; default: System.out.println("?"); if (lcr.gameover()) { System.out.println("Game over! Winner is " + lcr.getactualplayer()); else { dump(lcr); System.out.println("Game aborted");

Uppgift 6 import java.awt.gridlayout; import javax.swing.jframe; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jbutton; import javax.swing.jlabel; public class MainFrame extends JFrame implements ActionListener { private final JButton start = new JButton("Start"); private final JButton stop = new JButton("Stop"); private final JLabel result = new JLabel("Result"); public MainFrame() { this.setlayout(new GridLayout(3, 1)); this.settitle("reaction tester"); this.add(start); this.add(stop); stop.setenabled(false); this.add(result); start.addactionlistener(this); stop.addactionlistener(this); this.setsize(250, 150); private long time; @Override public void actionperformed(actionevent e) { if (e.getsource() == start) { start.setenabled(false); stop.setenabled(true); time = System.currentTimeMillis(); else if (e.getsource() == stop){ start.setenabled(true); stop.setenabled(false); time = System.currentTimeMillis() - time; result.settext("result = " + String.valueOf(time) + " : ms"); new MainFrame().setVisible(true);