2D1339 Programkonstruktion för F1, ht 2003 Fiktiv Kontrollskrivning 1 Endast ett svar är rätt på varje fråga! Om mer än ett svar givits blir det noll poäng på frågan. Alla skriftliga hjälpmedel är tillåtna Skrivtid för den riktiga skrivningen är en lektionstimme, 45 minuter. 8 rätt (av 12 möjliga) krävs för godkänt. 1. Vilken av typerna nedan ska variabeln x ha för att if-satsen skall gå att kompilera utan fel? if (x < 0.01) { : a)boolean b)char c)double d)string 2. Vilka värden har variablerna x och y efter nedanstående kodavsnitt? int x = 1, y = 1; if (x == 0) { x = x - 1; y = 0; else { x = x + 1; y = y - 1; x = x - 1; a) x=0, y=1 b) x=1, y=0 c) x=2, y=0 d) x=-1, y=0 3. Följande kodavsnitt finns i en paint-metod i en Applet. Hur många linser ritas (hur många gånger anropas metoden ritalins)? int x = 100; while (x > 1000) { ritalins(g, x); x = x + 100; a) 0 gånger b) 1 gång c) 10 gånger d) Går ej att svara på då while-satsen ger en oändlig repetition och programmet måste avbrytas utifrån t.ex. med Ctrl-C 1
4. Följande kodavsnitt exekveras i en metod. Det blir en utskrift i terminalfönstret som påminner om en geometrisk figur. Vilken? for (int i=1; i<10; i++) { for (int j=1; j<=i; j++) { System.out.print("*"); System.out.println(); a) Cirkel b) Rektangel c) Regelbunden 10-hörning d) Triangel 5. Vilket av följande påståenden om metoder i Java är falskt? a) En metod kan deklareras (definieras) inuti en annan metod. b) En metod kan anropas inuti en annan metod. c) En metod måste deklareras (definieras) inuti en klass. d) En metod måste ha en parameterlista. Parameterlistan får vara tom. 6. Du deklarerar den lokala variabeln int k; ienmetodienjava-klass.vilketav påståendena nedan är sant? a) Namnet k är nu upptaget och det är omöjligt att deklarera int k; i andra metoder i klassen. b) Den först deklarerade k existerar bara inuti den metod där den är deklarerad och är helt oberoende av variabler i andra metoder oavsett vad variablerna heter. c) Den först deklarerade k gör att det går att använda k i andra metoder i klassen utan att deklarera om den. d) Det är tillåtet att deklarera k i andra metoder i klassen men inte att deklarera k som instansvariabel. 2
7. Metoden funk deklareras double funk (int m, double y) { // här står metodkroppen I vilken av raderna nedan anropas metoden korrekt enligt deklarationen ovan? (Alla satserna finns i instansmetoder i samma klass som funk är definierad) a) double z = funk(3, Math.sin(0.1)); b) int k = 14; double w = 1.42; double z = funk(int k, double w); c) int m = 13; double y = 0.37; double z = funk(); d) double r = 3.27; System.out.println(funk(2.97, r)); 8. I en Applet skall en rad med staplar i form av rektanglar ritas. Positionerna i x-led för staplarnas vänsterkanter anges i vektorn xpos nedan och staplarnas höjd anges i vektorn höjd. Alla rektanglar ska ritas med nederkanten i position ybas och alla skall ha bredden 30 pixels. Metoden drawrect i klassen Graphics skall användas. Metoden har samma parametrar som drawoval som används för linserna i linslabben. Vilken paint-metod ritar de begärda staplarna? int[] xpos = {50, 100, 200, 250; int[] höjd = {80, 220, 60, 105; int ybas = 300; a) for (int i=0; i< xpos.length; i++) g.drawrect(xpos[i], höjd[i]); b) for (int i=0; i< xpos.length; i++) g.drawrect(xpos[i], ybas - höjd[i], 30, höjd[i]); c) for (int i=0; i< xpos.length; i++) drawrect(g, xpos[i], ybas - höjd[i], 30, höjd[i]); d) for (int i=0; i< ybas; i++) g.drawrect(xpos[i], ybas, 30, höjd[i]); 3
9. Antag att programmet i föregående uppgift skall utvidgas så att ytterligare två staplar ritas, i positionerna 325 resp. 375 med höjderna 25 resp. 100. Vilka delar av programmet behöver ändras? a) Endast definitionerna av vektorerna xpos och höjd. b) Definitionerna av vektorerna xpos och höjd samt paint-metoden. c) Endast paint-metoden. d) Något annat än vektorerna och paint - metoden måste ändras. 10. Metoden ritafigur ritar en intressant figur. Metoden deklareras i en Applet och skall ha ett Graphics - objekt, en skalfaktor samt x- och y-värden för dess position som parametrar. void ritafigur (Graphics go, int skala, int xpos, int ypos) { // Här finns de satser som ritar figuren. I vilket av följande alternativ görs ett korrekt anrop av metoden ritafigur? Vi antar i samtliga fall att g är definierad där anropet sker och refererar till ett Graphics-objekt. Metodanropen görs i paint-metoden i den Applet där ritafigur är deklarerad. a) b) c) d) Figur f = ritafigur(g, 80, 100, 200); int skala = 30; int xpos = 250; int ypos = 100; ritafigur(g); int sk = 30; int x0 = 250; int y0 = 100; g.ritafigur(sk, x0, y0); for (int x = 100; x <= 800; x +=50) ritafigur(g, 40, x, 200); 4
11. Vi vill ha en metod som omvandlar ett x-värde i ett koordinatsystem (1) till motsvarande värde i ett annat koordinatsystem (2). Sett från system (1) så ligger origo i system (2) i punkten x0 och skalfaktorn mellan de två systemen är s. x0 och s är definierade i den klass där metoden ligger och kan användas av metoden. Metoden skall kunna anropas t.ex så här double x2 = pos + x1tillx2(378.5); Vilket av följande alternativ är en riktig deklaration av metoden som stämmer med anropsexemplet ovan? Obs! Man behöver inte förstå hur koordinatomvandlingen görs för att svara på frågan. a) void x1tillx2 (double x) { return (x - x0)/s; b) double x1tillx2 (double x) { return (x - x0)/s; c) void x1tillx2 (double x, double s, double x0) { return (x - x0)/s; d) double x1tillx2 (double x) { x2 = (x1 - x0)/s; 12. Följande programavsnitt beräknar och skriver ut en talserie: Antag att n har ett värde som är minst 10. Vilka är de första 10 talen som skrivs ut? int f0 = 0, f1 = 1, f2; System.out.print(f0 + " " + f1 + " "); for (int i=2; i<=n; i++) { f2 = f1 + f0; System.out.print(f2 + " "); f0 = f1; f1 = f2; a)0123456789 b)011248163264128 c)0112358132134 d)0110110110 5
Omfattning Kontrollskrivning 1 Flera av uppgifterna har nära anknytning till linsprogrammet. Tag gärna med ett fungerande program till skrivningen. En hel del svar på frågorna finns också i labanvisningen. Läs den noga inför labtillfällena och tag med den också till skrivningen! Böcker, anteckningar och andra skriftliga hjälpmedel är tillåtna men det betyder inte att man kan komma oförberedd och leta rätt på alla svar. Det hinner man inte göra. primitiva datatyper, variabler och uttryck med dessa typer, även boolean med värdena true och false (uppgift 1). villkorssatser med if... och if... else i kombination med andra satser (uppgift 2). repetitionssatser med while (uppgift 3) och for (uppgift 8), även nästlade sådana dvs där en repetitionssats repeteras (uppgift 4) repetitionssatser där något värde förs över från ett steg i repetitionen till nästa som t.ex. linjernas lutning i linslabben (uppgift 12). vektorer (fält med ett index) definierade på enklaste sätt så som görs i linslabben, t.ex. double[] f = {0.2, 0.5, 0.03. Andra typer än double kan förekomma. (uppgift 8, 9) repetition med for över vektor i olika sammanhang (uppgift 8) metoder utan returvärde, typ void (uppgift 10) metoder med returvärde, typ int, double o.s.v. och return-sats där värde av rätt typ returneras (uppgift 7, 11) metoders parametrar (hanteras exakt likadant för metoder med och utan returvärden). Formella parametrar, aktuella parametrar. Man ska kunna se på en metoddefinition hur metoden skall anropas (uppgift 7, 10) och kunna från ett exempel på anrop känna igen möjliga definitioner (uppgift 11). användning av parametrarna i en metod, lokala variabler i en metod, (uppgift 6), instansvariabler i en metod strukturen hos ett program (modell linslabben) med instansvariabler och metoder (uppgift 5), särskilt paint-metoden ritmetoder i klassen Graphics, samma typ av användning som i linslabben (uppgift 8,9,10) Händelsehantering kommer inte på skrivningen Labbens sista steg, att detektera mushändelser (för att den som kör programmet ska kunna flytta på lampan) tar vi inte upp på skrivningen. Alltså MouseMotionListener, addmousemotionlistener, mousemoved, mousedragged o.s.v. ingår ej i skrivningen men väl i labarbetet. 6