L SNINGSF RSLAG TILL TENTAMEN PROGRAMMERING I JAVA, 5P

Relevanta dokument
L SNINGSF RSLAG TILL TENTAMEN PROGRAMMERING I JAVA, 5P

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Kapitel 6. Kapitel 6. Hakparenteser fšr att ange index float[] priser = new float[500]; frekvens[4] boolean[] flaggor;

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Heltalsrepresentation. Fler byggstenar. Overflow och Underflow. TvŒ-komplement. FlyttalsvŠrden. Fyra heltalstyper. Tecken-bit

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto

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

l uppgiftsformulering l algoritmkonstruktion l verifikation l kodning l testning och avlusning l validering l dokumentering l underhœll Kapitel 2

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Objekt och klasser - Introduktion. Objekt. Spar_Konto 2. Spar_Konto 1. Konton. Ett objekt har: Ett bankkonto. public void uttag(double belopp)

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

DAT043 Objektorienterad Programmering

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

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

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

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

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

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

Den som bara har en hammare tror att alla problem är spikar

Föreläsning 9-10 Innehåll

2D1342 Programkonstruktion för F1, ht 2006

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

Tentamen OOP

OOP Objekt-orienterad programmering

Tentamen. Lösningsförslag

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

Föreläsning 3-4 Innehåll

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

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert AWT. Paket för hantering av grafik

Newtons metod i en och flera variabler

Tentamen i Objektorienterad programmering E

DELPROV 1 I DATAVETENSKAP

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

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

Parallellism, återblick

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

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

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

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

Instuderingsfrågor, del E

Laboration 13, Arrayer och objekt

Föreläsning 2, vecka 8: Repetition

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

TENTAMEN OOP

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

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

Lösningsförslag tentamen FYTA11 Java

Tentamen i Programmeringsteknik MN

Instuderingsfrågor, del D

Föreläsning 10. ADT:er och datastrukturer

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Föreläsning REPETITION & EXTENTA

Tentamen i Programmeringsteknik MN

Chapter 4: Writing Classes/ Att skriva egna klasser.

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

Mer om grafiska komponenter. Händelsestyrda program

JAVAUTVECKLING LEKTION 4

TDDC77 Objektorienterad Programmering

Tentamen , Grundläggande programmering i Java

JAVAUTVECKLING LEKTION 8

Lösningsförslag till tentamen

Dugga i Grundläggande programmering STS, åk

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

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

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

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

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

Föreläsning 3: Booleans, if, switch

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

Objektorienterad programmering i Java

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

Tentamen i Objektorienterad programmering E

Typkonvertering. Java versus C

LÖSNINGSFÖRSLAG TILL TENTAMEN PROGRAMMERINGSMETODIK MOM2 - JAVA, 4P.

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

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING

Laboration 24 Databasen MySQL och java

Tentamen i Programmering

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

Lšneadministration Handbok

Algoritmer. Två gränssnitt

DatortillŠmpningar. Det har hšnt nœgot!

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

Lösningar för tenta 3 DAT043,

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

Saker du ska kunna Föreläsning 13 & 14

Tentamen. Grundläggande programmering i Java A 5p, DTAA

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

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Föreläsning 2. Länkad lista och iterator

Transkript:

