Kontinuasjonseksamen

Like dokumenter
Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Eksamen. Objekt-orientert programmering

Eksamen. Grunnleggende programmering. EKSAMENSDATO: 6.desember 2016 TID: 16:00 20:00. (kalkulator er ikke tillatt)

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Eksamensoppgave i IMT1082 Objekt-orientert programmering

Eksamensoppgave i IMT1082 Objekt-orientert programmering

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

E K S A M E N. Grunnleggende programmering 03HBIND*, 03HBINFA, 03HBINE*, 03HBMETEA, 03HBMEMAA, 03HBGEOA

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

Høgskolen i Gjøvik Institutt for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

Kontinuasjonseksamen

Kontinuasjonseksamen

Eksamen. Objekt-orientert programmering KLASSE(R): 02HIND* 02HDMU* 02HINE* 02HING* 01HINGA 02HSIV5 02HGEOMAA

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

Kontinuasjonseksamen

E K S A M E N. Grunnleggende datakunnskap og programmering 02HIND*, 02HINE*, 02HDMU*, 02HING*, 02HGEOMAA, 02HSIV5

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

Kontinuasjonseksamen

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

Kontinuasjonseksamen

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

Kontinuasjonseksamen

Eksamen. Objekt-orientert programmering 04HBIND*, 04HBINFA, 04HBMETEA

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamensoppgave i IMT1031(F) Grunnleggende programmering

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

Kontinuasjonseksamen

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

Kontinuasjonseksamen

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

KONTINUASJONSEKSAMEN

Eksamen. Objekt-orientert programmering 03HBIND*, 03HBINFA, 03HBMETEA

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

Høgskolen i Gjøvik Institutt for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

E K S A M E N 96HINDA / 96HINDE (1 AA / AE)

KONTINUASJONSEKSAMEN

Høgskolen i Gjøvik. Eksamen. Objekt-orientert programmering 98HINDA / 98HINDB / 98HINEA 98HDMUA / 98HDMUB

E K S A M E N. Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 5. desember HIND*, 01HINE*, 01HDMU*, 01HING* TID:

KONTINUASJONSEKSAMEN

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

Eksamen. Objekt-orientert programmering

E K S A M E N. Grunnleggende datakunnskap og programmering 99HINDA / 99HINDB / 99HINEA 99HDMUA / 99HDMUB / 99HINGA

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

GJØVIK INGENIØRHØGSKOLE

Eksamen 00HINDA / 00HINDB / 00HINEA 00HDMUA / 00HDMUB

E K S A M E N. - Kontroller at alle oppgavearkene er tilstede. - Les hele oppgaveteksten nøye, før du begynner å besvare noe som helst.

K O N T I N U A S J O N S E K S A M E N

Eksamen. Objekt-orientert programmering. EKSAMENSDATO: 25. mai HINDA / 99HINDB / 99HINEA 99HDMUA / 99HDMUB TID: Høgskolen i Gjøvik

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

E K S A M E N. Grunnleggende datakunnskap og programmering 98HINDA / 98HINDB / 98HINEA 98HDMUA / 98HDMUB / 98HINGA

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

Kontinuasjonseksamen

E K S A M E N. Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 7. desember HINDA / 00HINDB / 00HINEA 00HDMUA / 00HDMUB / 00HINGA

Grunnleggende datakunnskap, programmering og datastrukturer 97HINDA / 97HINDB / 97HDMUA

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

Høgskolen i Gjøvik E K S A M E N. FAGLÆRER: Frode Haug KLASSE: 1 AA / AE

Kontinuasjonseksamen

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag K O N T I N U A S J O N S E K S A M E N. EKSAMENSDATO: 8. august 1995 TID:

E K S A M E N. Grunnleggende programmering 04HBIND*, 04HBINE*, 04HBINFA, 04HBMETEA, 04HBGEOA. ANTALL SIDER UTLEVERT: 8 (inkludert denne forside)

GJØVIK INGENIØRHØGSKOLE

Eksamen 01HIND* / 01HINE* / 01HDMU*

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag K O N T I N U A S J O N S E K S A M E N. EKSAMENSDATO: 11. august 1995 TID:

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 99HINDB / 99HINEA / 00HDESY ( 2DA / 2DB / 2EA / DESY )

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 00HINDB / 00HINEA ( 2DA / 2DB / 2EA ) TID:

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

