Tentamen i Programmeringsteknik MN Del I. Uppgift 1

Relevanta dokument
Tentamen i Programmeringsteknik MN

Tentamen i Programmeringsteknik MN

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

LyckaTill önskar Anna

Tentamen i Programmeringsteknik I

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen i Programmeringsteknik I, ES,

Tentamen i Programmeringsteknik I,, KandMa/Fy,

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

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

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

Tentamen i Programmeringsteknik I

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.

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 tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

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.

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

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ält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

Tentamen i Programmeringsteknik I

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

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Tentamen FYTA11 Javaprogrammering

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

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

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 OOP

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

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

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

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

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, EDA501/EDAA20 Programmering M MD W BK L

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

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 2 Objektorienterad programmering DD1332. Typomvandling

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

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

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 tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Modern Programmering (2546) Tentamen lördag

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

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

Inledande programmering med C# (1DV402) Tärningarna ska kastas

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

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 )

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-15, TDA540. Dag: , Tid:

OOP Tentamen

PROGRAMMERINGSTEKNIK TIN212

TENTAMEN OOP

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]

Villkor och tester. Utförande satser bygger upp metoderna, man brukar finindela detta i: sekvenser. Ett program består i princip av: selektioner (val)

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

Del A (obligatorisk för alla)

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

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

OOP Tentamen

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

Tentamen, Algoritmer och datastrukturer

DAT043 Objektorienterad Programmering

TENTAMEN OOP

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

Klasser och objekt. Henrik Johansson. August 20, 2008

Lösningsförslag tentamen FYTA11 Java

Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det).

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.

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 25 maj 2009

Tentamen FYTA11 Javaprogrammering

Kort om klasser och objekt En introduktion till GUI-programmering i Java

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

OOP Omtenta

JAVA Mer om klasser och objektorientering

Föreläsning 2. Länkad lista och iterator

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

PROGRAMMERING-Java TENTAMINA

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

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Tentamen ID1004 Objektorienterad programmering April 7, 2015

Tentamen Datastrukturer (DAT037)

[] Arrayer = Indexerad variabel

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

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

Objektorienterad programmering i Java

Laboration 13, Arrayer och objekt

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

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

Tentamen, EDAA10 Programmering i Java

TENTAMEN I DATAVETENSKAP

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

Tentamen i Grundläggande Programvaruutveckling, TDA548

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

Transkript:

