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 HT-16 Datavetenskap TDA143. Tentamen för TDA143 PROGRAMMERADE SYSTEM

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 till tentamen

Lösningsförslag till tentamen

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

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

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

Tentamen. Lösningsförslag

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

DAT043 Objektorienterad Programmering

Institutionen för TENTAMEN CTH VT-13 Datavetenskap TDA143. Tentamen för TDA143 PROGRAMMERADE SYSTEM DAG: TID: 8:30 13:30

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

Lösningar för tenta 3 DAT043,

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

Del A (obligatorisk för alla)

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

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

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 )

Mer om grafiska komponenter. Händelsestyrda program

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Datalogi I, grundkurs med Java 10p, 2D4112, Tentamen 29 november 2003, svar och lösningar

Lösningsförslag övning 2.

Instuderingsfrågor, del D

TENTAMEN OOP

Malmö högskola 2008/2009 CTS

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

Lösningsförslag till exempeltenta 1

Föreläsning 3. Iteration while-satsen

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

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

Lösningsförslag till tentamen FYTA11 Javaprogrammering

OOP Objekt-orienterad programmering

Malmö högskola 2007/2008 Teknik och samhälle

Föreläsning 14. Filhantering

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

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

Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material.

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

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

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

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

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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 i Objektorienterad programmering E

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

Malmö högskola 2007/2008 Teknik och samhälle

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Tentamen i Algoritmer & Datastrukturer i Java

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

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

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

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

Parallellism, återblick

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

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

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

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 3-4 Innehåll

JAVAUTVECKLING LEKTION 8

kl

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 9-10 Innehåll

Malmö högskola 2007/2008 Teknik och samhälle

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

Instuderingsfrågor, del E

Föreläsning 10. Mer om grafiska komponenter Händelsestyrda program. Layout Managers

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ösningsförslag till exempeltenta 2

Grafiska komponenter.

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

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

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

Lösningsförslag tentamen FYTA11 Java

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

TENTAMEN OOP

Algoritmer. Två gränssnitt

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

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

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

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

Mer om klasser och objekt

Rita Egna Bilder, Timer

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

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

TENTAMEN OOP

Transkript:

Uppgift 1 a) Sant. Lösningsförslag till tentamen 160819 b) Falskt. Applikationslagret skickar till transportlagret. c) Falskt. Det är en gateway som kopplar ihop två nätverk som använder olika protokoll. En router kopplar samman och dirigerar datatrafiken mellan nätverk som har samma protokoll. d) Sant. e) Falskt. Minsta värdet I ett binärt sökträd finns i noden längst till vänster, men denna behöver inte vara ett löv. Nedanståend binära sökträd är ett exempel på detta 13 9 23 10 17 24 f) Falskt. Open-source development innebär att källkoden för en programvara är öppen för vem som helst att ändra och anpassa. g) Sant. h) Falskt. Tendensen är att ha mindre team för att minska onödig byråkrati och därigenom öka produktionstakten. i) Sant. j) Falskt. Att skapa mjuka skuggor kräver mycket mer beräkningskapacitet. Uppgift 2 A B C NAND NOR E D AND F XOR G A B C D E F G 0 0 0 1 1 1 1 0 0 1 1 0 0 1 0 1 0 1 0 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 1 0 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 1 Uppgift 3 Moore s lag innebär att antalet transistorer som ryms på ett chip fördubblas var 18:e månad. Det är denna utveckling som gjort att processorkraften ökat explosionsartat samtidigt som de fysiska enheterna minskat I storlek. Tack vare Moore s lag är dagens mobiltelefoner 1000 gånger snabbare än de stordatorer som användes i NASAs Apolloprogram. Idag har majoriteten av alla svenskar en smartphone med avancerade program som de använder dagligen. Detta kulturella paradigmskifte skulle vara omöjligt utan Moore s lag.