KONTINUASJONSEKSAMEN

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag E K S A M E N. EKSAMENSDATO: 12. desember 1995 TID:

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Høgskolen i Gjøvik Institutt for informatikk og medieteknikk E K S A M E N. 04HBIND* / 04HBINFA / div. andre

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

1. Grunnleggende C Introduksjon til kurset og til C++ Innhold

UNIVERSITETET I OSLO

EKSAMEN. Algoritmiske metoder I KLASSE: 97HINDA / 97HINDB ( 2DA / 2DB )

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

KONTINUASJONSEKSAMEN

E K S A M E N. EKSAMENSDATO: 15. desember 1994 TID: Kladd og oppgavearkene leveres sammen med besvarelsen. Kladd merkes med "KLADD".

Transkript:

Kontinuasjonseksamen EMNENAVN: EMNENUMMER: Objekt-orientert programmering IMT1082 EKSAMENSDATO: 12. august 2016 TID: 09:00 13:00 EMNEANSVARLIG: Frode Haug ANTALL SIDER UTLEVERT: TILLATTE HJELPEMIDLER: 8 (inkludert denne forside) Alle trykte og skrevne. (kalkulator er ikke tillatt) Kontroller at alle oppgavearkene er til stede. Innføring med penn som gir gjennomslag på tre stk ark. Pass på så du ikke skriver på mer enn ett innføringsark om gangen (det blir uleselige gjennomslag når flere ark ligger oppå hverandre). Ved innlevering skilles hvit og gul besvarelse og legges i hvert sitt omslag. Oppgavetekst, kladd og blåkopi beholder kandidaten. Husk kandidatnummer på alle ark.

