Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Relevanta dokument
Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tentamen i Programmeringsteknik I

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Del A (obligatorisk för alla)

Tentamen i Programmeringsteknik I

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Del A (obligatorisk för alla)

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren att du har förstått dessa även om detaljer kan vara felaktiga.

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Tentamen i Programmeringsteknik I

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Tentamen OOP

TENTAMEN OOP

Grundläggande programmering med C# 7,5 högskolepoäng

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

Tentamen i Programmeringsteknik I,, KandMa/Fy,

Malmö högskola 2008/2009 CTS

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

TENTAMEN OOP

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

Tentamen. Lösningsförslag

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Tentamen Programmeringsteknik 2 och MN Skrivtid: Inga hjälpmedel.

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

TENTAMEN OOP

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

OOP Objekt-orienterad programmering

Objektorienterad programmering i Java

Tentamen i Programmeringsteknik I, ES,

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Föreläsning 3-4 Innehåll

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Tentamen, EDAA20/EDA501 Programmering

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Del A (obligatorisk för alla)

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

Lösningsförslag övning 2.

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen, EDAA10 Programmering i Java

DAT043 Objektorienterad Programmering

LÖSNINGSFÖRSLAG TENTAMEN

2 b) Bodega bodegan = new Bodega(); double moms = 0.235; String namn = "Vargtass"; System.out.println(namn + " " + moms + bodegan.ändra(moms, namn); S

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

LyckaTill önskar Anna

Programmering för språkteknologer II, HT2011. Rum

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

Tentamen i Grundläggande programmering STS, åk 1 lördag

Föreläsning 5-6 Innehåll

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Laboration A Objektsamlingar

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

public boolean containskey(string key) { return search(key, head)!= null; }

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

tentaplugg.nu av studenter för studenter

Transkript:

Tentamen Programmeringsteknik I 2016-03-17 Skrivtid: 1400 1900 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Fyll i försättssidan fullständigt. Såvida inget annat anges, både får och ska man bygga på lösningar till föregående uppgifter även om dessa inte har lösts. Det är tillåtet att införa hjälpmetoder och hjälpklasser. Uttrycket skriv en metod som skall alltså inte tolkas så att lösningen inte får struktureras med hjälp av flera metoder. Du behöver inte skriva import-satser för klasserna Scanner, ArrayList, Locale och inte heller för klasser i java.io. Alla uppgifter gäller programmeringsspråket Java och programkod skall skrivas i Java. Koden skall vara läslig dvs den skall vara vettigt strukturerad och indenterad. Namn på variabler, metoder, klasser etc skall vara beskrivande men kan ändå hållas ganska korta. Observera att betyget påverkas negativt av icke-privata eller onödiga instansvariabler, dålig läslighet, upprepning av identisk kod, underlåtenhet att utnyttja given eller egen tidigare skriven metod. Skrivningen består av två delar. Lösningarna till uppgifterna på del A1 A7 ska skrivas in i de tomma rutorna och lämnas in. Lösningarna till uppgift A8 samt uppgifterna på B-delen skrivs på lösa papper. För att bli godkänd (betyg 3) krävs att hela A-delen är i stort sett rätt löst. För betyget 4 krävs dessutom att minst hälften av uppgifterna på B-delen och betyg 5 att alla uppgifterna på B-delen är i stort sett rätt lösta. Observera att B-delen inte rättas om inte A-delen är godkänd. Lycka till!

Del A (obligatorisk för alla) A1. Koden följer garanterat namnkonventionerna dvs klasser börjar med stor bokstav, metoder och variabler med liten. Ringa in rätt svar och lämna in tillsammans med dina övriga svar! Svara bara med ett alternativ per fråga. a) Givet koden Turtle t; Vilket påstående är felaktigt? b) I uttrycket t.move(30) är 30 c) I uttrycket MyClass.sort(a) 1) t är en referenstyp 2) t är en objekttyp 3) t är ett objekt 1) en formell parameter 2) en aktuell parameter 3) en referens? 1) måste sort vara en klassmetod 2) måste sort vara en instansmetod 3) kan man inte avgöra om sort är en instans- eller klassmetod d) Math är inte 1) en typ 2) en klass 3) en referens e) Vilken returtyp bör metoden nedan ha dvs vad ska... bytas mot? public... givebirth(person dad) { String n = this.n + "-"+ dad.n; String address = this.address.trim(); int age = 0; return new Person(n, address, age); 1) String 2) int 3) Person 4) void f) Hur många objekt skapas av koden nedan? (Du ska bara räkna de objekt som man ser att koden skapar) Turtle[] family = new Turtle[5]; World earth = new World(400, 400); for(int i=0; i<3; i++) { family[i] = new Turtle(earth); 1) 3 objekt 2) 4 objekt 3) 5 objekt 4) 6 objekt 5) 7 objekt

