FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I

Relevanta dokument
LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

TDIU01 (725G67) - Programmering i C++, grundkurs

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

C++ - En introduktion

TDIU01 - Programmering i C++, grundkurs

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

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

Programmering i C++ EDA623 Strömmar och filer. EDA623 (Föreläsning 9) HT / 19

Föreläsning 1: Momstabellen i C++

TDDC76 - Programmering och Datastrukturer

TDIU01 - Programmering i C++, grundkurs

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,

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

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs

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

Lösningsförslag tentamen FYTA11 Java

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

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

C++ - En introduktion

Tentamen EDAF30 Programmering i C++

Tentamen ges för: Tentamensdatum: Tid:

TDIU01 - Programmering i C++, grundkurs

C++ Slumptalsfunktioner + switch-satsen

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

TDIU01 Programmering i C++

Programmering i C++ EDAF hp. EDAF30 (Föreläsning 2) HT / 18

TDIU01 - Programmering i C++, grundkurs

Introduktionslaboration

Skizz till en enkel databas

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

TDDC76 - Programmering och Datastrukturer

Grundläggande programmering med C# 7,5 högskolepoäng. Provmoment: Ladokkod: Tentamen ges för: TEN1 NGC011 ADAEK17, ASYST17 samt öppen för alla

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

Enkla datatyper minne

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

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

TDDC76 - Programmering och Datastrukturer

TDIU01 - Datortenta (DAT2)

EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Administration. EDAf30: Programmering i C++, 7.5 hp Obligatoriska moment

Tentamen Grundläggande programmering

HI1024 Programmering, grundkurs TEN

Avrundning och manipulatorer

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1,

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 13. Omtentamen i Programmering C, 5p, A1, D1, PA1, Fri,

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

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

C++ Lektion Tecken och teckenfält

TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap

Introduktionslaboration

DD2387 Programsystemkonstruktion med C++ Tentamen 2

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

TENTAMEN OOP

Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

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

Tentamen i DD2387 Programsystemkonstruktion med C++

En villkorssats är den konstruktion som finns i C++ för att göra en selektion av två alternativa sekvenser. Formen för if satsen är

Funktionens deklaration

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33

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

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

TDIU01 - Datortenta (DAT2)

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

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

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

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

Tentamen OOP

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

Lämna in en ifylld kursvärdering tillsammans med tentan! Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl

1 Funktioner och procedurell abstraktion

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Högskolan Dalarna sid 1 av 5 Data-avdelningen Hans-Edy Mårtensson

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Repetition C-programmering

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

Objektorienterad Programmering (TDDC77)

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

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

Högskolan Dalarna sid 1 av 5 Data-sektionen Hans-Edy Mårtensson

Tentamen EDAF30 Programmering i C++

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

LABORATION 4 OBJEKTORIENTERAD PROGRAMMERING I C++ I

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

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

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

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

2D1387, Programsystemkonstruktion med C++ Johnny Bigert, Kursens hemsida:

Användarhandledning Version 1.2

En kort text om programmering i C.

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

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 finns många flaggor till g++,

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN1 - Teoretisk tentamen Tid: Torsdagen den 20 oktober 2011,

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

2 Pekare och dynamiska variabler.

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.

Transkript:

FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I 2002-03-18 Betygsgränser: 3 14 poäng 4 20 poäng 5 27 poäng Maxpoäng: Hjälpmedel: 32 poäng Bilagd ASCII-tabell Lycka till Per Ekeroot

Per Ekeroot 2 Uppgift 1 a) Beräkna följande uttryck med hänsyn till de regler som gäller i C++: 13 / 0.5 10 * 8 / 9 + 23 % 4 8 / 9 * 10 Svar: 21 ( = 26-80/9 + 3-0 *10 = 26 8 + 3 0 = 21 ) (9p) b) Utgå från följande deklarationer: float tal1, tal2; bool ok; Skriv ett kodavsnitt som innehåller en loop vars kropp utförs minst en gång och som upprepas så länge tal1 är större eller lika med tal2 och ok är sann. Förslag till lösning: do //Kod t.ex cout << tal1 << " " << tal2 << endl; tal2 += 2.75; while(tal1 >= tal2 && ok); c) Vilka värden antar variablerna ok1, ok2 resp. ok3 efter att följande satser utförts? int i=3, j=1, k=4, m=5 bool ok1 = j >= i k == m; bool ok2 = k + m < j 3 - j >= k; bool ok3 = m <= 5 && k < m; Svar ok1 = false, ok2 = false, ok3 = true d) Vad utför följande funktion? char getchar(string s) char ch = 'A'; if (s.length() > 4) ch = s[4]; return ch; Svar: Om strängen s är längre än 4 tecken returneras det femte tecknet annars returneras tecknet A. e) Deklarera en pekare till ett flyttal och allokera plats för flyttalet på heapen. Lägg sedan in värdet 2.75 på den allokerade platsen. Lösningsförslag: float *flyttal = new float; *flyttal = 2.75;