NB: Oppgave 1a, 1b, 1c og 2 er totalt uavhengige og kan derfor løses separat. Oppgave 1 (30%) a) Det nedenfor stående programmet var det ønskelig at gav følgende utskrift: Sommerens festforestillinger: 0/0: Bruce, Oslo 0/0: Sting, Hamar 28/7: Bruce, Oslo 6/8: Sting, Hamar Ulike Men, i koden er det fem feil av typen syntaktiske (som kompilatoren reagerer på) og/eller semantiske (logiske, som gjør at programmet ikke fungerer som ønsket). Hvilke? NB: Tallene helt til venstre på hver linje er ikke en del av koden, men kun ment som linjenummer, slik at du enklere kan henvise til hvor feilene er å finne. 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 class Artist { 5 private: 6 char navn[20], sted[2]; 7 int dato; 8 public: 9 Artist(char* n, char* s, int d) 10 { strcpy(navn, n); strcpy(s, sted); dato = d; 11 void skriv() 12 { cout << '\t' << dato / 100 << '/' << dato % 100 << ": " 13 << navn << ", " << sted << '\n'; 14 void operator = (int d) { dato = d; 15 bool operator == (Artist* a) 16 { return (dato % 100 == a.dato % 100); 17 ; 18 int main() { 19 Artist *a1 = new Artist("Bruce", "Oslo", 0), 20 *a2 = new Artist("Sting", "Hamar", 100); 21 cout << "Sommerens festforestillinger:\n"; 22 a1->skriv(); a2->skriv(); 23 *a1 = 2807; *a2 = 608; 24 a1->skriv(); a2->skriv(); 25 cout << '\t' << ((a1 == a2)? "Samme" : "Ulike") << '\n'; 26 return 0; 27 2

b) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> using namespace std; char txt1[] = "RONDANEHYTTA-ROMMET-FAMILIEN"; char txt2[] = "FLEKKEROYABURSDAG-I-IGLANDGARASJEN"; void funk(char* t, char c) { while (*t < c) cout << *t++; void funk(char* t, int a, int b = 22, int c = 4) { for (int i = a; i < b; i += c) cout << *(t + i) << ' '; char funk(char* t1, char* t2) { while (*t1 < *t2) { t1++; t2++; return *t2; int main() { funk(txt1 + 3, 'T'); funk(txt2, 7, 28, 3); funk(txt1, 6); cout << funk(txt2, txt1 + 7) funk(txt2+9, funk(txt2, txt1)); return 0; cout << '\n'; cout << '\n'; cout << '\n'; << '\n'; cout << '\n'; c) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> using namespace std; class A { protected: int nr; public: A(int n) { nr = n; void display() { cout << "Nr: " << nr; virtual void funk(int i) { nr += i; bool operator < (int i) { return (nr < i); ; class B : public A { private: int alder; public: B(int n, int a) : A(n) { alder = a; void display() { cout << "Alder: " << alder; void display2() { cout << "Nr: " << nr << " Alder: " << alder; void funk(int i) { alder -= i; bool operator < (int i) { return (alder < i); ; int main() { A* apeker; B* bpeker = new B(312, 41); bpeker->display2(); cout << '\n'; apeker = bpeker; apeker->display(); cout << '\n'; if (*bpeker < 42) cout << "DANE\n"; else cout << "RON\n"; if (*apeker < 42) cout << "RON\n"; else cout << "DANE\n"; apeker->funk(12); bpeker->funk(12); bpeker->display2(); cout <<'\n'; return 0; 3

Oppgave 2 (70%) Les hele teksten for denne oppgaven nøye, før du begynner å besvare noe som helst. Studér vedlegget, som inneholder mange viktige opplysninger som du trenger/skal bruke. Legg spesielt merke til constene, klassen med datamedlemmer og (ferdiglaget) funksjon, globale variable, main(), de tre ferdiglagde les( )-funksjonene. Bruk alt dette svært aktivt. Barn/ungdommer (heretter kalt deltagere ) kan delta på ulike aktiviteter ved en skole/fritidsklubb el.l. De deltar på maksimum en aktivitet pr.uke. Men, kan gjerne velge en helt annen aktivitet neste uke enn det de deltar på i inneværende uke. Når en uke (mandag-fredag) er over/slutt, blir alle deltagernes valg nullstilt, og deres valg/ønsker for den neste uken blir registrert før den nye uken starter. Datastrukturen Datastrukturen består (se vedlegget) av en array (aktiviteter) med lister. Her er alle indeksene i f.o.m. nr.0 t.o.m nr. MAXAKTIVITET i bruk. Alle deltagere som for øyeblikket ikke er har valgt en aktivitet (listene 1-MAXAKTIVITET) ligger i liste nr.0. Klassen, dens arv, alle data-medlemmer og alle prototyper for medlemsfunksjoner er komplett og fullstendig deklarert/definert i vedlegget. Din oppgave blir å skrive innmaten til funksjoner inni og utenfor klassen. Oppgaven a) Skriv innmaten til funksjonen void skrivaktivitetsmeny() Funksjonen skal skrive en meny med de aktuelle aktivitetene, jfr. NAVN. Indeks nr.0 skal ikke skrives ut. Utskriften skal ha følgende utseende: Følgende aktiviteter tilbys (og deres numre): 1: Dans 2: Forming 3: Matlaging osv. b) Skriv innmaten til funksjonene void nydeltager() og Deltager::Deltager(int nr) Den første funksjonen skriver den nye deltagerens nummer. Deretter legges den nye deltageren inn i liste nr.0, og alle vedkommendes data leses inn (vha. den andre funksjonen). Husk på et tidspunkt å øke nummeret til neste deltager. c) Skriv innmaten til funksjonen void velgaktivitet() Funksjonen leser først et aktuelt deltagernummer. Har vedkommende allerede valgt en aktivitet, så kommer det en melding. I motsatt fall spørres det etter et lovlig og ønsket nummer for aktivitet, og vedkommende flyttes til den aktuelle listen. d) Skriv innmaten til funksjonene void skrivstatus() og void Deltager::display() Den første funksjonen leser automatisk den andre bokstaven (som kommer etter S ). Er det A, gås det gjennom alle listene (0 - MAXAKTIVITET), og listens nummer og antallet i listen skrives sammen på en og en linje. Er den andre bokstaven E, så spørres det etter et listenummer (0 - MAXAKTIVITET), og hele listens innhold blir skrevet ut. Er det hverken A eller E, så kommer en egen melding. Den andre funksjonen skriver ut alle deltagerens data på en linje. 4

e) Skriv innmaten til funksjonen void nullstillalle() Brukeren spørres først om vedkommende virkelig ønsker å utføre denne kommandoen. Er svaret J, utføres resten av funksjonens innmat. Den går i så fall gjennom alle listene nr.1 - MAXAKTIVITET og flytter hele deres innhold over i liste nr.0. f) Skriv innmaten til funksjonen void skrivendeltager() Funksjonen leser først et aktuelt deltagernummer. Det gås så gjennom alle listene og letes etter vedkommende. Når vedkommende blir funnet, skrives nummeret på den aktuelle listen, navnet på aktiviteten, samt alle deltagerens data ut på skjermen. Søket etter vedkommende avsluttes da umiddelbart. Er deltageren ikke å finne i noen av listene, kommer det en egen melding. g) Skriv innmaten til funksjonen void lesfrafil() og den andre constructoren i klassen Filen AKTIVITETER.DTA har følgende format: <nestedeltagernr> <Antall deltagere i liste nr.n (der N er: 0 MAXAKTIVITET)> <Deltagernr for nr.1 i liste nr.x> <Telefon nr.1 i liste nr.x> <Navn nr.1 liste nr.x> <Deltagernr for nr.2 i liste nr.x> <Telefon nr.2 i liste nr.x> <Navn nr.2 liste nr.x>.... Lag funksjonene som til sammen sørger for at alle data blir lest inn fra en fil med dette formatet. Annet (klargjørende): Du skal bruke ListTool2A ifm. løsningen av denne oppgaven. Du skal ikke bruke string-klassen (læreboka side 302-310), kode fra STL, templates eller andre større hjelpebiblioteker. Men, de vanligste includer brukt i hele 1.klasse er tilgjengelig. En vanlig bruk av programmet vil være at man utfører V i helgen (fredag-søndag), ut fra deltageres innspill/ønsker (via mail, SMS, muntlig, ). Kommandoen D vil da også være meget aktuell. Men, begge disse kan strengt tatt utføres når som helt i løpet av uken også. Kommandoen N kjører man på fredag kveld/lørdag morgen. Den bør rimeligvis ikke kjøres i løpet av uken. Alle de andre kommanoene ( A, S x og E ) er jo bare å skrive ut diverse, og kan derfor utføres når som helst. Det er ikke mulig å endre, slette eller flytte (når aktivitet først er valgt for en uke) en deltager. Gjør dine egne forutsetninger og presiseringer av oppgaven, dersom du skulle finne dette nødvendig. Gjør i så fall klart rede for disse i starten av din besvarelse av oppgaven. Lykke til med aktiviteten Eksamen! FrodeH 5

Vedlegg: Halvferdig programkode // INCLUDE: #include <iostream> #include <fstream> #include <cstring> #include <cctype> #include <iomanip> #include "ListTool2A.h" using namespace std; // cin, cout // ifstream // strcpy, strlen // toupper // setw // CONST: const int STRLEN = 80; // Max. lengde for en tekststreng. const int FORSTENR = 1000; // Første deltagernummer. const int MAXAKTIVITET = 10; // Max. antall aktiviteter som tilbys. const int MINTLF = 10000000; // Min. telefonnummer. const int MAXTLF = 99999999; // Max. telefonnummer. const char NAVN[MAXAKTIVITET+1][20] = // Aktivitetsnavnene: { "", "Dans", "Forming", "Matlaging", "Instrument", "Sang", "Spill", "Fotball", "Volleyball", "Bordtennis", "Bowling" ; // KLASSE: class Deltager : public NumElement { private: // number = deltagernr char* navn; // Deltagerens navn. int tlf; // Detlagerens telefonnummer. public: Deltager(int nr); // Oppgave 2B Deltager(int nr, ifstream & inn); // Oppgave 2G ~Deltager() { delete [] navn; // Ferdiglaget void display(); // Oppgave 2D ; // DEKLARASJON AV FUNKSJONER: void skrivmeny(); // char les(); // Ferdiglaget int les(const char* t, const int MIN, const int MAX); // void les(const char* t, char* s, const int LEN); // void skrivaktivitetsmeny(); // Oppgave 2A void nydeltager(); // Oppgave 2B void velgaktivitet(); // Oppgave 2C void skrivstatus(); // Oppgave 2D void nullstillalle(); // Oppgave 2E void skrivendeltager(); // Oppgave 2F void lesfrafil(); // Oppgave 2G // GLOBALE VARIABLE: List* aktiviteter[maxaktivitet+1]; // Lister med deltagere på aktiviteter. int nestedeltagernr = FORSTENR; // Neste nye deltagers nummer. int main() { // HOVEDPROGRAM: char valg; // Brukerens valg/kommando. for (int i = 0; i <= MAXAKTIVITET; i++) // Initierer alle de aktiviteter[i] = new List(Sorted); // tomme listene. lesfrafil(); // Oppgave 2G skrivmeny(); 6

cout << "\n\n\nkommando: "; valg = les(); while (valg!= 'Q') { switch (valg) { case 'A': skrivaktivitetsmeny(); break; // Oppgave 2A case 'D': nydeltager(); break; // Oppgave 2B case 'V': velgaktivitet(); break; // Oppgave 2C case 'S': skrivstatus(); break; // Oppgave 2D case 'N': nullstillalle(); break; // Oppgave 2E // skrivtilfil(); cout << "\n\n"; return 0; case 'E': skrivendeltager(); break; // Oppgave 2F default: skrivmeny(); break; cout << "\n\n\nkommando: "; valg = les(); // ************************************************************************* // ****************** DEFINISJON AV MEDLEMS-FUNKSJONER: ****************** // ************************************************************************* // Leser/setter alle deltagerens data: Deltager::Deltager(int nr) : NumElement(nr) { // Oppgave 2B: Lag innmaten // Leser alle data fra fil: Deltager::Deltager(int nr, ifstream & inn) : NumElement(nr) { // Oppgave 2G: Lag innmaten void Deltager::display() { // Oppgave 2D: Lag innmaten // Skriver alle data til skjerm: // **************************************************************************** // ****************** DEFINISJON AV (GLOBALE) FUNKSJONER: ****************** // **************************************************************************** void skrivmeny() { // Skriver alle mulige menyvalg: cout << "\n\nfølgende KOMMANDOER ER TILGJENGELIGE:" << "\n A - skriv Aktivitetsmeny" << "\n D - ny Deltager" << "\n V - Velg aktivitet" << "\n S A - Skriv hovedstatus for ALLE aktiviteter" << "\n S E - Skriv detaljert status for EN aktivitet" << "\n N - Nullstill alle valg" << "\n E - skriv alt om EN deltager" << "\n Q - Quit / avslutt"; 7

char les() { // Leser og upcaser ett tegn: char ch; cin >> ch; cin.ignore(); return (toupper(ch)); // Leser et heltall mellom MIN og MAX: int les(const char* t, const int MIN, const int MAX) { int n; do { cout << '\t' << t << " (" << MIN << '-' << MAX << "): "; cin >> n; cin.ignore(); while (n < MIN n > MAX); return n; // Leser inn en tekst: void les(const char* t, char* s, const int LEN) { do { cout << '\t' << t << ": "; // Skriver ledetekst. cin.getline(s, LEN); // Leser inn tekst. while (strlen(s) == 0); // Sjekker at tekstlengden er ulik 0. void skrivaktivitetsmeny() { // Oppgave 2A: Lag innmaten // Skriver meny for alle aktivitetene: void nydeltager() { // Oppgave 2B: Lag innmaten // Legger inn en ny deltager: void velgaktivitet() { // Oppgave 2C: Lag innmaten // Deltager velger (om mulig) aktivitet: // Skriver antallet på hver aktivitet void skrivstatus() { // ELLER detaljert om EN aktivitet: // Oppgave 2D: Lag innmaten void nullstillalle() { // Oppgave 2E: Lag innmaten // Om ønskelig flyttes ALLE til liste nr.0: void skrivendeltager() { // Oppgave 2F: Lag innmaten // Finn og skriv ALT om en deltager: void lesfrafil() { // Oppgave 2G: Lag innmaten // Leser HELE datastrukturen fra fil: 8