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

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

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

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

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

Institutionen för TENTAMEN CTH HT-16 Datavetenskap TDA143. Tentamen för TDA143 PROGRAMMERADE SYSTEM

Lösningsförslag till tentamen

Lösningsförslag övning 2.

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

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

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

Tentamen. Lösningsförslag

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.

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 )

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

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Tentamen OOP

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Föreläsning 3. Iteration while-satsen

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

Föreläsning 9-10 Innehåll

Instuderingsfrågor, del D

Mer om grafiska komponenter. Händelsestyrda program

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

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

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

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

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

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

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

Institutionen för TENTAMEN CTH VT-17 Datavetenskap TDA143. Tentamen för TDA143 PROGRAMMERADE SYSTEM

Lösningsförslag till exempeltenta 2

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

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

Tentamen i Programmeringsteknik I, ES,

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

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

Föreläsning 5-6 Innehåll

TDDD78 Viktiga begrepp, del 2

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

Föreläsning 6. Top-Down Design Parameteröverföring

Del A (obligatorisk för alla)

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

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

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

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

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Lösningsförslag, tentamen FYTA11 Javaprogrammering

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

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

Lösningsförslag tentamen FYTA11 Java

Tentamen i Programmeringsteknik I,, KandMa/Fy,

Tentamen FYTA11 Javaprogrammering

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.

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

Iteration while-satsen

OOP Objekt-orienterad programmering

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

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

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

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

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

Lösningsförslag till tentamen FYTA11 Javaprogrammering

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

OOP Objekt-orienterad programmering

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

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

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

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

JAVAUTVECKLING LEKTION 11

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

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

Föreläsning 3-4 Innehåll

Tentamen Nätverksprogrammering Lösningsförslag

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

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 PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

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

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

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

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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

Transkript:

Uppgift 1 a) Falskt. Bitmönstret blir 10000100. b) Falskt. Fördubblingen sker var 18:e månad. Lösningsförslag till tentamen 130314 c) Sant. UDP är ett enklare protokoll än TCP. UDP har t.ex. inga funktioner för att rätta överföringsfel, TCP har. Men om man tittar på en film behöver inte varje filmruta vara helt perfekt. Hastigheten, att filmen flyter på, är viktigare en kvalitén. d) Falskt. Memory manager sköter läsning och skrivning från primärminnet. Läsning och skrivning från sekundärminnet sköts av file manager. e) Falskt, den viktigaste egenskapen är att algoritmen är korrekt. f) Falskt. Det största värdet finns i noden längst till höger i trädet. g) Sant. h) Sant. i) Sant. j) Sant Uppgift 2 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 1 1 1 1 0 1 1 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 1 Uppgift 3 En risk är att man kan bli utsatt för sabotage av olika slag, t.ex virus, maskar och trojanska hästar. När nya sådana börjar florera utvecklas snabbt olika "virusskydd". Således skall man installera virusskydd och uppdatera dessa ofta. Vanligtvis sprids virus via email varför man bör installera spamfilter samt vara försiktigt med att öppna filer som finns bifogade i email från okända avsändare. En annan risk är att råka ut för "informationsstöld". Det finns olika typer av skyddsåtgärder som kan vidtas. För att förhindra otillbörlig tillgång till information kan kryptering användas. En skyddsmekanism mot både sabotage och informationsstöld är installera en brandvägg.

Uppgift 4 -notationen används för att beskriva en algoritms tidsåtgång utan att ta hänsyn till detaljer och utan att ange tidsåtgången i absoluta mått (vilket naturligtvis är beroende av hur snabb hårdvaran är). Det som beskrivs är hur tidsåtgången växer beroende på storleken av den datamängd som algoritmen bearbetar. Man tar endast hänsyn till den "dominerande termen", dvs endast den del i algoritmen där största tidsåtgången förbrukas. Att två algoritmer tillhör samma -klass innebär att båda algoritmerna har samma tillväxthastigheten på tidsåtgången. En algoritm som har tidskomplexiteten (n 2 ) har således en tillväxt på tidsåtgången som är kvadratisk med hänseende till den bearbetade datamängdens storlek. Eftersom -notationen inte anger någon absolut tidsåtgång, kan en algoritm som tillhör en -klass med en snabb tillväxthastighet i absoluta mått kräva mindre tidsåtgång för små datamängder än en algoritm som tillhör en -klass med en långsammare tillväxthastighet. Uppgift 5 För vara konkurrentkraftiga måste företagen lansera nya produkter i allt snabbare takt. Inom mjukvaruutvecklingen pratar man ofta om need for speed, att produkterna måste utvecklas i samma hastighet som hela marknaden utvecklas, annars försvinner man snabbt. Stora team styrs ofta mer eller mindre hierarkiskt med tidsödande byråkrati. För att minska cykeltiden väljer företagen idag att arbeta i mindre team med en handfull personer som arbetar utan större kontroll ovanifrån, vilket gynnar kreativitet och fantasi. Små team, korta cykler och direkt kontakt med kunden skapar ett smidigare system. Vanliga tumregler är bland annat The Two Pizza Rule (som används på Amazon) och 3x3 persons rule (Google). Den första av dessa innebär att projektgruppen ska kunna bli mätt på 2 pizzor, och den andra innebär att 3 personer ska jobba i lag i 3 månader, för att även få variation bland kollegorna. Uppgift 6 Följande tabell erhålls: Maträtt Pris Kokt ishavstorsk med hackat ägg 139 Omelett 89 Stekt sill 79