g) En instansvariabel 1) måste deklareras utanför konstruktorerna 2) måste deklareras i en konstruktor 3) måste ges ett värde i en konstruktor h) Vilket av vidstående påstående om metoden calculate kan vara sant när man ser nedanstående sats? int x = calculate(4); 1) Den kan ha en String som formell parameter 2) Den kan ha double som returtyp 3) Den kan ha double som formell parameter i) Vilket uttalande om koden nedan är sant? if ("Nisse".equals(friend)) { System.out.println("My friend"); 1) equals som anropas finns i klassen Friend 2) equals som anropas finns i klassen String 3) equals som anropas finns i klassen ArrayList 4) Koden är felaktig j) Uttrycket (double)(1 + 3/2) + 3 1) har värdet 5.0 2) har värdet 5 3) har värdet 5.5 Resten av skrivningen handlar om ett bokningssystem för säten i ett flygplan. Sätena är organiserade i rader och varje rad innehåller ett antal säten. En rad representeras av klassen Row som innehåller en array av strängar. Varje element i arrayen innehåller antingen en passagerares namn eller null om platsen är obokad. Klassen Cabin innehåller en array av Row-objekt. Klassen har metoder för att boka platser, visa bokningar och passagerarlistor samt för att spara och läsa från fil. En utskrift av en kabin med 8 rader och 5 stolar på varje rad kan se ut så här: 0 1 2 3 4 --------------- 0 [ B B.. B ] 1 [.... B ] 2 [. B. B B ] 3 [ B. B.. ] 4 [.. B. B ] 5 [..... ] 6 [..... ] 7 [. B B. B ] Bokstaven B anger att platsen är bokad och punkten att den är ledig. Såväl säten som rader numreras (för programmerarens bekvämlighet) från 0 och uppåt. Båda klasserna finns i bilagan men vissa delar av koden är utelämnade. Uppgifterna i A-delen handlar bara om klassen Row

