UME UNIVERSITET Datavetenskap 981212 TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P Datum : 981212 Tid : 9-15 HjŠlpmedel : Inga Antal uppgifter : 9 TotalpoŠng : 60 (halva pošngtalet kršvs normalt fšr godkšnt) Bšrja varje uppgift pœ nytt papper. Skriv ditt namn och uppgiftens nummer pœ varje papper. Skriv bara pœ ena sidan av papperet. Sortera dina papper efter uppgiftsnummer. Kryssa fšr de uppgifter du lšmnar in. Lšsningarna skall vara snyggt och prydligt nedskrivna. TankegŒngen skall vara lštt att fšlja. Alla antaganden som inte Šr uppenbara skall redovisas. Javakod kršvs dšr implementation uttryckligen anges. Tips! Fšrsšk pœ alla uppgifter! Uppgifter kan vara felformulerade, frœga om du Šr osšker eller tycker att nœgot verkar konstigt. Redovisa dina resonemang sœ Šr det lšttare att bortse frœn skrivfel. Det Šr viktigt att du lšser den givna uppgiften! Lycka till! UME UNIVERSITETÊ901Ê87ÊÊUME ÊÊÊTel.:Ê090-786 77 08ÊÊÊFax: 090-786Ê61Ê26ÊÊÊe-mail:Êmarie@cs.umu.se
Uppgift 1 (5 pošng) Vad skrivs ut nšr fšljande program kšrs? Ange samtliga utskrifter. public class U1 public static void main(string args[]) int a1 = 6; int a2 = 9; Num a3 = new Num(7); Num a4 = new Num(1); Num a5 = new Num(10); skrivut("före anropet"); skrivut("aktuell parameter 1 = " + a1); skrivut("aktuell parameter 2 = " + a2); skrivut("aktuell parameter 3 = " + a3.value); skrivut("aktuell parameter 4 = " + a4.value); skrivut("aktuell parameter 5 = " + a5.value); skrivut(""); metodanrop(a1,a2,a3,a4,a5); skrivut("efter anropet"); skrivut("aktuell parameter 1 = " + a1); skrivut("aktuell parameter 2 = " + a2); skrivut("aktuell parameter 3 = " + a3.value); skrivut("aktuell parameter 4 = " + a4.value); skrivut("aktuell parameter 5 = " + a5.value); skrivut(""); }//main public static void metodanrop(int f1,int f2,num f3,num f4,num f5) skrivut("före ändringen i metoden"); skrivut("formell parameter 1 = " + f1); skrivut("formell parameter 2 = " + f2); skrivut("formell parameter 3 = " + f3.value); skrivut("formell parameter 4 = " + f4.value); skrivut("formell parameter 5 = " + f5.value); skrivut(""); f2 = 5; f4.value = 8; f5 = new Num(20); skrivut("efter ändringen i metoden"); skrivut("formell parameter 1 = " + f1); skrivut("formell parameter 2 = " + f2); skrivut("formell parameter 3 = " + f3.value); skrivut("formell parameter 4 = " + f4.value); skrivut("formell parameter 5 = " + f5.value); skrivut(""); }//metodanrop OBS! ForsŠttning pœ nšsta sida 2(7)
public static void skrivut(string s) System.out.println(s); }//skrivut }//U1 public class Num public int value; public Num (int v) value = v; } }//Num Uppgift 2 (2+2+1+1=6 pošng) Vad innebšr fšljade begrepp i Java-koden : a) extends b) implements c) overloading d) omdefiniering Uppgift 3 (3.5+3.5=7 pošng) 1) int primtal = 3,5,7,11,13}; 2) float tider[] = 11.47,12.04,11.72,13.88}; 3) int[] resultat = int [30]; 4) int[] valorer = new 1,5,10,20,50,100,500,1000}; 5) int[] dagar = new int [7]; 6) char betyg[] = 'U','3','4','5'}; 7) char[] betyg = new char[]; a) Vilka av ovanstœende Šr giltiga deklarationer/satser? b) Fšrklara fšr varje enskild deklaration varfšr/varfšr inte ett fšlt instantieras. Uppgift 4 (6 pošng) I Java styrs tillgšngligheten fšr metoder och variabler med hjšlp av modifierare. Beskriv hur bœde arv och tillgšnglighet (grad av inkapsling) fšr metoder och variabler pœverkas av var och en av modifierarna public, protected och private. 3(7)
Uppgift 5 (2+4+2=8 pošng) De inledande Fibonaccitalen Šr 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, É Ett enskilt Fibonaccital definieras som summan av de tvœ nšrmast fšregœende Fibonaccitalen i sekvensen F n = F n-1 + F n-2 fšr alla n 2. Detta kan formellt formuleras pœ fšljande sštt : fib (n) = 0 n = 0 1 n = 1 fib( n 1) + fib( n 2) n > 1 a) Implementera en rekursiv metod som returnerar fib(n), dšr n ges som parameter. b) Implementera fib(n) med en iterativ metod. c) Beskriv fšr- och nackdelarna med en rekursiv metod jšmfšrt med en iterativ. Uppgift 6 (8 pošng) Du fœr uppdraget att sœ smœningom utveckla en applikation som konverterar mellan olika valutor. Beloppet kan matas in i ett fšnster och valutorna všljs frœn en lista. Om man matar in ett nytt belopp och avslutar med 'return' sœ visas omrškningen. Applikationen skall se ut ungefšr sœ hšr : Redogšr utfšrligt fšr vilka objekt du behšver fšr att generera en applikation med ovanstœende utseende. Du fœr sjšlv všlja pœ vilket sštt du vill presentera din lšsningsidž. Tips : utnyttja olika layoutmanagers fšr de olika "omrœdena" i ditt GUI. 4(7)
Uppgift 7 (6 pošng) Beskriv skillnaden mellan en abstrakt klass och ett interface i Java. Hur skiljer sig dessa frœn en "vanlig" klass? Uppgift 8 (6 pošng) Du ska implementera en allmšn sškmetod som ska genomsška en sorterad lista av typ Searchable. interface Searchable //Returnera objektet i position index Object valueat(int index); //Returnera listans längd int length(); //Returnera true om item1 = item2 boolean equal (Object item1, Object item2); //Returnera true om item1 > item2 boolean biggerthan(object item1, Object item2); }// interface Searchable Du kan utgœ ifrœn att listan Šr sorterad i stigande ordning, dvs. det "minsta" všrdet fšrst. AnvŠnd binšrsškning! 5(7)
Uppgift 9 ( 8 pošng) Antag att vi har klassen Lista enligt fšljande (bara metodernas huvuden visas) : // Lista av heltal public Class Lista private int[] listan; // Skapa en tom lista med upp till antal element public Lista ( int antal ) // Returnera antalet element public int antalel ( ) // Returnera listans maximala storlek public int maxel ( ) // Returnera true om elementet finns i listan, false annars public boolean elfinns ( int element ) // Sorterar in elementet i listan(i stigande ordning) public void insortel ( int element) // Ta bort elementet i listan, i position index public void tabortel ( int element, int index ) }// Lista Designa och implementera med hjšlp av klassen Lista en applikation som lšser in, beršknar och skriver ut medelvšrdet och medianvšrdet i en heltalslista. MedianvŠrdet Šr det "mittersta" všrdet nšr všrdena Šr ordnade efter storlek. T.ex. [-3-1 1 9 27] har medianvšrdet 1 (bland 5 všrden Šr det tredje det mittersta). Om antalet všrden Šr jšmnt kan man definiera medianen som medelvšrdet av de tvœ mittersta. Om du vill fœr du anvšnda den frœn labpassen kšnda klassen In fšr inlšsningen, se bilaga 1. 6(7)
Bilaga 1 import java.io.*; import java.util.stringtokenizer; public class In static StringTokenizer reader; static BufferedReader stdin; In() reader = null; }// konstruktor public static String readline() throws IOException BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); return stdin.readline(); }// readline public static String readword() throws IOException if (reader == null) reader = new StringTokenizer(readLine()); if (reader.counttokens() == 0) while (reader.counttokens() == 0) reader = new StringTokenizer(readLine()); } } return reader.nexttoken(); }// readword public static int readint() throws IOException return Integer.parseInt(readWord()); }// readint public static float readfloat() throws IOException, NumberFormatException return Float.valueOf(readWord()).floatValue(); }// readfloat }// In 7(7)