Tentamen, EDA017, Programmeringsteknik för C, E, I och Pi

Relevanta dokument
Tentamen, EDAA10 Programmering i Java

Tentamen EDA501/EDAA20 M L TM W K V

Tentamen i Programmering

Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Tentamen, EDA501 Programmering M L TM W K V

Tentamen, EDAA10 Programmering i Java

Tentamen, EDAA20/EDA501 Programmering

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

Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDAA20/EDA501 Programmering

Tentamen, Programmeringsteknik för BME, F och N

Tentamen, EDAA10 Programmering i Java

Tentamen, EDAA20/EDA501 Programmering

Tentamen Programmeringsteknik för BME, C, D, E, F, I, N & Pi

Tentamen, EDA501 Programmering M L TM W K V

Tentamen i EDA011 Programmeringsteknik för F, E, I, π och N

Tentamen, Algoritmer och datastrukturer

Bedömning av kontrollskrivning, EDA016 Programmeringsteknik

Tentamen OOP

Tentamen EDAA45 Programmering, grundkurs

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

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

OOP Tenta

Tentamen i Programmeringsteknik I,, KandMa/Fy,

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

Tentamen i Programmeringsteknik I, ES,

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

Diagnostiskt Prov. Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas.

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

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

OOP Tentamen

Tentamen i Programmeringsteknik I

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

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.

Tentamen i Objektorienterad programmering

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Malmö högskola 2007/2008 Teknik och samhälle

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

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

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

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Det finns en referensbok (Java) hos tentavakten 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

OOP Tentamen

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

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

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

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING

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

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

PROGRAMMERINGSTEKNIK TIN212

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

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

a. Vilka av följande påståenden är riktiga? Observera att felaktigt valda påståenden ger poängavdrag. (4p)

Lösningsförslag övning 2.

DAT043 Objektorienterad Programmering

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 Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

OOP Tentamen

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

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

Tentamen FYTA11 Javaprogrammering

Java M1 V2 L2 K2 TM W. Tentamen i Programmering , kl LUNDS TEKNISKA HÖGSKOLA Institutionen för datavetenskap.

Tentamen Datastrukturer (DAT037)

Laboration 13, Arrayer och objekt

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

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.

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Malmö högskola 2008/2009 CTS

OOP Exempel Tentamen 2007

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]

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

CHALMERS TENTAMEN. 2018/2019, lp 1 DAT050. Uno Holmer

Tentamen i EDAF oktober Skrivtid: Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas.

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

Tentamen ID1004 Objektorienterad programmering April 7, 2015

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

PROGRAMMERING-Java TENTAMINA

TENTAMEN OOP

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

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.

Föreläsning REPETITION & EXTENTA

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Objektorienterad Programmering (TDDC77)

Tentamen i Grundläggande Programvaruutveckling, TDA548

Laboration A Objektsamlingar

TENTAMEN OOP

Malmö högskola 2007/2008 Teknik och samhälle

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Transkript:

LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen, EDA017, Programmeringsteknik för C, E, I och Pi 2017 03 15, 14.00 19.00 Anvisningar: Tentan innehåller fyra uppgifter. Preliminärt ger uppgifterna 7 + 21 + 6 + 11 = 45 poäng. För godkänt betyg krävs 22,5 poäng. Läs igenom hela tentan innan du sätter igång. Tillåtet hjälpmedel: Java-snabbreferens. Lösningsförslag kommer att finnas på kursens hemsida senast dagen efter tentamen. Resultatet läggs in i Ladok när rättningen är klar och anslås inte på anslagstavlan. Tentamensvillkor: Om du tenterar utan att vara tentamensberättigad annulleras din skrivning. För att undvika att någon skrivning annulleras av misstag kommer alla som, enligt institutionens noteringar, tenterat utan att vara tentamensberättigade att kontaktas via epost. Felaktigheter i institutionens noteringar kan därefter påtalas fram till nästa tentamenstillfälle då resterande skrivningar annulleras.