Tentamen i Programmeringsteknik MN1 011204 Skrivtid : 09.00-14.00 Hjälpmedel : Skansholm, Java direkt eller motsvarande Pärt-Enander mfl, Anv. handledning för Matlab. Matlab-material utdelat på lektion. Tentamen är uppdelad i två delar. Del I består av fem uppgifter och del II av tre uppgifter. Varje uppgift kan ge upp till 5 poäng. För att bli godkänd på tentamen krävs minst 17 av 25 poäng på del I. Eventuella poäng på del II tillgodoräknas inte. För att bli väl godkänd på tentamen krävs dels minst 17 poäng på del I, dels minst 8 poäng på del II. Programmen skall vara skriva i Java om inte annat anges. Programmen skall vara skriva med vettig layout och kommenterade! Skriv varje uppgift på nytt papper. Skriv inte på baksidan av papperet. Lägg uppgifterna i rätt ordning. Skriv namn på alla papper. Skriv INTE med röd färg! Läs uppgiften noga så du vet vad som skall göras. Gör inte mer än det som efterfrågas. Om du inte förstår en uppgift eller om du är tveksam hur den ska tolkas, fråga någon av lärarna. Om inget annat anges får du använda klasser ut paketen java.lang, lava.text, java.awt, java.awt.event, java.io, java.util, java.applet samt Skansholms extra. Resultatet anslås på anslagstavla utanför kansliet (hus 4, plan 2) och på kursens hemsida om du kryssar i aktuell ruta på försättsbladet (samma lösenord som inlämningsuppgiftern. Endast godkända resultat anslås. Lösningsförslag kommer att finnas på kursens hemsida. Lycka till! Uppgift 1 Del I En klass som kan fungera som en datoriserad tärning finns nedan. Den beskriver en tärning och vi kan slå tärningen och avläsa resultatet med olika metoder. Vi kan avläsa flera gånger utan att slå om. Tärningen behöver inte nödvändigtvis ha sex sidor, vår tärning kan ha hur många sidor som helst. Numreringen av sidorna görs från ett och uppåt. Klassen ser ut som (saknade delar markeras med nedan, det är inte en del av koden): // En tärningsklass public class Dice { private int nosides; private int value; // en konstruktor // antal sidor hos tärningen // vad tärningen visar public Dice(int ns) { // konstruktor som // sätter antalet sidor // hos tärningen public Dice() { // standardkonstruktor // sätter sex sidor // hos tärningen // slå ett slag med hjälp av Math.random() public int roll() { // slår ett slag och sparar // resultatet. Dessutom // returnerar den resultatet // läs av nuvarande värde public int get() { // läs av tärningen utan // att slå 1 2

Dina uppgifter är att: Skriva båda konstruktorerna i klassen. b) Förklara varför vi har två konstruktorer. Ge exempel på hur de kan användas. Varför är de deklarerade som public? c) Skriva metoderna roll och get i klassen d) Komplettera klassen med en main-metod som utför: - skapar en sexsidig tärning. - slår tärningen upprepade gånger tills du slår en sexa - skriver ut hur många slag som behövdes för få en sexa Du skall skriva hela klassen och också ha en main-metod som testar att din klass fungerar. b) Uppgift 3 Skriv klassen enligt beskrivningen ovan, inklusive en main-metod Beskriv skillnaden mellan en String och en array av tecken (chars) Ett sektordiagram (Pie chart) är ett sätt att redovisa hur en helhet kan delas i olika delar, tex. hur ett företags kostnader fördelar sig på olika poster. Din uppgift är att skriva ett Java program som ritar ett sektordiagram. Ett sådant diagram kan se ut som: (4p) Uppgift 2 En stryktipsrad består av 13 tecken, där tecknet är något av tecknen 1, X eller 2. För att datorisera din kontroll av tipsrader vill du nu skriva en kontrollklass som kan undersöka hur många rätt du har på dina tipsrader. Din uppgift är att skapa en klass Tips som beskriver veckans korrekta tipsrad. Du ska sedan kunna ge dina rader (en i taget) till ett objekt av denna klass och få reda på hur många rätt du hade. Din klass skall ha rätt rad som en instansvariabel, det ska t. ex. vara en array av tecken eller en sträng. Klassen ska ha en konstruktor som kan användas för att ange veckans rätta rad och en metod som givet din rad, returnerar antalet rätt som du hade. En main-metod kan se ut på detta sätt: public static void main(string [] args) { Tips t = new Tips( rätt rad här ); // skapa ett objekt //med rätt rad int r = t.kolla(min rad här); // kolla min rad // hur många rätt? Skriv i Java ett program som producerar en skärmbild som ser ut som exemplet ovan. Du ska använda en Canvas för att rita ditt sektordiagram. Det ska delas in i fyra sektorer av olika storlek. Varje sektor har en egen färg. Tänk på första laborationen för att inse hur man ritar cirkelsektorer. 3 4

b) 5 Storlekarna anges som procentsatser, i exemplet ovan har vi storlekarna 40, 30, 15 resp 15 procent. Det krävs att totalsumman blir 100. Din klass ska innehålla en mainmetod som frågar efter de olika procentsatserna och som skapar din skärmbild. (4p) Förklara hur Javas metoder för att rita fungerar. Beskriv den roll som repaint, paint och update spelar. Uppgift 4 Du tränar hårt inför årets golfmästerskap. Än så länge ser rekorden på din träningsbana ut så här (hål 1-9): 3, 3, 4, 2, 4, 1, 1, 2, 6. Ditt mål är naturligtvis att överträffa denna lista. Efter du läst en kurs i Javaprogrammering kommer du att lämna anteckningsboken hemma och skriva in dina aktuella resultat i din handdator direkt på golfbanan (en äkta datornörd). Programmet du har fixat för detta syfte ser ungefär ut så här: import extra.*; public class Träning { private int[] rekord={3, 3, 4, 2, 4, 1, 1, 2, 6; public void lagra(int[] t) { // spara ny rekordserie public void skriv() { // skriv ut rekordserien public void analysera(int[] slag) { // jämför public int holeinone(int[] slag) { // räknar ettor public int runda(int[] slag) { // summerar public staic void main(string[] argv) { // skapa en träningsrunda, läs in aktuella // resultat och jämför Training t = new Training(); int [] slag = new int[9]; for (int i=0; i < 9; i++) slag[i] = Std.in.readInt(); // läs in rundan t.analysera(slag); // skriv ut jämförelse Std.out.println("Du hade " + t.holeinone(slag) + " hole-in-one."); Std.out.println("Du behövde" + t.runda(slag) + " slag sammanlagt."); Kolla main-metoden för att se hur programmet skall fungera. Skriv metoden analysera som skriver ut på skärmen hur många hål som du varit bättre än (eller åtminstone lika bra som) rekordlistan. b) Hur kan metoden holeinone avgöra hur många gånger du sänkte bollen i hålet på bara ett slag? Skriv också denna metod. c) I metoden runda skall du beräkna det sammanlagda antalet slag för din runda och returnera värdet. Uppgift 5 En flyttfirma kan flytta enstaka större möbler, t ex pianon inom sin stad mot en avgift som beräknas på följande sätt: En fast avgift på 300 kr, dessutom 25 kr per km som möbeln ska flyttas samt 100 kr per våning som möbeln skall bäras upp eller ned. Om hiss kan användas tas ingen avgift för trapporna. Ex: Ett piano skall flyttas 4 km, från en lägenhet 1 våning upp, till en lägenhet 2 våningar upp. Det finns inte hiss i något av husen. Pris: (300 + 4*25 + 3*100)kr = 700 kr. Om det finns hiss i ett hus kan man simulera detta genom att säga att antal våningar är lika med noll i huset. Flyttfirman har ett Java-program som räknar ut avgifterna de tar av kunderna. Se klassen Flytt nedan. 6

import extra.*; private class Flytt { private int avstånd; private int våningar; public Flytt() { //standardkonstruktor avstånd = 0; våningar = 0; public Flytt(int av, vå) { //extra konstruktor av = avstånd; vå = våningar; Del II Uppgift 6 Våra vanliga tal anges ju i bas tio och varje siffra anger en tiopotens som beror på siffrans position i talet. Vi kan naturligtvis välja att ange talen i någon annan bas och vi får då ett annat utseende av samma tal. Exempelvis kan talet 120 i bas tio anges som talet 231 i bas sju. Det tolkas då som 2*7*7 + 3 * 7 + 1 eller annorlunda uttryckt 2*7 2 + 3*7 1 + 1*7 0. I bas sju behövs bara sju siffror, 0-6. Vi vill nu göra en baskonverterare som ger oss möjlighet att ange ett tal i bas tio och få detta tal skrivet i annan vald bas (2-10). Det kan se ut på föjlande sätt: // läser in avstånd och våningar b) c) 7 public lasin() { // beräknar kostnaden för en flytt, se exemplet ovan public avgift() { Det finns en del fel i deklarationen ovan. Hitta fyra OLIKA fel och skriv om så att det blir rätt. (Du behöver inte skriva koden till metoderna lasin och avgift). Med OLIKA fel menas fel av olika slag, det kan finnas flera fel av samma slag i koden. Skriv metoderna lasin och avgift. Inläsningsmetoden ska ta reda på antalet våningar ner, antal våningar upp och huruvida det finns hiss på någondera stället och utifrån detta beräkna antalet effektiva våningar. Den ska också fråga efter avståndet som godset ska transporteras. Skriv en main-metod med en array med 10 instanser av klassen Flytt. Läs in information till alla 10 instanserna och räkna sedan ut och skriv ut den totala inkomsten som kan bli av de 10 flyttarna.. Skriv en Javaklass som kan producera denna skärmbild. Du ska också implementera de lyssnare som behövs för att få det hela att fungera. Antag att talet tio överst till vänster är fast och inte kan ändras, övriga fält fylls i av användaren. Det är tillräckligt om programmet kan hantera baser 2-10. Om man vill tillåta större baser krävs flera sifror, då brukar man använda tecknen A-F för baser upp t. o. m. sexton. Uppgift 7 Heltal i Java begränsas ju av hårdvaran så att ett ganska litet talområde går att använda. Ett sätt att komma runt detta är att skapa en egen klass som kan lagra och utföra aritmetik på väldigt stora tal. Då gör man lämpligen så att man skapar en array av heltal där man låter varje arrayelement innehålla en siffra i vårt stora tal. Ett tal med exempelvis 100 siffror kräver då en heltalsarray med 100 element. En sådan klass kan se ut som: public class BigNumber { private int [] tal; public BigNumber() {// std konstruktor 8

public BigNumber(int t) {// konstruktor med ett tal public BigNumber(BigNumber t) {// konstruktor med //ett BigNumber public BigNumber add(bignumber t) {// addition Din uppgift är att skriva samtliga konstruktorer i klassen. Dessutom skall du skriva metoden add som adderar två tal av typen BigNumber. Additionen utförs på samma sätt som man gör men papper och penna, dvs från höger och med minnessiffra. Du kan anta att endast positiva tal hanteras. Uppgift 8 En array är en statisk struktur i den meningen att den har en fast storlek. Om den blir för liten måste vi skapa en större array och kopiera över allting från den gamla, en operation som kan ta tid. En alternativ struktur för att lagra många objekt är en länkad lista. Den bygger på att objekten (nodern kedjas ihop med varandra i en lång rad där varje objekt pekar ut sin efterföljare. Den sista noden har ingen efterföljare. Listans början håller vi reda på med en särskild variabel. Vill vi lagra ett antal heltal stoppar vi in varje heltal i ett objekt och kedjar ihop dessa objekt. En lista som lagrar ett antal heltal (ints) kan då se ut som: Lista start 21 45 67 43 public Nod(int dat { this.data = data; next = null; public Nod getnext() { return next; public int getdata() { return data; public void setnext(nod next) { this.next = next; public void setdata(int dat { this.data = data; Sedan själva listklassen public class Lista { private Nod start; public Lista() { start = null; // konstruktor // hämta pekaren // hämta talet // ändra pekaren // ändra data // peka ut första talet Nod Nod Nod Nod Den kan skapas med följande klasser: public int antal() { // antal noder i listan public class Nod { private int data; private Nod next; public Nod() { data = 0; next = null; // talet som ska lagras // peka ut nästa nod // null om sist // konstruktor public int hämta(int index) { // hämta index:e talet public void sätt(int tal, int index) { // nytt tal i // index:e talet public void läggin(int tal) { // lägg in nytt tal // i ny nod 9 10

public void tabort(int tal) { // ta bort detta tal // och dess nod public boolean leta(int tal) { // leta efter talet // sant om hittat Din uppgift är att skriva metoderna läggin och leta i klassen Lista. Metoden läggin ska skapa en ny nod och lägga in den sist i listan. Metoden leta ska undersöka om angivet tal finns i listan. 11