För alla uppgifter på tentan gäller: Man får använda både standard-c++ (som till exempel har pekare som anges med * och objekt som skapas med new) och

Relevanta dokument
Tentamen i Programmering grundkurs och Programmering C

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011

Programmering C: Tentamen of 5 Prioritet och associativitet hos operatorerna i C De viktigaste operatorerna: Prioritet Kategori Operator

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

Tentamen i Programmering grundkurs och Programmering C

Tentamen i. Programmering i språket C

Tentamen i. för D1 m fl, även distanskursen. lördag 28 maj 2011

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Objektorienterad Programmering 5p, Au, D, Fri, Pr,

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Grundläggande programmering STS, åk

Kompilatorer och interpretatorer

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

Tentamen i. Programmering i språket C

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 i Programmering grundkurs och Programmering C

TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00

Databasteknik för D1, SDU1 m fl

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13.

PDA-applikationer med.net

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

Tentamen, EDAA10 Programmering i Java

Tentamen i Programmering grundkurs och Programmering C

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

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Statistik över heltal

TUTORIAL: KLASSER & OBJEKT

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

JAVA Mer om klasser och objektorientering

PROGRAMMERINGSTEKNIK TIN212

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Kompilatorer och interpretatorer

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

TDDC76 - Programmering och Datastrukturer

Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Tentamen i Programmering C, 5p, Distans, övriga,

5 Arv och dynamisk bindning FIGUR

Programmering B med Visual C

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 i Grundläggande programmering STS, åk

DAT043 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

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Tentamen i Programmering C, Fri, Kväll,

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

Databasteknik för D1, SDU1 m fl

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.

OOP Tentamen

TENTAMEN I DATAVETENSKAP

Tentamen FYTA11 Javaprogrammering

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

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

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

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

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 Tenta

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 19.

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

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

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

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

Tentamen OOP

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Tentamen, Algoritmer och datastrukturer

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

TENTAMEN OOP

Tentamen i 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. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Övningar Dag 2 En första klass

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

OBJEKTORIENTERAD PROGRAMMERING för Z1 (TDA540) Ansvarig: Jan Skansholm, tel eller

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

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

Tentamen i Programmeringsteknik I

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

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.

TDDC76 - Programmering och Datastrukturer

Tentamen TEN1 HI

Introduktion till arv

Tentamen i Programmeringsteknik I

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 för kursen Objektorienterad programvaruutveckling GU (DIT010)

Övningsuppgift. Repeterbara citat. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

Transkript:

Örebro universitet Institutionen för teknik Thomas Padron-McCarthy (Thomas.Padron-McCarthy@tech.oru.se) Tentamen i Objektorienterad programmering för D2 m fl onsdag 1 november 2006 kl 14:00-19:00 i L003 Hjälpmedel: Inga hjälpmedel. Poängkrav: Maximal poäng är 40. För betyget 3 respektive G krävs 20 poäng. Resultat: Meddelas på kursens hemsida senast onsdag 22 november 2006. Visning: Måndag 27 november 2006 kl 12:00-12:30 i mitt rum (T2220). Efter visningen kan tentor hämtas på expeditionen. Examinator och jourhavande: Thomas Padron-McCarthy, telefon 070-7347013. Skriv tydligt och klart. Lösningar som inte går att läsa kan naturligtvis inte ge några poäng. Oklara formuleringar kommer att misstolkas. Skriv den personliga tentamenskoden på varje inlämnat blad. Skriv inte namn eller personnummer på bladen. Lös bara en uppgift per blad. Skriv bara på en sida av papperet. Använd inte röd skrift. Antaganden utöver de som står i uppgifterna måste anges. Gjorda antaganden får inte förändra den givna uppgiften. Skriv gärna förklaringar om hur du tänkt! Även ett svar som är fel kan ge poäng, om det finns med en förklaring som visar att huvudtankarna var rätt. LYCKA TILL! 1 of 7 10/27/2006 10:31 AM