Per Ekeroot 3 Uppgift 2 Trädhöjd (4p) Man kan approximera ett träd med en kon där trädets topp är konens spets och trädets bas vid marken är konens bas. Med denna approximation skall du nu göra ett program som beräknar höjden av ett träd (d.v.s. höjden av en kon) med hjälp av trädbasens (konbasens) omkrets enligt formler nedan. Basomkretsen Tvärsnittsradie? 2?? Trädhöjden? Tvärsnittsradien? Höjdfaktorn Tvärsnittsradie Här är höjdfaktorn en konstant med värdet 100. Den gör att trädhöjden beräknas i meter om inmatningen av omkretsen sker i meter. Programmet skall uppfylla följande kriterier:?? Pi (3.14) och höjdfaktorn (100) skall deklareras som konstanter i början av programmet.?? Inmatning av basomkretsen skall ske från tangentbordet i enheten meter.?? Trädhöjden skall beräknas och skrivas ut på skärmen. Formatera utskriften så att 3 decimaler visas. Lösningsförslag: // Förslag till lösning på upg 2 // Tentamen 2002-03-18 // Per Ekeroot 2002-03-25 #include <iostream> #include <conio> #include <iomanip> using namespace std; int main() const int HOJDFAKTOR = 100; const float PI = 3.14; float radie = 0, omkrets = 0, hojd = 0; clrscr(); cout << "Mata in trädets omkrets vid dess bas: "; cin >> omkrets; radie = omkrets / (2 * PI); hojd = radie * HOJDFAKTOR; cout << fixed << setprecision(3); cout << "Trädets höjd = " << hojd; getch(); return 0;

Per Ekeroot 4 Uppgift 3 (4p) Vad skrivs ut av följande programavsnitt? a) Skriv på ett rutat papper med ett tecken i varje ruta. Markera bildskärmens övre vänstra hörn. while(row>=1) col=1; while(col<=6) if(row%2==0) cout << setw(2) << right << ">"; else cout << setw(2)<< left << "<"; ++col; --row; cout << endl; b) int tal1=12, tal2=7, *ptal1, *ptal2; ptal1 = &tal1; ptal2 = &tal2; *ptal1 = 2 * *ptal2; *ptal2 = - *ptal2; cout << tal1 << : << tal2; Svar: Frågan var inte fullständig. Följande rad saknades i deluppgift a): int col, row = 5; Med denna rad inlagd som första rad i programmet under a) blir utskriften:

Per Ekeroot 5 Uppgift 4 Skriv en funktion som kontrollerar om ett postnummer har rätt format. Ett postnummer skrivs: 831 55, dvs. enbart med siffror och ett mellanslag mellan tredje och fjärde siffran. Vi bortser från hur postnumret skrivs om man skickar post från utlandet. Kravspecifikation: Funktionens indata ska vara en sträng som innehåller postnumret. Funktionen ska returnera true om postnumret har rätt format annars returneras false. Dessutom ska funktionen returnera en meddelandesträng (se nedan) Postnumrets format ges av ### ##, där # är en siffra. Observera mellanslaget mellan tredje och fjärde siffran. Funktionen ska utföra följande kontroller: o postnumrets längd ska var 6 tecken. o postnumret ska innehålla ett mellanslag efter tredje tecknet. o postnumret ska innehålla enbart siffror förutom mellanslaget Meddelandesträngen ska ges följande innehåll beroende på utfallet av ovanstående kontroller: o Korrekt postnummer om postnumret har rätt format. o Felaktigt postnummer, plus en eller flera av följande strängar fel längd om längden inte är lika med 6 tecken. fel avdelare om mellanslaget saknas i position fyra. felaktig siffra om något annat tecken än en siffra angivits i någon av sifferpositionerna. (6p) Förslag till lösning: bool kollapostnr(const string postnr, string &errormessage) bool postnrok = true; errormessage = ""; // Kolla att postnumrets längd är 6 if(postnr.length()!= 6 ) errormessage += ", fel längd"; postnrok = false; // Kolla att avdelaren är ett mellanslag if( postnr[3]!= ' ') errormessage += ", fel avdelare"; postnrok = false; // Forts på nästa sida