2(6) 1. Flera stora matvarubutiker har idag även en webbutik. I vissa webbutiker finns det möjlighet att välja bland recept och att automatiskt lägga ingredienserna i varukorgen. Vid val av recept kan man ange hur mycket som ska lagas eller bakas och ingredienslistan till varukorgen anpassas då därefter. Klassen Ingredient används för att hålla reda på information om en ingrediens i ett recept. Klassen är färdigskriven. Ingredient /** Skapar en ny ingrediens som heter name, med mängden quantity, enheten unit och med varunumret itemnbr */ Ingredient(String name, double quantity, String unit, int itemnbr); /** Returnerar namnet på ingrediensen */ String getname(); /** Returnerar mängden av ingrediensen */ double getquantity(); /** Returnerar enheten i vilken ingrediensen mäts */ String getunit(); /** Returnerar ingrediensens varunummer */ int getitemnumber(); /** Returnerar en textuell beskrivning av ingrediensen på formen "Morot 0.3 kg" */ String tostring(); Klassen Recipe håller reda på alla ingredienser i ett visst recept. I andra sammanhang innehåller ett recept även instruktioner för hur man lagar maträtten, men de instruktionerna bortser vi från här. Recipe /** Skapar ett nytt recept för maträtten name med de ingredienser som finns i listan list */ Recipe(String name, ArrayList<Ingredient> list); /** Returnerar en strängrepresentation av receptet innehållande namnet samt en listning av alla ingredienser och dess mängd */ String tostring(); /** Returnerar en lista med de ingredienser som behövs till detta recept. Ingredienslistans mängder är duplicerad times gånger mot originalreceptet */ ArrayList<Ingredient> getitems(double times); Uppgift: Implementera klassen Recipe enligt specifikationen ovan. Ledning och anvisningar: Ingredient innehåller inga metoder för att ändra på t.ex. mängden eftersom vi inte vill att ett befintligt recept ska kunna ändras utifrån (av misstag). Att en kund dubblerar ett recept ska ju inte påverka receptet som sådant utan bara de specifika varor som returneras av metoden getitems (eftersom samma recept kan antas visas för alla som använder webbutiken). Det betyder att getitems måste returnera en lista med nya ingrediensobjekt. tostring-metoden ska ge en sträng på följande format: Ugnsfisk babyspenat 70.0 g torskryggfiléer 4.0 st salt 1.0 tsk

3(6) dill 1.0 kruka grädde 2.0 dl vitlöksklyfta 1.0 st citron 0.5 st 2. Matvarubutiken på webben måste också ha ett sätt att hålla reda på vad kunderna beställer. Varje kund har en varukorg som beskriver alla varor den har samlat på sig, hur mycket av varje vara som är vald, samt dess pris. Kunden kan lägga varor i varukorgen via valda recept, men man kan också lägga till enstaka varor. För att hålla reda på varje vara i varukorgen har vi klassen ShoppingItem enligt specifikationen nedan. Klassen är färdigskriven. ShoppingItem /** Skapar ett nytt ShoppingItem-objekt. Med benämningen name, mängden q angiven i enheten unit, enhetspriset price och varunummret itemnbr */ ShoppingItem(String name, double q, String unit, double price, int itemnbr); /** Returnerar namnet på varan */ String getname(); /** Returnerar mängden av varan */ double getquantity(); /** Returnerar enheten i vilken varan mäts */ String getunit(); /** Returnerar varans varunummer */ int getitemnumber(); /** Returnerar priset per enhet för denna vara */ double getprice(); /** Returnerar varans totalpris (beräknat på mängden och enhetspriset) */ double gettotalprice(); /** Ändrar mängden av varan till mängden newquant */ void setquantity(double newquant); /** Returnerar en textuell beskrivning av varan på formen "Morot 0.3 kg; 3.87 (12.90 kr/kg)" */ String tostring();

