Tentamen Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Lördagen den 30 november 2002 kl 9.00 14.00, salar E33, E34 Inga hjälpmedel 30 poäng ger säkert godkänt, 40 poäng ger betyg 4 50 poäng ger betyg 5 Maxpoäng är 62 fördelat på 15 poäng allmän datalogi, uppgift 1 5 10 poäng Haskell, uppgift 6 11 11 poäng flervalsfrågor i Java, uppgift 12 20 26 poäng programmeringsuppgifter i Java, uppgift 21 22 Lösningar kommer att läggas på kurshemsidan den 3 december Allmän datalogi 1a) Konvertera talet 29 till binär form (2p) Visa hur du räknat! Endast fel svar ger 0p! 1b) Konvertera det hexadecimala talet 11 16 till decimal form (1p) 2) De tre största programmeringsparadigmerna är den imperativa, den objektorienterade och den funktionella. För varje paradigm, ange två programmeringsspråk som brukar räknas dit. (Det räcker att språket har sin huvudsakliga tillhörighet i paradigmen.) (2p) 3) a) Vad är en algoritm? (1p) b) Vad menas med komplexiteten hos en algoritm? (1p) c) Vad är pseudokod och varför använder man det? (1p) 4) Vad menas med syntaxen respektive semantiken hos ett programspråk? Ge exempel på ett syntaktiskt fel och ett semantiskt fel i något programspråk. (4p) 5) a) Vad menar man i allmänhet med abstraktion i programmeringssammanhang? Ge gärna ett exempel! (1p) b) Vad är en Abstrakt Datatyp (ADT)? (1p) c) Hur kan man göra en ADT i Java? (1p) 1
Haskell 6) Vad ger operationen [8,2,3] ++ [7,2,5] i Hugs? (1p) a) [8,2,3,7,2,5] b) [15,4,8] c) [16,5,9] 7. Vilket av följande påståenden om funktioner i Haskell är sant? (1p) a) En funktion i Haskell ger alltid ett värde av en bastyp (Int, Char, Float,..) som resultat. b) En funktion i Haskell ger alltid ett värde av en bastyp eller en lista av en bastyp som resultat. c) En funktion i Haskell kan ge en lista av tupler som resultat. 8. En lista i Haskell är (välj ett alternativ!) (1p) a) En ordnad samling data där alla data är av samma typ, och typen måste vara någon av bastyperna : Int, Char, Float-, o.s.v. b) En ordnad samling data där data får vara av olika typer. c) En ordnad samling data där alla data är av samma typ, typen får vara en godtyckligt sammansatt typ. 9) Beskriv med ord vad funktionen gör eller tala om vad funktionsvärdena blir för ex9 1 7 och ex9 9 1 (2p) ex9 x y x < y = x otherwise = y 10) Vilken lista får man om man skriver in detta Haskell uttryck till Hugs? (2p) [ m+n (m,n) <- [(2,5),(7,3),(4,2)]] 11) Funktionen mystery nedan anropas vanligen med en tom sträng som första parameter, t.ex. så här: mystery [] "ABCDEFG" Beskriv med ord vad funktionen ger för resultat när den anropas med tom sträng som första parameter och en icketom sträng som andra parameter! (3p) mystery :: String -> String -> String mystery y [] = y mystery y (x:xs) = mystery (x:y) xs 2
Java flervalsfrågor endast ett svar är rätt på varje fråga 12) Metoden Math.sin som beräknar värdet av sinusfunktionen är en (1p) a) Klassmetod b) Instansmetod c) Callback-metod 13) Vilket av följande påståenden om konstruktormetoder är sant? (1p) a) Konstruktormetoden anropas varje gång ett objekt (en instans) av en klass skapas, dvs en gång per objekt. b) Konstruktormetoden anropas endast första gången en klass används i ett program, dvs högst en gång per program och klass. c) En konstruktormetod anropas precis som andra metoder, när programmeraren så önskar. 14) Vilket värde har b efter nedanstående kod är exekverad? (1p) int x = 1; boolean b = (x == 1); a)b=0 b)b=1 c)b=true d)b=false 15)Endast ett av följande är sant (1p) 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 16) Ett uttryck i Java av typen yyy.xxx(); måste vara (1p) a) en deklaration b) ett metodanrop c) en uppmaning att klassen xxx skall ärva från klassen yyy d) något annat än det som beskrivs i a), b) eller c) 17) Om en klassdeklaration börjar class X extends Y så uttrycker det en relation mellan klasserna. Vilken? (1p) a) Y är en X b) X är en Y c) Y har en X d) X har en Y 3
18) Vilken av följande grafiska komponenter i Java representerar ett fristående fönster (kan visas utan att det läggs in i en annan komponent)? (1p) a) Canvas b) Frame c) TextArea 19) (2p) Följande kodavsnitt exekveras i en main-metod. Hur många gånger skrivs texten Java-student ut? for (int i=0; i<10; i++) System.out.println("Java-student"); a) 0 gånger b) 9 gånger c) 10 gånger d)ingetava)b)ellerc)ärrätt 20) (2p) Deklarationen och initieringen int[] resultat = new int[10]; reserverar plats i minnet för a) endast en referensvariabel b) endast 10 heltalsvariabler c) en referensvariabel och 10 heltalsvariabler 4
Java programmeringsuppgifter 21a) (totalt 15p) a) Skriv en klass i Java för att representera labbresultat för en student. Klassen kan heta LabbResultat och den ska ha två instansvariabler: Studentens namn och en vektor vars element är av typen char. I vektorn skall lagras tecknen G för godkänd labb eller tecknet - för ännu ej godkänd labb och vi låter index i vektorn också betyda labbnummer. Lite hjälp: En teckenvektor deklareras char[] namn; och skapas om den ska ha 40 element. namn = new char[40]; Klassen ska ha följande instansmetoder: metod som visar studentens namn. (1p) metod för att godkänna en labb med ett visst nummer (1p) metod för att ta bort godkännandet av en viss labb (1p) (ifall man godkänt felaktigt) metod för att räkna (eller visa) hur många godkända labbar studenten har (2p) metod som ger true om studenten är klar med alla labbar och false annars (2p) metod som skriver ut en rad med information i terminalfönstret om studenten på formen Hermione Granger G G G - - - G, dvs namnet samt innehållet i den vektor som håller reda på labbresultaten. För utskrift i terminalfönstret används metoderna System.out.print(..) och System.out.println(..) (3p) Metoderna nr 2 och 3 ovan ska ha labbnumret som parameter. När en instans av LabbResultat skapas skall studentens namn samt antalet laborationer studenten ska göra anges. En vektor med rätt antal element ska då skapas och elementen sättas till -. För rätt struktur, instansvariabler och konstruktor ges (5p). Instansvariablerna ska vara dolda. Det är tillåtet att införa fler instansvariabler och fler metoder än de som krävs om du tycker det är lämpligt. Instansvariabel som borde varit lokal variabel i en metod ger dock poängavdrag. 21b) (3p) Skriv en deklaration av en referensvariabel av typen LabbResultat,skapaeninstans av klassen för studenten "Harry Potter" med 7 st labbar. Skriv också en sats som godkänner Harry på lab nr 3. Denna uppgift får lösas även om man inte löst 19a) 5
22) (8p) Följande Applet skall rita en vacker bild som definieras i metoden ritabild. Bilden ska ritas i en ny position varje gång användaren trycker på knappen flytta. Den vackra bilden ska ritas snett nedanför till höger om den plats den senast hade. Programmet är ofullständigt och de 6 satser som måste läggas till för att det ska fungera finns nedanför. Uppgiften här är att stoppa in dessa satser på rätt platser och i rätt ordning. public class Question extends Applet implements ActionListener { int pos = 20; public void init () { public void paint (Graphics g) { private void ritabild (Graphics g, int xpos, int ypos) { // här finns kod som ritar en bild // här skall inget stoppas in public void actionperformed (ActionEvent e) { Här är satserna som ska stoppas in: pos += 10; ritabild(g, pos, pos); add(flytta); flytta.addactionlistener (this); repaint(); Button flytta = new Button("Flytta"); 6