För alla uppgifter på tentan gäller: Man får använda både standard-c++ (som till exempel har pekare som anges med * och objekt som skapas med new) och Microsofts dialekt C++/CLI (som till exempel har pekare som anges med ^ och objekt som skapas med gcnew). Man kan dock få poängavdrag om man blandar ihop dem på ett felaktigt sätt, till exempel om man skapar ett objekt med gcnew och sen pekar på det med en *-pekare. Uppgift 1 (2 p) Vi ska testflyga en rymdraket. En viktig del av testflygningen är att samla in mätdata från olika sensorer, som till exempel mäter temperaturen på ett ställe i en raketmotor. (En "sensor" är alltså en liten apparat som mäter saker.) Helst ville vi lagra alla mätdata med hjälp av en databashanterare, men eftersom det kommer så mycket mätdata hinner databashanteraren inte med, så vi använder ett C++-program i stället. För att lagra de uppmätta mätvärdena skapar vi klassen Matvarde. Specifikationen för klassen, den så kallade klassdefinitionen, ser ut så här: class Matvarde { private: float matvarde; float felgrans; public: Matvarde(float matvarde, float felgrans = 0.0); float get_matvarde(); float get_min(); float get_max(); }; // Matvarde Medlemsvariabeln matvarde anger det uppmätta mätvärdet. Det finns inga negativa mätvärden. Tyvärr är givarna inte exakta, så det riktiga värdet kan skilja sig från vad vi mätte upp. Därför lagrar vi också en felgrans, som är felgränsen i procent av mätvärdet. Ett exempel är att om det uppmätta värdet är 30.0, och felgränsen är 20.0, så räknar man med att felet är högst 6.0, och att det riktiga värdet alltså ligger någonstans mellan 24.0 och 36.0. Det är de gränserna som ska returneras av funktionerna get_min och get_max. Implementera konstruktorn och de övriga medlemsfunktionerna. Uppgift 2 (2 p) Vi vill testa klassen Matvarde. Skriv en main-funktion som skapar ett matvärde (dvs ett Matvarde-objekt) och sen kollar att de tre medlemsfunktionerna get_matvarde, get_min och get_max ger rätt resultat. Om alla ger rätt resultat ska programmet skriva ut Rätt!, annars Fel!. I den här och alla andra uppgifter på tentan gäller: Om du ska använda en klass, funktion eller liknande sak från en tidigare uppgift, behöver du inte skriva koden för den på nytt. Du får också använda den även om du inte gjort uppgiften där man skulle skriva den. 2 of 7 10/27/2006 10:31 AM

Uppgift 3 (2 p) Från varje sensor samlas en väldig mängd uppmätta värden. Vi kanske registrerar ett värde från givarna tusen gånger i sekunden. En mätning av ett värde kallar vi för en datapunkt, och för att lagra en sådan skapar vi klassen Datapunkt. En Datapunkt ska innehålla tre privata medlemsvariabler: Ett mätvärde, som är ett objekt av klassen Matvarde. En tidpunkt, som lagras som ett flyttal. Datapunkterna ska lagras i en länkad lista, så det ska också finnas en pekare till nästa objekt i listan. Följande medlemsfunktioner ska finnas: En konstruktor, som på lämpligt sätt tar emot de värden som behövs för att ge medlemsvariablerna sina värden. Funktionen get_next, som returnerar en pekare till nästa objekt i den länkade listan. Funktionerna get_matvarde, get_min och get_max, som returnerar mätvärdet respektive dess min- och maxgräns. Funktionen get_tidpunkt, som returnerar tidpunkten. Skriv specifikationen (klassdefinitionen) för klassen Datapunkt. Uppgift 4 (3 p) Implementera konstruktorn och de övriga medlemsfunktionerna i klassen Datapunkt. (Ett tips: Det finns inget krav på att datapunkterna i den länkade listan ska lagras i någon särskild ordning.) Uppgift 5 (3 p) Nu vill vi testa klassen Datapunkt. Skriv en main-funktion som skapar tre datapunkter (dvs tre Datapunkt-objekt), hoplänkade i en länkad lista. Sen ska funktionen gå igenom de tre objekten i listan, summera värdena från get_min och get_max för de tre objekten, och till sist skriva ut de två summorna. 3 of 7 10/27/2006 10:31 AM

Uppgift 6 (9 p) Sensorerna i rymdraketen ska representeras av klassen Sensor. En Sensor ska lagra följande saker: Namnet på sensorn, till exempel Temperaturmätare 7 i vänster motor. Sensorns felgräns (i procent av mätvärdena). Alla mätvärdena som mätts upp sensorn. De är en länkad lista av Datapunkt-objekt. Följande medlemsfunktioner ska finnas: En konstruktor, som tar sensorns namn och felgräns som argument. Funktionen ny_matpunkt, som anropas när vi mätt upp ett nytt värde och vill lagra det. Funktionen ska se till att skapa ett nytt Datapunkt-objekt, som lagras i den länkade listan. Funktionen tar bara ett argument, nämligen det uppmätta värdet, som är ett flyttal. Felgränsen för mätvärdet kan fås från sensorns felgräns. Det finns en funktion som heter get_current_time som kan användas för att få fram aktuell tid. Den tar inte några argument, och den returnerar tiden som ett flyttal. Funktionen get_medel, som returnerar medelvärdet av alla mätvärdena. (Medelvärdet räknas ut genom att man summerar alla de uppmätta värdena, och sen delar den summan med antalet.) a) (2p) Skriv specifikationen (klassdefinitionen) för klassen Sensor. b) (1p) Implementera konstruktorn. c) (2p) Implementera medlemsfunktionen ny_matpunkt. d) (3p) Implementera medlemsfunktionen get_medel. e) (1p) Skriv en main-funktion som skapar en sensor, lägger in tre mätvärden med hjälp av ny_matpunkt, och till sist skriver ut medelvärdet som fås från get_medel. Uppgift 7 (3 p) a) (1p) Man kan säga att varje Sensor-objekt "äger" en länkad lista av mätpunkter. Klassen Sensor har ingen destruktor. I en miljö utan skräpsamling, som standard-c++, skulle det kunna uppstå ett problem eftersom destruktorn saknas. Vilket? b) (2p) Implementera destruktorn. (Om man använder en miljö som har skräpsamling, som C++/CLI, så behövs det egentligen inte någon destruktor, men skriv den i alla fall, som om det inte fanns någon skräpsamling.) 4 of 7 10/27/2006 10:31 AM