Per Ekeroot 6 // Kolla så att platserna för siffror innehåller siffror bool digitsok = true; for(unsigned int i=0; i<postnr.length(); i++) if( postnr[i]<48 postnr[i]>57 ) digitsok = false; if(i==2) i++; if(!digitsok) errormessage += ", felaktiga tecken för siffrorna"; postnrok = false; // Redigera felmeddelandet, skicka funktionens returvärde if(postnrok) errormessage = "Korrekt postnummer"; else errormessage = "Felaktigt postnummer" + errormessage; return postnrok;

Per Ekeroot 7 Uppgift 5 (9p) Du har fått i uppdrag att skriva ett program som gör beräkningar och presenterar statistik på data från mätningar som har gjorts av bilars hastighet. Under en tidsperiod mäter man hastigheten för de bilar som passerar mätplatsen, t.ex. en skola. Det instrument som används för hastighetsmätningen skriver mätningarna på en pappersremsa. Man vill sedan sammanställa mätningarna i form av medelhastighet, antalet fortkörare etc. Det är din uppgift att skriva ett program i vilket man kan mata in, beräkna, skriva ut och spara data enligt specifikationen nedan. Kravspecifikation: Hastighet mäts i km/timme med 1 decimals noggrannhet. Inmatningar som ska göras till programmet: o antal mätvärden. o hastigheterna. o gällande hastighetsgräns. Följande beräkningar ska göras: o medelhastighet o antal bilar som kört fortare än hastighetsgränsen Skriv en funktion för: o inmatning av mätvärden till vektorn. o beräkning av medelhastighet o beräkning av antalet fortkörare o utskrift av statistik. Statistiken ska bestå av: antal mätvärden medelhastighet antal fortkörare o att spara mätvärdena på en textfil Skriv ett huvudprogram med följande programstruktur o Skriv en rubrik o Användaren av programmet matar från tangentbordet in antalet mätvärden och gällande hastighetsgräns. o Skapa en dynamisk vektor med plats för alla mätvärden. o Låt användaren mata in mätvärdena till vektorn. o Skriv ut resultaten från mätningarna (de beräknade värdena) o Spara mätvärdena på en textfil efter att användaren matat in ett filnamn. Förslag till lösning: se nästa sida!

Per Ekeroot 8 // hastigheter.cpp // Per Ekeroot 2002-03-12 #include <iostream> #include <fstream> #include <conio> #include <iomanip> #include <string> using namespace std; // Funktionsprototyper void velocityinput(float v[], int num); float avevelocity(const float v[], int num); int numoverlimit(const float v[], int num, float limit); void showstat(const float v[], int num, float limit); void savevelocityonfile(const float v[], int num, string filename); // Huvudprogram int main() cout << "Beräkning av statisk för bilars hastighet" << endl << endl; cout << "Ange antal mätvärden : " ; int nr; cin >> nr; cout << "Ange hastighetsbegränsning: " ; float velocitylimit; cin >> velocitylimit; // Skapa en vektor dynamiskt float *velocity = new float[nr]; // Mata in hastigheter velocityinput(velocity,nr); // Skriv resultat av mätningarna showstat(velocity,nr,velocitylimit); // Spara data på fil cout << endl << "Ange filnamn för fil att spara mätningarna på: "; string filen; cin >> filen; savevelocityonfile(velocity, nr, filen); return 0; // ----- Mata in hastigheter ---------------------------------------------------

Per Ekeroot 9 void velocityinput(float v[], int num) cout << endl << "Mata in hastigheter i [km/h]." << endl; for(int i=0; i<num; i++) cout << "Hastighet nr " << i+1 << ": " ; cin >> v[i]; cin.get(); // ------ Beräkna medelhastighet ----------------------------------------------- float avevelocity(const float v[], int num) float sum =0; for(int i=0; i<num; i++) sum += v[i]; return sum / num; // ----- Beräkna antal fortkörare ---------------------------------------------- int numoverlimit(const float v[], int num, float limit) int numover =0; for(int i=0; i<num; i++) if( v[i] > limit) numover++; return numover; // ----- Skriv ut resultatet av mätningarna ------------------------------------ void showstat(const float v[], int num, float limit) cout << endl << endl << fixed << setprecision(1); cout << "Statistik för hastighetsmätning" << endl << endl; cout << "Antal mätningar : " << num << endl; cout << "Hastighetsgräns : " << limit << endl; cout << "Medelhastighet [km/h]: " << avevelocity(v,num) << endl; cout << "Antal fortkörare : " << numoverlimit(v, num, limit) <<endl<<endl; // ----- Spara mätningarna på fil ---------------------------------------------- void savevelocityonfile(const float v[], int num, string filename) fstream f(filename.c_str(),ios::out); if(f.is_open()); for(int i=0; i<num; i++) f << v[i] << endl; f.close();