A2. Skriv klart konstruktorn som tar emot antalet platser som ska finnas på raden public Row(int size) { this.seats = new String[size]; A3. Skriv en metod get som returnerar namnet den som är bokad på en viss plats. Platsen ska ges som parameter. Platserna är numrerade från 0 och uppåt. Om ingen är inbokad på platsen ska null returneras. Ingen kontroll av att parametern har ett legalt värde behöver göras. public String get(int seat) { return seats[seat]; A4. Skriv klart metoden printpassengers() som skriver ut namen på passagerarna skrivet en per utskriftsrad. Obokade platser ska inte skrivas. Se körexemplet! public void printpassengers() { for (int i=0; i<seats.length; i++) { String p = seats[i]; if (p!= null) { System.out.println(p);

A5. Metoden find(string name) i klassen Row letar efter en passagerare med angivet namn på denna rad. Om namnet finns returneras platsnumret, annars -1. Skriv klart metoden! public int find(string name) { for (int i=0; i<seats.length; i++) { if (name.equals(seats[i])) { return i; return -1; A6. Metoden tostring() i klassen Row ska returnera en sträng som visar vilka platser som är upptagna/lediga på raden. En ledig plats markeras med strängen ". " och en bokad men strängen " B ". Båda dessa strängar är tre tecken långa och har B respektive. som sitt mittersta tecken. Exempel: Raden [ B B.. B. B ] beskriver en rad med 7 säten varav plats 0, 1, 4 och 6 är bokade. public String tostring() { String result = ""; for (String s: seats) { if (s==null) { result += ". "; else { result += " B " return "[" + result + "]";

A7. Metoden book används för att boka en plats på raden. Metoden tar emot ett platsnummer och ett passagerarnamn som parametrar. Den kontrollerar att platsnumret är giltigt samt att platsen är obokad. Om detta är uppfyllt så läggs passagerarnamnet in på platsen och true returneras. Om något av villkoren inte är uppfyllt görs ingen bokning och false returneras. Fyll i den kod som fattas! public boolean book(int seat, String passenger) { seat<0 seat >= seats.length if ( ) { System.out.println("*** Illegal seat number :"+ seat); return false; seats[seat]!=null else if ( ) { else { System.out.println("*** Seat already booked") return false; seats[seat] = passenger; ) { return true; A8. Skriv på separat papper en klass Passenger som representerar en passagerare med namn och plats dvs rad- och sätesnummer. Förse klassen med en konstruktor som tar emot dessa tre värden. Skriv också en tostring-metod som returnerar namn och platsinformation samt en public int compareto(passenger p). Metoden compareto ska jämföra passagerarnas namn och, på vanligt sätt, returnera något negativt, 0 eller något positivt beroende på ordningen mellan namnen. Skriv också en en main-metod som skapar två passagerar-objekt, skriver ut dem med hjälp av tostring-metoden och visar vad compareto-metoden returnerar med dessa två objekt.

public class Passenger { private String name; private int rownumber; private int seatnumber; public Passenger(String name, int rownumber, int seatnumber) { this.name = name; this.rownumber = rownumber; this.seatnumber = seatnumber; public String tostring() { return String.format("%12s in row %2d at seat %2d", name, rownumber, seatnumber); public int compareto(passenger p) { return name.compareto(p.name); public static void main(string[] args) { Passenger p1 = new Passenger("Lisa", 1, 3); Passenger p2 = new Passenger("Olle", 0, 4); System.out.println("p1: " + p1); System.out.println("p2: " + p2); System.out.println("p1.compareTo(p2) : " + p1.compareto(p2)); System.out.println("p2.compareTo(p1) : " + p2.compareto(p1));

Del B (för betyg 4 och 5) Svaren skrivs på lösa papper med ny uppgift på nytt papper. B1. Metoden public static Row load(scanner scan) i klassen Row läser radinformation med det Scanner-objekt som ges som parameter. Informationen är lagrad av save-metoden dvs först en textrad med ett heltal som anger antalet säten på raden och därefter en textrad per säte som innehåller ett namn om sätet är bokat, annars texten none. Så här kan informationen om en rad med 5 säten se ut: 5 Kalle none Olle none Zaphod Metoden ska skapa ett Row-objekt utifrån den lästa informationen. Skriv metoden! public static Row load(scanner fscan) { int size = fscan.nextint(); fscan.nextline(); Row row = new Row(size); for (int i= 0; i<size; i++) { String line = fscan.nextline(); if (!line.equals("none" )) { row.seats[i] = line; return row; B2. Klassen Cabin representerar alla platser i kabinen genom att ha en array av Row-objekt. Klassen har följande instansvariabler: private Row[] therows; private String flightid; Skriv konstruktorn Cabin(String flightid, int numberofrows, int rowlength) som skapar Cabin-objekt med angivna värden på instanvariablerna. Konstruktorn ska skapa såväl arrayen med rader som själva radobjekten. public Cabin(String flightid, int numberofrows, int rowlength) { this.flightid = flightid; therows = new Row[numberOfRows]; for (int i = 0; i<numberofrows; i++) { therows[i] = new Row(rowLength); B3. Skriv en metod ArrayList<Passenger> passengerlist() som skapar och returnerar en arraylist med Passenger-objekt. Metoden ska alltså gå igenom alla platser i kabinen och, för varje bokad plats, skapa ett Passenger-objekt och lägga in det i en arraylist som sedan ska returneras.

public ArrayList<Passenger> passengerlist() { ArrayList<Passenger> res = new ArrayList<Passenger>(); for (int i=0; i<therows.length; i++ ) { for (int j=0; j<therows[i].rowlength(); j++) { if (therows[i].get(j)!=null) res.add(new Passenger(theRows[i].get(j), i, j)); return res; B4. Skriv en metod public static ArrayList<Passenger> sort(arraylist<passenger> list) som tar emot en arraylista med passagerare och skapar och returnerar en ny arraylista som innehåller samma passagerare men sorterade på namn. public static ArrayList<Passenger> sort(arraylist<passenger> list) { ArrayList<Passenger> result = new ArrayList<Passenger>(); for (Passenger p : list) { int i=0; while (i<result.size() && p.getname().compareto(result.get(i).getname())>0) { i++; result.add(i, p); return result; B5. Skriv en metod printpassengers() som skriver ut en lista över planets passagerare i bokstavsordning med en passagerare per utskriftsrad. Exempel på utskrift: Anna in row 0 at seat 2 Tom in row 2 at seat 3 Trillian in row 2 at seat 2 Zaphod in row 0 at seat 3 public void printpassengers() { for(passenger p : sort(passengerlist())) { System.out.println(p);