UME UNIVERSITET Datavetenskap 990824 Uppgift 1 (1+3=4 pošng) L SNINGSF RSLAG TILL TENTAMEN PROGRAMMERING I JAVA, 5P. 990824 Varje java-applikation mœste innehœlla fšljande metod: public static void main(string args[]) É a) varfšr? Fšrklara kortfattat! Alla Java-applikationer mœste ha en main-metod, denna metod exekveras automatiskt av systemet, dvs. hšr startar exekveringen av applikationen. b) vad betyder respektive public, static, void, main, String och args[] i detta sammanhang? public static void main String args innebšr att metoden kan nœs av alla, dvs Šven utanfšr den egna klassen och det egna paketet metoden kan anropas utan att det finns ett objekt instantierat av denna klass metoden returnerar inget všrde metodens namn, i detta fall den metod som automatisk anropas nšr applikationen startar datatyp pœ den efterfšljande parametern parameter som hšr Šr ett fšlt och kommer att innehœlla ev. "in-line commands" som ges vid exekveringskommandot. Uppgift 2 ( 2+1+1=4 pošng) a) TŠnk dig att du vill skriva ut talen 0.1, 0.2 É 1.0 Varfšr Šr det olšmpligt att gšra sœ hšr? Hur bšr man gšra? float y; for ( y = 0.1; y!= 1.0; y = y + 0.1 ) System.out.println( y ); Det Šr inte sškert att 0.1 + 0.1 É + 0.1 blir exakt lika med 1.0, pœ grund av problem att representera flyttal internt i datorn. Det Šr bšttre att anvšnda heltal: UME UNIVERSITETÊ901Ê87ÊÊUME ÊÊÊTel.:Ê090-786 77 08ÊÊÊFax: 090-786Ê61Ê26ÊÊÊe-mail:Êmarie@cs.umu.se

Hur bšr man gšra? for ( int i = 1; i <= 10; i++ ) System.out.println( i / 10.0 ); b) Varfšr fungerar inte fšljande kodavsnitt som programmeraren tšnkt (dvs. škar pœ x till všrdet 11? ) int x = 1; while ( x <= 10 ); x++; While-loopen Šr tom pga. ett semikolon fšr mycket. c) Vad hšnder nšr fšljande program kšrs? class Uppgift public static void main(string args[]) int b[] = new int[ 10 ]; for ( int i = b.length; i >= 0; i-- ) b [ i ] = i + 2; // main //class Uppgift Det blir IndexOutOfBoundsException fšrsta gœngen for-satsen exekveras, eftersom b.length() ger resultatet 10, och hšgsta tillœtna index Šr 9. Uppgift 3 ( 5 pošng) Skriv en metod som sorterar ett fšlt med heltal (datatypen int). FŠltet skall kunna vara av godtycklig lšngd. Du fœr anvšnda vilken sorteringsmetod du vill, prestanda Šr inte viktigt hšr. Det skall gœ att sortera i stigande eller fallande ordning. Metoden skall kunna anropas pœ fšljande sštt: int [] data = 5, 3, -1, 23, 456, 34, -11 ; boolean stigande = true; data = sortera(data, stigande); public static int[] sortera ( int[] data, boolean uppat) //Sortera stigande och kasta om efteråt om det ska vara fallande int sistaindex=data.length-1; boolean bytt=true; //Sortera med bubble-sort //När listan passerats en gång utan byten är den sorterad while (bytt) bytt = false; for ( int i = 0; i <= sistaindex-1; i++) if (data[i] > data[i + 1]) int temp = data[i]; //Byt plats data[i] = data[i + 1]; 2 (7)

data[i + 1] = temp; bytt = true; sistaindex--; //så länge ett byte skett if (!uppat) for ( int i = 0; i <= (data.length-1)/2; i++) //första halvan av fältet int temp = data[i]; //Byt plats data[i] = data[data.length-i-1]; // motsvarande från höger data[data.length-i-1] = temp; //fallande return data; //sortera Uppgift 4 ( 2+2+5=9 pošng) I uppgift 3 var utgœngspunkten att elementens datatyp var kšnd. Nackdelen med detta Šr att man dœ mœste ha en sorteringsmetod fšr varje elementtyp. I Java kan man lšsa detta genom att anvšnda ett interface. HŠr skulle det t.ex. kunna vara : interface Sortable public boolean greaterthan( Sortable item ); a) AnvŠnd interfacet Sortable och modifiera din sorteringsmetod frœn fšregœende uppgift (eller skriv en ny) sœ att den kan sortera ett fšlt dšr elementen har godtycklig datatyp. public static Sortable[] sortera ( Sortable data[], boolean uppat) //Sortera stigande och kasta om efteråt om det ska vara fallande int sistaindex=data.length-1; boolean bytt=true; while (bytt) bytt = false; for ( int i = 0; i <= sistaindex-1; i++) if ((data[i].greaterthan(data[i + 1]))) Sortable temp = data[i]; //Byt plats data[i] = data[i + 1]; data[i + 1] = temp; bytt = true; sistaindex--; //så länge ett byte skett if (!uppat) //Låt elementen byta plats for ( int i = 0; i <= (data.length-1)/2; i++) //första halvan av fältet 3 (7)