Uppgift 8 (3 p) Nu vill vi testa klassen Sensor lite mer uttömmande. Först behöver vi en fil med testdata. Skriv ett C++-program (med #include-rader och allt) som skapar en fil med en miljon slumpmässiga flyttal mellan 0 och 100. Du får själv bestämma vad filen ska heta, och om det ska vara en binärfil eller en textfil. Tips: Funktionen rand ger ett slumpmässigt heltal mellan 0 och RAND_MAX. Med följande uttryck kan man räkna ut ett slumpmässigt flyttal mellan 0 och 100: 100.0 * rand() / RAND_MAX Inkludera filen cstdio för att deklarera funktionen rand och konstanten RAND_MAX. Uppgift 9 (4 p) Skriv ett C++-program (med #include-rader och allt) som skapar en sensor, öppnar filen du skapade i uppgiften ovan, läser alla talen från filen, lägger in dem som mätvärden med hjälp av ny_matpunkt, och till sist skriver ut medelvärdet som fås från get_medel. Du kan anta att klassdefinitionen för klassen Sensor finns i filen Sensor.h, och så vidare med eventuella andra av dina klasser som du behöver. 5 of 7 10/27/2006 10:31 AM

Uppgift 10 (9 p) Världen består av vassa saker och runda saker. Vassa saker har en vasshet, som mäts med ett heltal. Runda saker har en diameter, som mäts med ett flyttal. Både vassa och runda saker har en virtuell medlemsfunktion peta, som simulerar vad som händer om man petar på saken. Vassa sakers peta-funktion skriver ut Aj!, och runda sakers peta-funktion skriver ut Rullerull!. Så här ser klassdefinitionerna ut: a) (1p) class VassSak { private: int vasshet; public: VassSak(int vasshet); virtual void peta(); }; class RundSak { private: double diameter; public: RundSak(double diameter); virtual void peta(); }; Skriv klassdefinitionen för klassen Sax. En sax är vass, och ska därför ärva VassSak. En sax har inga särskilda egenskaper förutom vassheten. Konstruktorn ska ta vassheten som argument. b) (1p) Implementera konstruktorn för Sax. c) (1p) Skriv klassdefinitionen för klassen Boll. En boll är rund, och ska därför ärva RundSak. Förutom diametern har en boll också en studskoefficient, som är ett flyttal. Konstruktorn ska ta både diametern och studskoefficienten som argument. När man petar på en boll ska bollen inte rulla utan studsa, så Boll ska ha en egen peta-funktion. d) (1p) Implementera konstruktorn för Boll. e) (1p) Implementera peta-funktionen för Boll. Den ska skriva ut Studselistuds!. f) (1p) Skapa klassen Igelkott. En igelkott är både rund och vass, och ska därför ärva både RundSak och VassSak. Förutom de ärvda egenskaperna har den ett antal taggar, som är ett heltal. Konstruktorn ska ta igelkottens alla egenskaper som argument. Igelkotten har också en egen peta-funktion. g) (1p) Implementera konstruktorn för Igelkott. 6 of 7 10/27/2006 10:31 AM

h) (1p) Implementera medlemsfunktionen peta för Igelkott. Den ska först anropa peta i VassSak, för att skriva ut Aj!, och sen ska den anropa peta i RundSak, för att skriva ut Rullerull!. Ledning till alla deluppgifterna: Med följande main-funktion: int main() { VassSak* vs = new VassSak(10); RundSak* rs = new RundSak(1.8); Sax* s = new Sax(10); Boll* b = new Boll(10.0, 0.9); Igelkott* i = new Igelkott(17.0, 4, 10000); } vs->peta(); rs->peta(); s->peta(); b->peta(); i->peta(); ska man få denna utmatning: Aj! Rullerull! Aj! Studselistuds! Aj! Rullerull! i) (1p) Vad blir utskrifterna om man i stället har följande main-funktion? int main() { VassSak* vs1 = new Sax(10); VassSak* vs2 = new Igelkott(17.0, 4, 10000); RundSak* rs = new Igelkott(19.3, 5, 11000); } vs1->peta(); vs2->peta(); rs->peta(); 7 of 7 10/27/2006 10:31 AM