Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B2 och V1 (1p) 28 oktober 2000 Hjälpmedel: En Javabok. För betyget godkänt krävs att a- eller b-delen (eller c-delen då en sån finns) av varje fråga (uppgift 1 5) är rätt besvarad. Ett mindre fel som inte har med frågan att göra kan accepteras. Vi reserverar oss för eventuella lättnader av dessa krav. Skriv linje och årskurs (t ex B-99) på omslaget. Skriv svaren i ramarna i detta häfte. Glöm inte att skriva namn och personnummer på varje blad! Lycka till! Uppgift 1: Parametrar a) Vad blir utskriften från följande program? class Island int antal = 2; ForFader far = new ForFader("Gunnar Benediktsson"); ForFader son = new ForFader("Peter Gunnarsson"); foo(far, son, antal); System.out.println(far.namn + " : " + son.namn + " : " + antal); static public void foo(forfader a, ForFader b, int c) c=4; a=b; a.namn="jonas Gunnarsson"; System.out.println(a.namn + " : " + b.namn + " : " + c); //class Island class ForFader String namn; ForFader(String namn) this.namn=namn; //class ForFader Utskrift i metoden foo: Utskrift i metoden main:
2 b) class Mat Haj mumsbit = new Haj(70); int tid = 200; double sälta = 0.7; if (färdig(mumsbit, tid, sälta)) System.out.println("Dags att äta hajen!"); static boolean färdig(haj h, int d, double s) //beräknar om hajen är färdig att ätas Här finns kod som inte visas på tentan //class Mat class Haj int vikt; Haj(int vikt) this.vikt = vikt; //class Haj En delikatess på Island är haj som man grävt ner i sanden och låtit jäsa. Det gäller att gräva upp den i rätt tid för att den ska smaka rätt. Programmet här beräknar om det är dags att gräva upp fisken. När delikatessbutiken Haj-deli använder programmet märker de att det är något fel i metoden färdig(). För att lättare hitta felet skriver Haj-deli ut värdena både före och efter anropet till färdig(). Ange för följande variabler om utskriften kan ha ändrats efter anropet till metoden färdig(). Variabel Kan ha Motivering ändrats (j/n) mumsbit.vikt tid sälta
Namn: Personnr: 3 Uppgift 2: Metodanrop Fågelforskaren Lisa Lundi är på Island och ringmärker och väger lunnefåglar. För att hålla koll på alla märkta fåglar har hon ett program. Följande deklarationer av variabler och metoder är redan gjorda och inga andra får användas för att lösa uppgiften. class Fagelskadning static public void main(string[] args) Fagel pippi = new Fagel(1200,"200X45" ); // Koden i a- och b-delen hamnar här. //class Fagelskadning class Fagel static public int antal=0; public double vikt; public String märkning; public Fagel(double vikt, String märkning) //Initierar instansvariablerna public void ändravikt(double vikt) //Ändrar fågelns vikt public double gevikt() //Returnerar fåglens vikt public String gemärkning() //Returnerar fågelns märkning //class Fagel a) Markera vilka av följande satser (som utförs i main-metoden) som är riktiga respektive felaktiga och ange för de felaktiga varför de är fel. Om det finns fler fel i en sats behöver du bara ange ett av dessa. Sats Rätt/Fel Motivering String s = pippi.gemärkning(); pippi.ändravikt(); char c = Fagel.antal; Fagel f = new Fagel(200X46); b) Skriv kod som skriver ut all information om pippi(dvs pippis vikt och märkning).
4 Uppgift 3: Matriser, arrayer och vektorer Isländska energimyndigheten vill ta hålla koll på vattenflödet i vattenfallen. Hjälp dem skriva ett program för att göra detta. De har gjort följande deklarationer, inga andra får användas för att lösa uppgiften. class VattenKraft int num=150; int i, totflöde, maxflöde; int[] fall = new int[num]; //vattenflödet i vattenfallen Vector v = new Vector(); Vattenfall ettfall; // Koden i a-, b- och c-delen hamnar här. //class VattenKraft class Vattenfall int flöde; String namn; public Vattenfall(int flöde, String namn) this.flöde = flöde; this.namn = namn; //class Vattenfall a) Skriv kod som summerar alla vattenflöden (dvs alla värden i fall).
Namn: Personnr: 5 b) Skriv kod som skriver ut alla flöden i omvänd ordning (dvs det sista flödet i fall ska skrivas ut först). c) Anta att flera element (avtypen Vattenfall) lagts in i vektorn v. Skriv kod som skriver ut namnet på Vattenfallet på den första positionen i vektorn. Uppgift 4: Klasser Fårägaren Frej Fårskalle har en enorm fårhage (hagen) med massor av får. Han har börjar skriva på ett program för att hålla reda på sina får. Hjälp honom att skriva koden i metoderna! class Faarskallen FaarHage hagen = new FaarHage(200); if (hagen.klipp(40)) System.out.println("Klipp fåren!!!"); //class Faarskallen class FaarHage public Faar[] bä; private int antal; public FaarHage(int n) /*konstruktor som ger värden till instansvariablerna och som läser in information från en fil om fåren och fyller bä med får*/
6 double medelulllängd() /* Metod som beräknar medelullängden på alla fåren i hagen*/ boolean klipp(int gräns) /*metod som jämför medelullängden med gräns och returnerar true om fåren ska klippas. Om medellängen överstiger gränsvärdet ska fåren klippas.*/ //class FaarHage class Faar double ullängd; int födelseår; Faar(double ullängd, int år) /* Konstruktor som ger instansvariablerna värden*/ //class Faar a) Skriv den kod som saknas i konstruktorn i klassen Faar. b) Skriv den kod som saknas i metoden klipp().
Namn: Personnr: 7 Uppgift 5: Minnesbilder Betrakta följade program. class Fem Vulkan krafla = new Vulkan(true, 1984, 97.3); krafla.snartutbrott(); //class Fem class Vulkan public static final double GRÄNSVÄRDE = 103; public static int numaktiv = 0; //antal aktiva registrerade vulkaner boolean aktiv; int utbrottsår; //årtal för senaste utbrott double tryck; //inre tryck i vulkanen public Vulkan(boolean aktiv, int utbrottsår, double tryck) this.aktiv = aktiv; this.utbrottsår=utbrottsår; this.tryck = tryck; if (aktiv) numaktiv++; //a public void snartutbrott() double kvot = tryck/gränsvärde; if (kvot>1) System.out.println("Vulkanen har ett utbrott NU!!"); else if (kvot>0.7) System.out.println("Troligtvis utbrott snart"); else System.out.println("Ta det LUNGT..."); //b //class Vulkan
8 I uppgifterna nedan skall du rita bilder av minnet vid två tillfällen under exekveringen. Bilderna skall innehålla samtliga klasser med tillhörande klassvariabler, samtliga metodanrop med lokala variabler (glöm inte this) och samtliga objekt med instansvariabler. Alla variablers värden skall framgå av bilden. Objekt som är kandidater för skräpsamling skall markeras. a) Rita en bild av minnet vid läge (a) i programmet. Klasser och klassvariabler Metodanrop och lokala variabler Objekt och instansvariabler b) Rita en bild av minnet vid läge (b) i programmet. Klasser och klassvariabler Metodanrop och lokala variabler Objekt och instansvariabler
Namn: Personnr: 9 5c) Betrakta följade program. class FemC // c) //class FemC class Hast int mankhöjd; public Hast(int mankhöjd) this.mankhöjd = mankhöjd; public void skrivmankhöjd() System.out.println("Mankhöjden är " + mankhöjd); //class Hast Klasser och klassvariabler FemC Hast Metodanrop, parametrar och lokala variabler main(...) String[] args? islandshäst dalahäst Hast Hast Objekt/Instanser och instansvariabler Hast-objekt int mankhöjd 120 Hast-objekt int mankhöjd 15 Skriv de satser som ska invidc) i main för att det ska seutsomovan i minnet.