Sortable temp = data[i]; //Byt plats data[i] = data[data.length-i-1]; // motsvarande från höger data[data.length-i-1] = temp; //fallande return data; //sortera b) UtgŒ nu frœn fšljande klasser och modifiera dem sœ att de gœr att sortera med sorteringsmetoden i deluppgift a). class Bil implements Sortable int vikt; public Bil(int v) vikt = v; public boolean greaterthan( Sortable item ) return vikt > ((Bil)item).vikt; //Bil class Tenta implements Sortable int poäng; public Tenta (int p) poäng = p; public boolean greaterthan( Sortable item ) return poäng > ((Tenta)item).poäng; //Tenta c) Skriv en komplett applikation som slumpar 20 bilar och 20 tentamensresultat och dšrefter sorterar public class Sorteringstest static Bil[] bilfält; static Tenta[] tentafält; public static void main( String args[] ) bilfält = new Bil[20]; tentafält = new Tenta[20]; for (int i = 0; i < 20; i++) bilfält[i] = new Bil((int)(1000 + 1000 * Math.random()) ); tentafält[i] = new Tenta( (int)(40 * Math.random()) ); //for bilfält = sortera( bilfält, true ); tentafält = sortera( tentafält, false ); //main // Sorteringstest 4 (7)

Uppgift 5 ( 3 pošng) Fšljande metod dividerar tvœ heltal med varandra, och returnerar heltalsdelen av resultatet. TyvŠrr fungerar metoden inte sœ bra om divisorn Šr noll. Utnyttja mšjligheten att gšra ÓexceptionsÓ och modifiera metoden sœ att detta problem fšrsvinner. Du bestšmmer dig fšr att returnera 0 om divisorn Šr 0. (Du fœr alltsœ inte anvšnda if, while, case, do eller?-operatorn.) public int dividera( int dividend, int divisor ) int resultat; resultat = dividend / divisor; return resultat; //metod dividera public int dividera( int dividend, int divisor ) int resultat; try resultat = dividend / divisor; catch (DivideByZeroException e) resultat = 0; return resultat; Uppgift 6 ( 3+2=5 pošng) Class Bild private int[][] pixels; //bildpunkterna private int size; //den kvadratiska matrisens storlek // Skapa en bild med n*n bildpunkter public Bild(int n) pixels = new int [n][n]; size = n; //constructor Bild //ett antal metoder //class Bild a) Metoden checksym ska undersška om bilden, dvs. matrisen i frœga Šr symmetrisk. En matris A Šr symmetrisk om fšr varje i och j ai, j= aj, i Metoden ska returnera sant eller falsk beroende pœ om matrisen Šr symmetrisk eller inte. Implementera denna metod. public boolean checksym() boolean sym=true; //avbryt när symmetri omöjlig int i=1,j; while (sym && i < size) j=i+1; //passera elementen ovanför hd. 5 (8)