Uppgift 4 Trojaner: Skadlig kod som gömmer sig inuti ett annat program. En trojan kan till exempel spionera på användaren, göra betalningar i användarens namn, skicka skräppost eller radera filer. Datormask: Datormaskar är bland de vanligaste av skadlig programvara, och sprider sig genom att utnyttja sårbarheten i operativsystemet. Datormaskar skadar vanligtvis användaren genom att konsumera bandbredd och att överladda webbservrar. Datormaskar kan även innehålla och exekvera kod som utför ytterligare processer utöver att sprida masken vidare. Skillnaden mot ett virus är att datormaskar har möjligheten att självreplikera och sprida sig vidare, medan virus kräver mänsklig interaktion för att spridas. Rootkit: Spyware: Ett rootik är skadlig programvara designad för att på håll ta över och kontrollera en dator utan att bli upptäckt. När ett rootkit har blivit installerat är det möjligt för den att stjäla filer, exekvera kod, modifiera mjukvara och inställningar, kontrollera datorn för att tillsammans med andra datorer överbelasta nätverk, eller andra skadliga processer. Mjukvara som spionerar på användaren utan dess tillåtelse. Programmet kan t ex registrera vilka knapptryck som användaren trycker för att luska fram lösenord, eller snoka upp data, likt bankkontoinformation. Uppgift 5 a) Tidskomplexiteten är (n 2 ). b) Tidskomplexiteten är (n 2 ). Uppgift 6 Name Quantity Halo 3 4 Farmville 8 Mass Effect 2 Oblivion 7