Uppgift 7 a) Utskriften blir: 5.0 8.0 Förklaring: b) När instansen s skapas kommer dess instansvariabel d att få värdet 5.0. Vid anropet av s.foo(-2) kommer den formella parametern i att få värdet -2. Villkoret (i < 0) i if-satsen är alltså sant och en lokal variabel d skapas vilken tilldelas värdet -2 * -2 => 4. Därefter lämnas programblocket som hör till ifsatsen. I satsen return d; är det därför instansvariabeln d som avses (vilken har värdet 5.0). Vid anropet av s.foo(2) kommer den formella parametern i att få värdet 2. Villkoret (i < 0) i if-satsen är alltså falskt och instansvariabeln d tilldelas värdet 2 * 2 * 2 => 8. Därefter lämnas programblocket som hör till if-satsen och värdet av instansvariabeln d returneras (vilken har värdet 8.0). i) Utskriften blir: 3 ii) Metoden mystery tar ett heltalsfält nums och ett heltal target och returnerar längden av den längsta sammanhängande sekvensen av värdet target som finns i fältet nums. c) Utskriften blir: (3, 1, 3), (4, 3, 3) d) 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 java.lang.math finns en klassmetod sqrt(). Alla vet också att paketet java.lang inte behöver importeras. Så varför blir det då fel? Problemet är att 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. I den egna klassen finns ingen metod sqrt definierad, varför kompilatorn inte hittar metoden sqrt. För att rätta till felet kan vi således ändra namnet på den egna klassen eller specificera att det är klassen java.lang.math vi avser. Ändra namnet på klassen: 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 Specificera namnet på metoden: 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

Uppgift 8 import java.util.*; 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(); double caloriesfromfat = getcalories(gramsoffat); if (nrcalories <= 0 gramsoffat < 0) { JOptionPane.showMessageDialog(null,"Negativa värden kan får ej ges!"); else { 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 9 public class Point { private int x; private int y; public Point (int x, int y) { this.x = x; this.y = y; //constructor public int getx () { return x; //getx public int gety () { return y; //gety public Point translate(int dx, int dy) { return new Point(x + dx, y +dy); //translate public double distance(point p) { return Math.sqrt(Math.pow(x-p.x, 2) + Math.pow(y-p.y, 2)); //distance public boolean hassamevalue(point p) { return (x == p.x && y == p.y); // hassamevalue public String tostring() { return "(" + x + ", " + y + ")"; //tostring //Point

Uppgift 10 a) b) public static double[] smooth(double[] vekt) { double[] res = new double[vekt.length]; res[0] = vekt[0]; for (int i = 1; i < vekt.length -1; i = i + 1) { double value = (vekt[i-1] + vekt[i] + vekt[i+1]) / 3; res[i] = value; res[vekt.length-1] = vekt[vekt.length-1]; return res; //smooth public static int[][][] hidemessage(int[][][] sample, String msg) { int[][][] newsample = new int[sample.length][sample[0].length][3]; int nrofletters = 0; for (int x = 0; x < newsample.length; x = x + 1) { for (int y = 0; y < newsample[x].length; y = y + 1) { if (nrofletters < msg.length()) { char ch = msg.charat(nrofletters); nrofletters = nrofletters + 1; int ascii = (int) ch; int r = ascii / 100; int g = ascii / 10 % 10; int b = ascii % 10; newsample[x][y][0] = 10 * (sample[x][y][0] / 10) + r; newsample[x][y][1] = 10 * (sample[x][y][1] / 10) + g; newsample[x][y][2] = 10 * (sample[x][y][2] / 10) + b; else for (int i = 0; i < 3; i++) newsample[x][y][i] = sample[x][y][i]; return newsample; //hidemessage

Uppgift 11 import java.awt.*; import java.awt.event.*; public class CodeLock extends JFrame implements ActionListener { private NumberButton[] t = new NumberButton[5]; private int thecode = 0; public CodeLock!v(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 public static void main (String[] arg) { CodeLock k = new CodeLock(12221); //main // CodeLock