Stockholms universitet 1 (6) OOP OOP Omtenta 2010-03-06 10.00 15.00 Avser kurserna: DSK1:OOP GES:OOP ID1013 Anvisningar Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. Max antal poäng är 30. För att bli godkänd på tentan (minst betyg E) krävs dels minst 4 poäng sammanlagt på uppgift 1 och uppgift 2 och dels minst 15 poäng sammanlagt på hela tentan. För högre betyg krävs: Betyg D: minst 18 poäng samt högst en uppgift med 0 poäng. Betyg C: minst 21 poäng samt ingen uppgift med 0 poäng. Betyg B: minst 24 poäng samt ingen uppgift med 0 poäng. Betyg A: minst 27 poäng samt uppgifterna lösta med korrekt användande av objektorienterade principer (t.ex. inkapsling, ej upprepning av kod). Betyget Fx med möjlighet att komplettera ges till studenter som fått 12-14 poäng eller som fått mer än 14 poäng men missat att få 4 poäng på uppgift 1+2. Hjälpmedel Samtliga läroböcker om Java är tillåtna hjälpmedel. Kompendier räknas INTE som läroböcker. Lycka till!!!! Lösningsförslag kommer att presenteras på kursens webbsidor.
Stockholms universitet 2 (6) OOP Uppgift 1 (6 poäng) Om man exekverar följande programrader, vad kommer att att skrivas ut på skärmen (du skall i dina svar vara noga med vad som skrivs på vilken rad, alltså beakta skillnaden mellan print och println). A int tal=7; if (tal++ < 8){ System.out.print("Stockholm"); System.out.println(++tal); else{ System.out.print("Göteborg"); System.out.println(++tal); System.out.println(tal++); B int x=3, y=13; while(x<y){ y-=3; for (int z=x; z<y; z+=2) System.out.print(z); System.out.println(x++); C int[]arr = new int[8]; int start=3; for (int index=0; index<arr.length; index++){ start+=index; arr[index]=start; for (int z : arr) System.out.println(z);
Stockholms universitet 3 (6) OOP Uppgift 2 (6 poäng) Om man exekverar (interpreterar) följande Java-program - vad kommer att skrivas ut? main-metoden ligger i class Uppgift2, startas alltså med: java Uppgift2 import java.util.arraylist; class Uppgift2{ public static void main(string[]args){ ArrayList<Alfa> alla = new ArrayList<Alfa>(); alla.add(new Bravo("Val")); alla.add(new Delta()); alla.add(new Bravo("Tår")); alla.add(new Delta()); for (Alfa al : alla) al.skriv(4); class Alfa{ private static String[] saker={"bok", "Sko", "Haj", "Sol", "Get"; private static int start=0; private int tal; public Alfa(){ tal=start++; public void skriv(int antal){ for (int x=0; x<antal; x++) System.out.print(getSak()); System.out.println(); public String getsak(){ return saker[tal]; class Bravo extends Alfa{ private String sak; public Bravo(String sak){ this.sak = sak; public String getsak(){ return sak; class Delta extends Alfa{ public void skriv(int antal){ System.out.println(getSak()); super.skriv(2);
Stockholms universitet 4 (6) OOP Uppgift 3 (6 poäng) Er uppgift är att skriva klassen Utskrift. Den skall skrivas så att man kan använda den enligt följande: Om man i något program använder klassen Utskrift så här: Utskrift u1 = new Utskrift("Tulpan", 3); Utskrift u2 = new Utskrift("Ros"); System.out.println(u1); System.out.println(u2); så skall följande skrivas ut: Tulpan Tulpan Tulpan Ros Om man i ett program skriver följande kod: Utskrift u1 = new Utskrift("Lilja", 2); u1.öka(); u1.öka(); System.out.println(u1); så skall detta skrivas ut: Lilja Lilja Lilja Lilja När ni skriver klassen Utskrift så skall samtliga attribut, konstruktorer och metoder ha lämpliga åtkomstmodifierare.
Stockholms universitet 5 (6) OOP Uppgift 4 (6 poäng) Skriv ett litet Java-program där en användare får möjlighet att mata in namn samt lön för ett antal personer. För varje person som skall matas in ställs frågorna: Namn? Kalle Hur stor lön har Kalle? 28000 Programmet skall tillåta inmatning av nya personer tills användaren på frågan om namn svarar STOPP. Programmet skall sedan skriva ut namnet på alla personer som har en lön som är högre än de inmatade personernas medellön. Ni måste alltså först räkna ut personernas medellön (summan av alla personernas lön dividerat med antal personer), därefter gå genom alla personerna och se vilka som har en lön som är större än medellönen. Dialogen i ert program skulle kunna se ut så här: Namn? Kalle Hur stor lön har Kalle? 28000 Namn? Anna Hur stor lön har Anna? 21500 Namn? David Hur stor lön har David? 26200 Namn? Maria Hur stor lön har Maria? 33600 Namn? Fredrik Hur stor lön har Fredrik? 19200 Namn? Eva Hur stor lön har Eva? 23700 Namn? STOPP Följande personer tjänar med än medel: Kalle David Maria
Stockholms universitet 6 (6) OOP Uppgift 5 (6 poäng) Följande klasser finns: abstract class Fordon{ private int hastighet; public int gethastighet(){ return hastighet; class Bil extends Fordon{ public int maxpassagerare(){ if (gethastighet()>100) return 2; else return 4; class Buss extends Fordon{ private int längd; public int maxpassagerare(){ return längd*4; Klasserna innehåller även lämpliga konstruktorer, ej relevanta för denna uppgift. Ni får (om ni så önskar) lägga till saker i klasserna ovan. Redovisa i så fall vad ni vill lägga till och var (i vilken/vilka klasser) ni vill lägga till det. Er uppgift är att skriva en metod som får en ArrayList<Fordon> som argument. Den ArrayListan är fylld med blandade Bil- och Buss-objekt. Metoden skall även få ett heltal som argument, talet anger ett antal passagerare som vill åka. Ni skall sedan skriva ut sort (Bil eller Buss) och max antal passagerare för alla fordon som har plats för minst så många passagerare som heltalsargumentet anger. Om t.ex. talet 3 skickats som argument skulle utskriften kunna se ut så här: Buss 36 Bil 4 Buss 48 Bil 4 Bil 4 Buss 36 OBS metoden som ni skriver måste ju i Java ligga inuti någon klass. Det kan ni ignorera i denna uppgift, det räcker alltså med själva metoden. Utskrifterna som görs skall göras i terminalfönstret (alltså med hjälp av System.out).