while (sym && j<=size) sym = ( pixels[i-1][j-1] == pixels[j-1][i-1] ); j++; //while-loop över kolumnerna i++; //while-loop över raderna return sym; // checksym b) En radsumma i en matris definieras som summan av alla element pœ en viss rad. Implementera en metod comprowsums som beršknar matrisens samtliga radsummor och returnerar dem i en vektor med n st. element. public int[] comprowsums() int[] summor=new int[size]; for (int i=1; i<=size; i++) summor[i-1]=0; for (int j=1; j<=size; j++) summor[i-1]=summor[i-1]+pixels[i-1][j-1]; return summor; //comprowsums Uppgift 7 ( 10 pošng) Du har fœtt i uppdrag att gšra en anvšndaryta fšr att simulera en godisautomat. PŒ ytan ska finnas knappar fšr de olika produkterna i sortimentet knappar som skall simulera att mynt stoppas i automaten, en i taget en knapp som avbryter och betalar ut pengarna igen /* Tentamen 990824 ** Automat med GUI ** Knappar för produktval, inbetalning och "avbryt" ** endast inbetalning och "avbryt" implementerade */ import java.awt.*; import java.awt.event.*; public class Automat private int cols=4; private int rows=8; private DynamicGridLayout dgl; private Frame f; private int inbetalt=0; private Label visainbet; 6 (8)

public Automat(String title) // Skapa en ny frame f = new Frame(title); //Lyssnare för knapparna ButtonListener buttonlistener = new ButtonListener(this); // Initiera layout managern och koppla den till f dgl = new DynamicGridLayout(cols,rows); f.setlayout(dgl); // Lägg in exit-knapp. // knappen kan identifieras med getactioncommand() Button avbryt = new Button("Avbryt"); avbryt.setactioncommand("avbryt"); avbryt.addactionlistener(buttonlistener); // Lyssna på den f.add(avbryt, new Point(3,7)); // Placera knappen i GUI //Skapa "varu"-knappar och placera ut i GUI f.add(new Button("Kaka 7:-"), new Point(0,0)); f.add(new Button("Kaka 23:-"), new Point(0,1)); f.add(new Button("Salt Godis 13:- "), new Point(0,2)); f.add(new Button("Surt godis 14:- "), new Point(0,3)); f.add(new Button("Cafe au Lait 19:- "), new Point(1,0)); f.add(new Button("The 11:- "), new Point(1,1)); f.add(new Button("Hacker-Olja 9:- "), new Point(1,2)); f.add(new Button("Kaffe 10:- "), new Point(1,3)); //Knappar för inbetalning Button c; c = new Button("1:-"); c.setactioncommand("1"); f.add(c, new Point(3,1)); c.addactionlistener(buttonlistener); c = new Button("5:-"); c.setactioncommand("5"); f.add(c, new Point(3,2)); c.addactionlistener(buttonlistener); c = new Button("10:-"); c.setactioncommand("10"); f.add(c, new Point(3,3)); c.addactionlistener(buttonlistener); //Fält för kommunikation Label kommlabel; kommlabel = new Label("Du har lagt i :",Label.RIGHT); f.add(kommlabel, new Point(2,5)); //Utskriftsrad för inbetald summa visainbet = new Label("-------"); f.add(visainbet, new Point(3,5)); f.pack(); f.setlocation(50,50); f.setvisible(true); //Automat - konstruktor public void addinbet(int addera) 7 (8)

inbetalt = inbetalt + addera; visatext(integer.tostring(inbetalt)); //addinbet public void visatext(string text) visainbet.settext(text); //visatext //Automat //Många ytterligare metoder kommer här... // Klass som lyssnar på knappar i Automat import java.awt.event.*; public class ButtonListener implements ActionListener private Automat a; public ButtonListener (Automat listeningto) a = listeningto; //konstruktor ButtonListener public void actionperformed (ActionEvent event) //vilken knapp trycktes? String pressed = event.getactioncommand(); if (pressed.equals("avbryt")) a.visatext("pengarna tillbaka!"); System.exit(0); //försök att stänga fönstret :-( else //inbetalning gjord, öka summan a.addinbet(integer.parseint(pressed)); //actionperformed //ButtonListener /* Delar av GUI till simulering av Godisautomat Tentamensuppgift 990824 "Programmering i Java, 5p., Sommaruniversitetet */ public class GodisAutomaten public static void main(string args[]) new Automat("Godisautomaten Snasken"); //main //GodisAutomaten 8 (8)