Uppgift 7 a) Utskriften blir: [6, 3, 3, 5, 7] b) Felet beror på att att metoden biggest är en instansmetod, men att anropet biggest anropas i main-metoden som om den vore en klassmetod. Det enklaste och naturligaste sättet att korrigera felet är att göra om metoden biggest till en klassmetod: private static int biggest( int [] vekt) { int max = vekt[0]; for (int i = 1; i < vekt.length; i = i + 1) { if (vekt[i] > max) max = vekt[i]; return max; Ett alternativt sätt att korrigera felet (som är onaturligare) är att låta metoden biggest stå kvar som en instansmetod och skapa en instans i main och anropa metoden för denna instans: c) Utskriften blir: public static void main (String[] args) { int [] v = {4, 7, 3, 11, 7, 9; Uppgift7B obj = new Uppgift7B(); System.out.println("Det största talet i fältet är " + obj.biggest(v)); x = 1, y = 10 x = 8, y = 10 d) Utskriften blir: wonderful is life Metoden mystery tar en sträng sentence och returnerar en ny sträng, vilken innehåller orden som finns i sentence i omvänd ordning.

Uppgift 8 import java.util.*; public class Student { private String name; private String programme; private ArrayList<Course> passed; public Student(String name, String programme) { this.name = name; this.programme = programme; passed = new ArrayList<Course>(); //constructor public String getname() { return name; //getname public String getprogramme() { return programme; //getprogramme public void addcourse(course c) { passed.add(c); //add public int getnrpassed() { return passed.size(); //getnrpassed public boolean haspassed(string code) { for (Course c : passed ) if (c.getcode().equals(code)) return true; return false; //hascourse public double gettotalcredits() { double res = 0; for (Course c : passed ) res = res + c.getcredits(); return res; //gettotalcredits public String tostring() { String out = name + ", " + programme + "\n"; for (Course c : passed ) out = out + c.tostring() + "\n"; return out; //tostring //Student //Förhindra att dubletter sparar public void addcourse(course c) { if (!passed..contains(c)) passed.add(c); //add Alternativa implementationer: public boolean haspassed(string code) { for (int i = 0; i < passed.size(); i = i + 1 ) if (passed.get(i).getcode().equals(code)) return true; return false; //hascourse public double gettotalcredits() { double res = 0; for (int i = 0; i < passed.size(); i++) res = res + passed.get(i).getcredits(); return res; //gettotalcredits public String tostring() { String out = name + ", " + programme + "\n"; for (int i = 0; i < passed.size(); i = i + 1) out = out + passed.get(i).tostring() + "\n"; return out; //tostring

Uppgift 9 import javax.swing.*; import java.util.*; import java.text.*; public class Calories { public static void main(string[] arg) { while(true) { String indata = JOptionPane.showInputDialog("Antalet kalorier och antalet gram fett: "); if (indata == null) break; Scanner sc = new Scanner(indata); double nrcalories = sc.nextdouble(); double gramsoffat = sc.nextdouble(); if (nrcalories < 0 gramsoffat < 0) { JOptionPane.showMessageDialog(null,"Negativa värden kan får ej ges!"); else { double caloriesfromfat = getcalories(gramsoffat); double precentagefromfat = caloriesfromfat/ nrcalories *100; if (precentagefromfat > 100) JOptionPane.showMessageDialog(null,"Felaktig indata!\n" + "Andelen fett kan inte överskrida 100%!"); else if (precentagefromfat <= 30) JOptionPane.showMessageDialog(null, String.format("%.2f", precentagefromfat) + " procent av kalorierna kommer från fett. \n" + " Kategori: GRÖN " ); else if (precentagefromfat <= 40) JOptionPane.showMessageDialog(null, String.format("%.2f", precentagefromfat) + " procent av kalorierna kommer från fett.\n" + " Kategori: GULT " ); else JOptionPane.showMessageDialog(null, String.format("%.2f", precentagefromfat) + " procent av kalorierna kommer från fett.\n" + " Kategori: RÖTT " ); //while //main public static double getcalories(double grams) { return 7.7*grams; // getcalories // Calories

Uppgift 10 a) public static void increaseaverage(int[] a, int[] b) { if (a == null b == null a.length == 0 b.length == 0 ) throw new IllegalArgumentException(); boolean success = false; for (int i = 0; i < a.length; i++) { if (a[i] < getmean(a) && a[i] > getmean(b)) { System.out.println("Move " + a[i] + " from A to B"); success = true; for (int i = 0; i < b.length; i++) { if (b[i] < getmean(b) && b[i] > getmean(a)) { System.out.println("Move " + b[i] + " from B to A"); success = true; if (!success) { System.out.println("Impossible to increase average in both groups!"); //advice private static double getmean(int[] arr) { double sum = 0; for (int i : arr) { sum = sum + i; return sum / arr.length; //getmean

b) public static int[][][] withframe(int[][][] samples, int[] color) { int framesize = samples[0].length / 10; int[][][] newsamples = new int[samples.length + 2*frameSize][samples[0].length + 2*frameSize][3]; //Kopiera den orginalbilden till den nya bilden for (int row = 0; row < samples.length; row = row + 1) { for (int col = 0; col< samples[row].length; col = col + 1) { for (int c = 0; c < 3; c = c + 1) { newsamples[row+framesize][col + framesize][c] = samples[row][col][c]; //Skapa övre och under ram for (int row = 0; row < framesize; row = row + 1) { for (int col = 0; col < newsamples[row].length; col = col + 1) { for (int c = 0; c < 3; c = c + 1) { newsamples[row][col][c] = color[c]; newsamples[newsamples.length-1 - row][col][c] = color[c]; //Skapa vänstra och högra ram for (int row = framesize; row < newsamples.length - framesize; row = row + 1) { for (int col = 0; col < framesize; col = col + 1) { for (int c = 0; c < 3; c = c + 1) { newsamples[row][col][c] = color[c]; newsamples[row][newsamples[row].length -1 -col][c] = color[c]; return newsamples; //withframe Alternativ lösning: public static int[][][] withframe(int[][][] samples, int[] color) { int framesize = (int) (0.1*samples[0].length); int[][][] newsamples = new int[samples.length + framesize][samples[0].length + 2*frameSize][3]; for (int row = 0; row < newsamples.length; row = row + 1) { for (int col = 0; col< newsamples[row].length; col = col + 1) { for (int c = 0; c < 3; c = c + 1) { if (row < framesize row >= samples.length + framesize col < framesize col >= samples[0].length + framesize) { newsamples[row][col][c] = color[c]; else { newsamples[row][col][c] = samples[row - framesize][col-framesize][c]; return newsamples; //withframe

Uppgift 11 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class CodeLock extends JFrame implements ActionListener { private NumberButton[] t = new NumberButton[5]; private int thecode = 0; public CodeLock(int thecode) { if (thecode < 0 thecode > 99999) throw new IllegalArgumentException(); this.thecode = thecode; Font font = new Font("Times", Font.PLAIN, 36); setlayout(new GridLayout(1, 5,3,3)); for (int i = 0; i < t.length; i = i + 1) { t[i] = new NumberButton(0); add(t[i]); t[i].addactionlistener(this); t[i].setbackground(color.yellow); t[i].setopaque(true); t[i].setfont(font); setdefaultcloseoperation(exit_on_close); setsize(320, 100); setvisible(true); //konstruktor public void actionperformed(actionevent e) { for (int i = 0; i < t.length; i = i + 1) { if (e.getsource() == t[i]) { t[i].add(); correctcodegiven(); // actionperformed private void correctcodegiven() { int givencode = 0; for (int i = 0; i < t.length; i = i + 1) { givencode = 10 *givencode + t[i].getnumber(); if (givencode == thecode) { for (int i = 0; i < t.length; i = i + 1) t[i].setenabled(false); //correctcodegiven // CodeLock public class Main { public static void main (String[] arg) { CodeLock k = new CodeLock(12221); //main // Main