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
Del A (obligatorisk för alla)

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.

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

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

Tentamen i Programmeringsteknik I

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

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 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 rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Del A (obligatorisk för alla)

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

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 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 vakten 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.

Del A (obligatorisk för alla)

Tentamen i Programmeringsteknik I

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.

Sammanfattning och repetition utgående från typiska tentamensuppgifter

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

LyckaTill önskar Anna

TENTAMEN OOP

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

Tentamen i Programmeringsteknik I,, KandMa/Fy,

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

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

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

Tentamen i Programmeringsteknik I, ES,

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

Tentamen, EDAA10 Programmering i Java

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

Tentamen i Grundläggande programmering STS, åk

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

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.

OOP Tentamen

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.

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.

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

TENTAMEN OOP

Observera. Tentamen Programmeringsteknik II Skrivtid:

Tentamen OOP

Tentamen i Grundläggande programmering STS, åk 1 fredag

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

PROGRAMMERING-Java TENTAMINA

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Malmö högskola 2008/2009 CTS

Tentamen i Grundläggande programmering STS, åk

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

Tentamen. Grundläggande programmering i Java A 5p, DTAA

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Tentamen i Grundläggande programmering STS, åk 1 fredag

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Tentamen i Programmering

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

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

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

Laboration 1 - Grunderna för OOP i Java

Föreläsnings 9 - Exceptions, I/O

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

JAVA Mer om klasser och objektorientering

TENTAMEN OOP

Laboration A Objektsamlingar

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

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

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

OOP Omtenta

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

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

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

Presentation av trafiksimuleringsprojektet

PROGRAMMERING-Java Omtentamina

Föreläsning 14. Filhantering

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]

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

OOP Tenta

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

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

DAT043 Objektorienterad Programmering

Institutionen för TENTAMEN CTH HT-14 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

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 Programmeringsteknik MN

Tentamen, EDAA20/EDA501 Programmering

Transkript:

Tentamen Programmeringsteknik I 2019-03-22 Skrivtid: 14:00 19:00 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 på föregående uppgifter även om dessa inte har lösts. På B-delen är det 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. All given kod följer kursens kodningsregler. 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å A-delen ska skrivas in i de tomma rutorna och den delen ska lämnas in. Rutorna är tilltagna i storlek så att de ska rymma svaren. En stor ruta betyder inte att svaret måste vara stort! Lösningarna till uppgifterna på B-delen skrivs på lösa papper. För att bli godkänd (betyg 3) krävs att minst ca 75% av 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. Vi bedömning av betyg 4 och 5 tas också hänsyn till kvalitén på lösningarna i A-delen. Observera att B-delen inte rättas om inte A-delen är godkänd. Lycka till!

Del A (obligatorisk för alla) A1. Ringa in rätt svarsalternativ eller skriv svar i ruta om sådan a) Vad blir resultatet av följande kod? b) Satsen double h = (double)(1/10); double s = 0; for (int i= 1; i<=10; i++) { s += h; int x = (int)(1. + (9/10 + 9/10)) - 1.; resulterar i c) Vad händer när nedanstående kod körs) int[] a = new int[3]; a[1] = 2; a[2] = 3; System.out.println(a[0]*a[1] + a[2]); d) Vad händer när nedanstående kod körs? ArrayList<Integer> a = new ArrayList<Integer>(); a.add(2); a.add(3); System.out.println(a.get(0)*a.get(1) + a.get(2)); 1) Kompileringsfel 2) RuntimeException 2) s får värdet 0.0 3) s får värdet exakt 1.0 4) s får ett värde nära 1.0 men ej exakt 1) Kompileringsfel 2) x får värdet 0 3) x får värdet 1 4) x får värdet 2 1) Kompileringsfel 2) ArrayIndexOutOfBoundsExcepion 3) NullPointerException 4) Utskrift av 0 5) Utskrift av 3 6) Utskrift av 5 1) Kompileringsfel 2) IndexOutOfBoundsExcepion 3) NullPointerException 4) Utskrift av 0 5) Utskrift av 3 6) Utskrift av 5 e) Vad skrivs ut av följande kod? int sum = 1; for (int i=1; i<3; i++); sum +=1; System.out.println(sum); f) Hur många objekt skapas minst av koden Turtle[] a = new Turtle[3]; ArrayList<Turtle> t = new ArrayList<Turtle>(); t.add(new Turtle(new World()); String s = "Ciao!"; g) Givet koden public void foo(int x) { int a = x*x; this.y = fie(a+2); Ange alla 1) formella parametrar 2) aktuella parametrar 3) lokala variabler 4) instanstansvariabler För att denna uppgift ska betraktas som godkänd bör du ha minst 5 helt rätta deluppgifter.

