2D1339 Programkonstruktion för F1, ht 2003 Kontrollskrivning 1 Onsdag 19/11 2003 kl 9.15 10.00 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 10 rätt av 15 möjliga ger säkert godkänt (gränsen kan bli lägre men ej högre). Skriv alla svar på svarsblanketten! 1. Med Javakoden double distance; A) deklareras en variabel som heter distance som har den den primitiva typen double B) deklareras en variabel som heter distance som har referenstypen double C) anropas en metod som heter distance som ger ett svar av typ double D) dubblas värdet i variabeln distance 2. Vilket värde har variabeln w efter att nedanstående kod är exekverad? int x = 1; boolean w = (x == 1); A)w=0 B)w=1 C)w=true D)w=false 3. Vilka värden har variablerna x och y efter nedanstående kodavsnitt? int x = 0, y = 1; if (x == 0) { x = x + 2; 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=0, y=0 4. Vilket värde har variabeln sum efter följande kodavsnitt är exekverat? int sum = 0; for (int k = 3; k<=5; k=k+2) { sum = sum + k*k; A) 55 B) 50 C) 34 D) 0 1
5. 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 B) 1 C) 10 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 6. Följande kodavsnitt exekveras i en main-metod. Det blir en utskrift i terminalfönstret som påminner om en geometrisk figur. Vilken? for (int i=1; i<7; i++) { for (int j=1; j<=12; j++) { System.out.print("*"); System.out.println(); A) Cirkel B) Rektangel C) Regelbunden 7-hörning D) Triangel 7. I appleten nedan, hur många ljus kommer att ritas i appletfönstret, dvs hur många gånger anropas metoden ritaljus för varje uppritning av fönstret? Tecknet : står för utelämnad kod. public class Uppgift extends Applet { : public void paint(graphics g) { : mysko(g,1); mysko(g,2); ritaljus(g); void mysko (Graphics g, int n) { for (int k=1; k<=n; k++) ritaljus(g); void ritaljus (Graphics g) { : A) 1 B) 2 C) 3 D) 4 2
8. Antag att v har typen int[], alltså v är en heltalsvektor. Antag också att den är skapad och tilldelad värden. Vilket av följande programavsnitt räknar hur många av värdena i v som är negativa och sparar detta i variabeln antalneg?antalet negativa värden skall efter kodavsnittet t.ex. kunna användas i kommande beräkningar eller skrivas ut. A) int antalneg = 0; for (int i=0; i<v.length; i++) { if (v[i] < 0) antalneg = antalneg + 1; B) for (int i=0; i<v.length; i++) { int antalneg = 0; if (v[i] < 0) antalneg = antalneg + 1; C) int antalneg = 0; for (int i=0; i<v.length; i++) { if (v[i] < 0) antalneg = 1; D) int antalneg = 0; for (int i=0; i<v.length; i++) { if (v[i] < 0) { antalneg = 1; v[i]= v[i] + 1; 9. Du skriver variabeldeklarationen int m på två ställen i samma Java-klass fast i olika metoder. Vilket av följande påståenden är sant? A) Detta orsakar varken kompilerings- eller exekveringsfel. Lokala variabler i olika metoder kan ha samma namn. B) Klassen kan kompileras utan fel, det går bra att anropa den metod som står först i klassen och innehåller int m; men när den andra metoden anropas så blir det felavbrott. C) Klassen kompileras utan fel men när någon av metoderna med int m; anropas så blir det felavbrott. D) Det blir fel när du försöker kompilera klassen. 3
10. Metoden eurotillkronor skall kunna anropas så som följande två exempel visar. Vilken av metoddefinitionerna nedan stämmer med anropsexemplen? (Variabeln kurs är deklarerad och given värde i den klass där metoderna deklareras). Ex1: Ex2: double arvodekr = 225 + eurotillkronor(190.50); System.out.println("Det kostar " + eurotillkronor(225.90) + " kr"); A) void eurotillkronor (double euro) { return euro*kurs; B) double eurotillkronor (double euro) { return euro*kurs; C) void eurotillkronor (double euro, double kurs) { return euro*kurs; D) double eurotillkronor (double euro) { kr = euro*kurs; 11. Metoden funk deklareras (och det är den enda definitionen av funk) double funk (int m, double y) { // här står metodkroppen I vilken av raderna nedan anropas metoden korrekt? A) double z = funk(math.pi, Math.sin(0.1)); B) int m = 13; double y = 0.37; double z = funk(); C) funk(int 5, double 2.78); D) double r = 3.27; System.out.println(funk(3, r)); 4
12. Metoden ritafigur ritar en intressant figur. Metoden deklareras i en Applet och skall ha en skalfaktor, x- och y-värden för dess position samt ett Graphics - objekt som parametrar: void ritafigur (int skala, int xpos, int ypos, Graphics g) { // 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) g.ritafigur(20, 100, 200); int skala = 30; int xpos = 250; int ypos = 100; ritafigur(g); for (int x = 100; x <= 800; x +=50) ritafigur(40, x, 200, g) for (int x = 100; x <= 800; x +=50) ritafigur(g, 40, x, 200) 13. Följande programavsnitt beräknar och skriver ut en rad med tal. Vilken? int n=7; int talet = 1; System.out.print(talet + " "); for (int k=1; k<=n; k++) { talet = talet*(n-k+1)/k; System.out.print(talet + " "); System.out.println(); A) 1 7 49 343 2401 16807 117649 823543 B) 1 7 21 63 189 567 1701 C)172135352171 D)11111111 5
14. I en Applet skall ett antal fyllda cirklar med varierande storlek ritas längs en (tänkt) linje diagonalt över appletfönstret från övre vänstra till nedre högra hörnet. Cirklarna ska ritas med samma värden på positionen i x-led och y-led. Positionerna för cirklarna anges i vektorn pos och radierna för cirklarna i vektorn radie. Metoden filloval i klassen Graphics skall användas. Metoden har samma parametrar som drawoval. Någon av dessa har ni använt för att rita linserna i lab1. Vilken paintmetod ritar de begärda cirklarna? Obs! Inga instansvariabler utöver vektorerna pos och radie är deklarerade i klassen. A) B) C) D) int[] pos = {50, 100, 200, 250; int[] radie = {5, 8, 10, 25; g.filloval(pos[x], pos[y], 2*radie[i], 2*radie[i]); g.filloval(pos, radie); filloval(g, xpos[i], ypos[i], radie, radie); g.filloval(pos[i], pos[i], 2*radie[i], 2*radie[i]) 15. Antag att programmet i föregående uppgift skall utvidgas så att det inuti varje cirkel dessutom ritas en röd cirkel med halva radien. Vilka delar av programmet måste ändras? A) Endast definitionerna av vektorerna pos och radie. B) Definitionerna av vektorerna pos och radie samt paint-metoden. C) Endast paint-metoden. D) Något annat är vektorerna och paint-metoden måste ändras för att lösa uppgiften. 6