4(6) Klassen ShoppingBasket beskriver en varukorg enligt specifikationen nedan. ShoppingBasket /** Skapar en tom varukorg */ ShoppingBasket(); /** Lägger till varan item till varukorgen, om varan redan finns uppdateras mängden på befintlig vara */ void additem(shoppingitem item); /** Lägger till ingredienserna i receptet r, duplicerat times gånger, till denna varukorg */ void addrecipe(recipe r, double times); /** Hämtar totalkostnaden för alla varor i denna varukorg */ double getsubtotal(); /** Returnerar en vektor med alla varor i denna varukorg. Varorna i vektorn är sorterade stigande med avseende på varans namn */ ShoppingItem[] getitemsinorder(); Uppgift: Implementera klassen ShoppingBasket enligt specifikationen ovan. Ledning och Anvisningar: Då ingredienserna från ett recept hämtas och ska läggas i varukorgen måste varukorgen ha något sätt att hitta aktuellt pris på varje ingrediens motsvarande vara. Därför får ni anta att vi har tillgång till en klass PriceList som håller reda på aktuell prislista. Klassen PriceList har en metod som ni behöver och den är deklarerad så här: /** Ger priset för produkten med nummer itemnumber */ public static double getprice(int itemnumber) Varunumret kan antas vara unikt för varje vara (och samma för motsvarande ingrediensobjekt). En viss vara mäts alltid i samma enhet. Metoden getitemsinorder får sortera den interna listan men inte på något sätt ändra dess innehåll.

5(6) 3. Webbutiken har även andra klasser för att övergripande hålla reda på alla varor och ordrar. Vi behöver inte bekymra oss så mycket för dessa men i en av klasserna behövs en metod för att beräkna statistik och denna har du fått i uppgift att skriva. Klassen innehåller alla ordrar och en lista över alla varor i lager. Metoden ska räkna ut i hur många ordrar varje vara beställs. En skiss av klassen beskrivs i koden nedan. OrderHandler public class OrderHandler { private ArrayList<ShoppingBasket> orders; private ArrayList<ShoppingItem> allitems; } public OrderHandler(){ orders = new ArrayList<ShoppingBasket>(); allitems = new ArrayList<ShoppingItem>(); } //Andra metoder som håller mängden av ordrar och varor //uppdaterad under tiden som webbutiken är igång /** Returnerar en vektor där varje element anger hur många gånger motsvarande varunummer förekommer bland ordrarna. */ public int[] itemstatistics(){ //Denna kod ska du skriva } Uppgift: Implementera metoden itemstatistics. Ledning: Varorna i allitems är sorterad på varunummer. Man får anta att alla varunummer är större än noll och inte orimligt stora. Vi vet inte vilka varunummer som är giltiga, det är alltså t.ex. inte ok att anta att första varan börjar på ett. Exempel: Om varan med det högsta varunumret i webbutiken är 7 och OrderHandler innehåller 2 ordrar med följande varunummer i: varunummer i order 1 varunummer i order 2 3 6 1 1 2 2 5 så ska vektorn som returneras från itemstatistics se ut så här: 0 2 2 1 0 1 1 0

6(6) 4. Som ni ser i uppgift 1 och 2 så är klasserna Ingredient och ShoppingItem ganska lika. Båda innehåller namn (name), mängd (quantity), enhet (unit) och varunummer (itemnumber). ShoppingItem innehåller också ett pris och några extra metoder. Klasserna Ingredient och ShoppingItem är alltså likartade, de beskriver varor på nästan samma sätt men används i lite olika sammanhang vilket gör att man kan argumentera för att strukturera klasserna med hjälp av arv. Uppgift: Beskriv hur klasserna Ingredient och ShoppingItem kan struktureras om med arv. För fullpoäng ska följande finnas med: angiven superklass (i förekommande fall) kompletta attributdeklarationer för varje klass i ditt förslag komplett konstruktor för varje klass i ditt förslag kompletta tostring-metoder för varje klass angivelse av vilka övriga metoder som ska finnas i vilken klass (metoderna behöver alltså inte implementeras, det räcker att du visar var de ska ligga). Det är alltså samtliga befintliga metoder för ShoppingItem och Ingredient som ska placeras ut på rätt ställe.