Vid tävlingar med individuella starter (t ex orientering och vissa skidlopp) vill man hålla reda på deltagarnas starttider (för att veta när de ska starta) samt deras mellantider och sluttider. Tiderna räknas (för enkelhetens skull) i sekunder (heltal) och tävlingens klocka börjar med 0 när den första startar. Klassen Competitor ska representera en deltagare med namn, starttid och en arraylista med mellantider och sluttid. Den som har lägst värde på sista platsen i arraylistan har alltså vunnit tävlingen. Exempel: Om en tävlande har starttiden 60 och arraylistan [103, 201, 306, 402, 505] så passerade hen första kontrollen klockan 163, andra kontrollen klockan 261 och gick i mål klockan 565. A2. Deklarera instansvariablerna name (en sträng), starttime (ett heltal) och en arraylista time med heltalsvärden för mellantider och tid i mål. A3. Skriv färdigt nedanstående konstruktor som tar emot namn och starttid. Konstruktorn ska också skapa arraylistan. public Competitor(String name, int starttime) { A4. Skriv färdigt metoden addtime(int clock) som lägger in en ny mellantid (eller sluttid) sist i arraylistan. Inparametern clock är tävlingsklockans värde. Man måste alltså ta hänsyn till starttiden för att beräkna värdet som ska läggas in. Se den inledande diskussionen! public void addtime(int clock) {

A5. Skriv tostring-metoden i klassen Competitor! Om inga mellantider är lagrade ska metoden bara returnera namn och starttid. Exempel: "Kalla 90". Om det finns minst en lagrad mellantid ska även arraylistan med mellantider inkluderas i resultatet. Exempel: "Kalla 90 [123, 312, 431, 784]" public String tostring() { A6. Skriv en annan tostring-metod som tar emot en heltalsparameter i. Metoden ska returnera en sträng bestående av namnet och den tid den tävlande hade som i-te mellantid. Exempel: Om tostring() för personen returnerar "Kalla 90 [123, 312, 431, 784]" ska tostring(0) returnera "Kalla 123" och tostring(1) returnera "Kalla 312". public String tostring(int i) {

A7. Skriv en färdigt metoden randomtime() som skapar och returnerar ett slumpmässigt heltal i det slutna intervallet [95, 105]. Alla 11 värden ska ha lika stor sannolikhet. public static int randomtime() { A8. Skriv färdigt metoden simulate som fyller på tidlistan med med n slumpmässiga tider. Tiden för varje delsträcka ska beräknas med metoden randomtime. Exempel: Anropet simulate(5) ska kunna ge en mellantidslista med innehållet [98, 197, 302, 401, 502] public void simulate(int n) {

De resterande uppgifterna på A-delen handlar om att lägga in kod i en main-metod som demonstrerar användningen av en del av ovanstående metoder. Metoden inleds så här: public static void main(string[] args) { String[] names = {"Kalla", "Johaug", "Nilsson", "Flugstad"; Den kod du skriver ska fungera även om antalet strängar och innehållet i dessa ändras. Exempel på utskrift från den färdiga main-metoden (med svaret 5 på den inledande frågan): Antal tider? 5 Kalla 0 [97, 200, 299, 397, 501] Johaug 30 [96, 198, 296, 391, 487] Nilsson 60 [103, 200, 303, 408, 509] Flugstad 90 [97, 195, 292, 395, 497] A9. Deklarera och skapa en array med namnet skiers. Arrayen ska lagra Competitor-objekt och kunna rymma lika många som det finns strängar i arrayen names. A10. Fyll arrayen med Competitor-objekt med namn enligt namnlistan ovan. De tävlande ska starta med 30 sekunders intervall.

A11. Skapa ett Scanner-objekt för att läsa från tangentbordet. Skriv en fråga till användaren om hur många tider som ska läggas in och läs in svaret (heltal). A12. Iterera över den skapade arrayen. Använd metoden simulate och för att lägga till det antal mellantider som angavs som svar på ovanstående fråga. Skriv också ut varje objekt.

Del B (för betyg 4 och 5) Svaren skrivs på lösa papper med ny uppgift på nytt papper. B1. Skriv en hjälpmetod public double askdouble(string str) för att läsa in ett flyttal från tangentbordet. Metoden ska skriva strängen i str som en ledtext. Om det som skrivs på tangentbordet inte går att tolka som ett flyttal (double) ska en felutskrift ges och användaren tillfrågas igen. Exempel på kod och resulterande konversation. Programmets utskrifter i grönt, användarens inskrifter i rött. double x = askdouble("give the first: "); System.out.println("First ok : " + x); double y = askdouble("give the second: "); System.out.println("Second ok : " + y); Give the first: x Not a double! Try again: x 21 Not a double! Try again: 25 7 First ok : 25.0 Give the second: zzz 47 Not a double! Try again: 12 Second ok : 12.0 B2. Skriv metoden int[] twosmallest(int[] a) som skapar och returnerar en array med de två minsta värdena (i ordning med det minsta först) från arrayen a. Exempel: Anropet twosmallest(new int[]{3, 5, 2, 8, 1) ska returnera arrayen {1, 2. B3. Skriv metoden public ArrayList<String>readLines(String filename) som läser rader från filen med namnet filename. Varje rad ska läggas in i en arraylist med strängar och denna arraylist ska returneras som värde. Klassen Competition ska användas för en tävling med ett antal deltagare. Klassen har två instansvariabler: en arraylista med deltagare (Competitor-objekt) och ett heltal som anger hur många kontrollstationer (tidtagningspunkter) som tävlingen har. Klassen inklusive en main-metod med utskrifter finns på nästa sida. B4. Skriv metoden printcp(int i) som listar ställningen vid den i:te stationen. Deltagarna ska listas i tidsordning med den snabbaste först. Exempel: Anropet printcp(1) ska kunna resultera i denna utskrift: Checkpoint 1 Andersson 193 Karlsson 193 Flugstad 195 Jacobsen 198 Johaug 200 Kalla 200 Nilsson 201 Weng 201 B5. Skriv konstruktorn Competition(String filename, int interval, int checkpoints). Konstruktorn ska läsa in namn (ett per rad) från filen filename, skapa Competitor-objekt utifrån dessa namn samt lägga in dem i slumpmässig ordning i arraylistan. Den första i listan får starttid 0, nästa interval, nästa 2*interval osv. Se körexemplen på nästa sida! B6 Vissa av metoderna i uppgifterna B1 B4 kan/bör deklareras static. Vilka? Vad betyder det?

import java.util.arraylist; import java.util.scanner; import java.io.*; public class Competition { private ArrayList<Competitor> competitors; private int checkpoints; public Competition(String filename, int interval, int checkpoints) throws IOException {... // Uppgift B5 public void simulate() { for (Competitor s: competitors) { s.simulate(checkpoints); public void printall() { System.out.println("\nAll results"); for (Competitor s:competitors) { System.out.println(s); public void printcp(int ident) {... // Uppgift B4 public static void main(string[] a) throws IOException { int checkpoints = 4; int interval = 30; Competition sr = new Competition("competitors.txt", interval, checkpoints); System.out.println("Start order:"); for (Competitor s : sr.competitors) { System.out.println(s.toString()); sr.simulate(); sr.printall(); sr.printcp(1); sr.printcp(2) När programmet körs kan det resultera i nedanstående utskrifter. Av utrymmestekniska skäl har de olika utskrifterna placerats bredvid varandra i stället för efter varandra som det blir när programmet verkligen körs. Start order: Weng 0 Nilsson 30 Karlsson 60 Andersson 90 Kalla 120 Jacobsen 150 Flugstad 180 Johaug 210 All results Weng 0 [101, 201, 297] Nilsson 30 [101, 201, 305] Karlsson 60 [98, 193, 291] Andersson 90 [98, 193, 296] Kalla 120 [95, 200, 298] Jacobsen 150 [96, 198, 302] Flugstad 180 [98, 195, 291] Johaug 210 [98, 200, 299] Checkpoint 1 Andersson 193 Karlsson 193 Flugstad 195 Jacobsen 198 Johaug 200 Kalla 200 Nilsson 201 Weng 201 Checkpoint 2 Flugstad 291 Karlsson 291 Andersson 296 Weng 297 Kalla 298 Johaug 299 Jacobsen 302 Nilsson 305