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

Like dokumenter
Kontinuasjonseksamen

Kontinuasjonseksamen

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

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

Kontinuasjonseksamen

Kontinuasjonseksamensoppgave i IMT1031(F) Grunnleggende programmering

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

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

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

Eksamen. Objekt-orientert programmering

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

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

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

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 Institutt for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert 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 KLASSE(R): 02HIND* 02HDMU* 02HINE* 02HING* 01HINGA 02HSIV5 02HGEOMAA

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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

Kontinuasjonseksamen

Eksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

Eksamensoppgave i IMT1082 Objekt-orientert programmering

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

KONTINUASJONSEKSAMEN

KONTINUASJONSEKSAMEN

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

Kontinuasjonseksamen

Kontinuasjonseksamen

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

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

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

KONTINUASJONSEKSAMEN

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

Kontinuasjonseksamen

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

Kontinuasjonseksamen

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

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

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

Kontinuasjonseksamen

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

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

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

GJØVIK INGENIØRHØGSKOLE

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

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.

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

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

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

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

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

Kontinuasjonseksamen

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

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

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

Kontinuasjonseksamen

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

KONTINUASJONSEKSAMEN

Eksamen. Objekt-orientert programmering

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:

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

GJØVIK INGENIØRHØGSKOLE

Kontinuasjonseksamen

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

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

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

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

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

KONTINUASJONSEKSAMEN

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

KONTINUASJONSEKSAMEN

UNIVERSITETET I OSLO

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:

Kontinuasjonseksamen

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

HØYSKOLEN I OSLO, AVDELING FOR INGENIØRUTDANNING

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

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

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:

Eksamen EMNENAVN: EMNENUMMER: Grunnleggende programmering IMT1031 (F) EKSAMENSDATO: 6.desember 2016 TID: 16:00 20:00 EMNEANSVARLIG: Frode Haug ANTALL SIDER UTLEVERT: TILLATTE HJELPEMIDLER: 7 (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 og 2 er totalt uavhengige og kan derfor løses separat. Oppgave 1 (30%) a) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> using namespace std; char txt[] = "LORDAG-STOKE-BOURNEMOUTH-SONDAG-LEEDS-NEWCASTLE"; int main() { int i = 29, j = 52 % 9, k = i - (j * 4) + (j % 4); cout << txt[j] << ' ' << txt[k] << ' ' << txt[i] << '\n'; while (j + k * 2 < i) { k *= 2; cout << txt[j + k] << ' ' << txt[i - k] << '\n'; j = i % 10; k = i / 10 + 3; for (int m = k; m < j; m += 2) cout << txt[m] << ' ' << txt[m + j + k] << '\n'; return 0; b) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> #include <cstring> using namespace std; class Pub { private: char navn[20], adr[20]; public: Pub(char n[], char a[]) { strcpy(navn, n); strcpy(adr, a); void funk() { cout << navn << ", " << adr; void funk(bool b, int i) { cout << ((b)? navn[i] : adr[i]); Pub funk(pub & p) { return (Pub(p.navn, adr)); bool funk(pub & p1, Pub & p2) { return ((navn[2] == p1.navn[5]) && navn[2] == p2.navn[8]); ; int main() { Pub p1("theglebe", "GlebeStr"), p2("thebingleyarms", "ChurchLane"), p3("thegunners", "BlackstockRoad"); p3.funk(); cout << " "; p2.funk(); cout << '\n'; p3.funk(false, 5); p1.funk(true, 7); cout << '\n'; Pub p4 = p2.funk(p1); p4.funk(); cout << '\n'; cout << p3.funk(p1, p2) << '\n'; cout << p3.funk(p1, p1.funk(p2)) << '\n'; return 0; 2

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 merke til constene, klassene med datamedlemmer og (ferdiglagde) funksjoner, globale variable, main() og andre ferdiglagde funksjoner. Bruk alt dette svært aktivt. Legg spesielt merke til den ferdiglagde void registrerdeltagereellerlesfrafil(). En person har i oppgave å organisere en tur for flere andre deltagere/venner. Vedkommende foretar ulike utlegg (fly, tog, hoteller, inngangsbilletter, ). Programmet vårt skal registrere disse utleggene, og hvilke personer som skylder vedkommende penger, samt status for hvem som (ikke) har betalt. Datastrukturen Datastrukturen består (se vedlegget) av arrayene deltagere og utlegg. I hver av disse er indeksene fra 1 og til henholdsvis sistedeltager og sisteutlegg i bruk. Vedlegget angir også hvilke datamedlemmer disse inneholder. Indeks nr.i i betalt henviser til indeks nr.i i deltagere. Vedlegget inneholder alt du trenger av klasser, datamedlemmer og globale variable for å løse denne eksamensoppgaven. Oppgaven a) Tegn datastrukturen. Gjør dette pent, detaljert og klart. Skriv innmaten til constructoren Utlegg::Utlegg() Constructoren initierer hva til en tom tekst, nullstiller den single int en, og setter alle skuffene i betalt til -1 (minus en). b) Skriv innmaten til funksjonene void registrerdeltagere() void Deltager::lesData() Den første funksjonen spør brukeren først om hvor mange deltagere som skal være med (leses inn i sistedeltager). Det gås så gjennom så mange deltagere, og den andre funksjonen leser inn alle data om hver enkelt deltager. (NB: Legg merke til at denne funksjonen kun kalles når det ikke allerede finnes en fil med deltagere.) c) Skriv innmaten til de tre funksjonene void skrivalt() void Deltager::skrivData() void Utlegg::skrivData() Funksjonene sørger til sammen for at alle dataene om alle deltagerne og utleggene skrives på skjermen. Foran hver av dem skrives dens indeks i vedkommende array. Ifm. hvert utlegg skrives først de to første datamedlemmene. Deretter, for hver indeks i betalt: aktuell deltagers navn (bruk ferdiglaget funksjon), og «-----» om verdien er -1, «IKKE BETALT» om den er 0 (null) og prisprperson om den er 1. 3

d) Skriv innmaten til funksjonene void nyttutlegg() void Utlegg::lesData() Den første funksjonen skriver en melding om det ikke er plass til flere utlegg. I motsatt fall tas et nytt Utlegg i bruk. Den andre funksjonen sørger for at hva og prisprperson (i norske kroner, pr.person ikke totalen) blir lest inn. Deretter går den gjennom deltagerantallet. For hver skrives dens navn, og det spørres om vedkommende skal være med å betale dette utlegget. Er så tilfelles oppdateres aktuell indeks i betalt til 0 (etter hittil å ha vært -1). (Alle deltagerne trenger altså ikke å være med på å skulle betale alle utleggene.) e) Skriv innmaten til funksjonene void registrerbetaling() void Utlegg::registrerBetaling(int n) Den første funksjonen spør først om et lovlig deltagernummer (inkludert nr.0). Svarer brukeren 0 (null) kommer det bare en melding om at intet gjøres. I motsatt fall spørres det om lovlige utleggsnumre, helt til brukeren skriver 0 (null). For hvert utlegg kalles den andre funksjonen med deltagernummeret som parameter. Denne funksjonen skriver aktuell deltagers navn. Om deltagerens skuff i betalt er: 0 skrives prisprperson, og innholdet i skuffen settes til 1 1 skrives «har allerede betalt» -1 skrives «skal IKKE betale dette utlegget» f) Skriv innmaten til funksjonen void deltagerneskylder() og all annen kode/funksjoner som trengs for å skrive ut alle deltagernes navn og totalsummen hver enkelt fortsatt skylder/ikke har betalt. g) Skriv innmaten til de tre void lesfrafil( )-funksjonene Funksjonene sørger til sammen for at hele datastrukturen blir lest inn fra filene UTLEGG.DTA og DELTAGERE.DTA. Formatene bestemmer du selv. Angi disse som en del av besvarelsen. Annet (klargjørende): Brukeren henviser til alle deltagere og utlegg kun via deres indeks i aktuell array. Vi regner med at brukeren har disse i hodet, evt. kan de sees av utskriften i oppgave 2c. Når ett eller flere utlegg har forekommet (oppgave 2d), gir brukeren av programmet de ulike deltagerne, som skal betale, beskjed om dette (muntlig, mail eller SMS). Deltagerne betaler fortløpende inn deler av eller alt det de skylder. De angir til brukeren av programmet hva totalbeløpet de betaler gjelder for. Etter hver slik innbetaling utfører brukeren kommandoen B (oppgave 2e). Når datamedlemmene i begge klassene først er innskrevet/innlest, så er det altså kun betalt som det kan endres på (i oppgavene 2d og 2e). 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. NB: Oppgaven skal kun løses vha. språkmekanismer fra emnets pensumstoff. Det er altså ikke tillatt å bruke slik som f.eks: STL-biblioteket (eller andre bibliotek), templates eller string-klassen. Lykke til med bruken av TravelMoney! FrodeH 4

Vedlegg: Halvferdig programkode // INCLUDE: #include <fstream> // ifstream, ofstream #include <iostream> // cin, cout #include <cstring> // strcpy, strlen #include <cctype> // toupper using namespace std; // CONST: const int STRLEN = 60; // Max. tekstlengde. const int MAXDELTAGERE = 10; // Max. antall deltagere på turen. const int MAXUTLEGG = 50; // Max. antall utlegg/utgifter. const int MAXPRPERSON = 5000; // Max. pris pr.person for ETT utlegg. class Deltager { // KLASSER: private: char navn[strlen]; // Deltagerens: - navn char mail[strlen]; // - mail-adresse int tlf; // - telefon (mobil) public: // Deklarasjon/definisjon av medlemsfunksjoner: Deltager() { strcpy(navn, ""); strcpy(mail, ""); tlf = 0; // Ferdiglaget void lesdata(); // Oppgave 2B void skrivnavn() { cout << navn; // Ferdiglaget void skrivdata(); // Oppgave 2C void lesfrafil(ifstream & inn); // Oppgave 2G ; class Utlegg { private: char hva[strlen]; // Utleggets: - type/"navn" int prisprperson; // - pris pr.person int betalt[maxdeltagere + 1]; // - status ift. hvem skal og // har betalt for seg public: // Deklarasjon/definisjon av medlemsfunksjoner: Utlegg(); // Oppgave 2A void skrivdata(); // Oppgave 2C void lesdata(); // Oppgave 2D void registrerbetaling(int n); // Oppgave 2E void lesfrafil(ifstream & inn); // Oppgave 2G ; // DEKLARASJON AV FUNKSJONER: void skrivmeny(); char les(); int les(const char t[], const int min, const int max); void les(const char t[], char s[], const int LEN); void registrerdeltagereellerlesfrafil(); // (Oppgave 2B og 2G) void registrerdeltagere(); // Oppgave 2B void skrivalt(); // Oppgave 2C void nyttutlegg(); // Oppgave 2D void registrerbetaling(); // Oppgave 2E void deltagerneskylder(); // Oppgave 2F void lesfrafil(); // Oppgave 2G // GLOBAL VARIABEL: Deltager deltagere[maxdeltagere + 1]; // Deltagerne/vennene på turen. Utlegg utlegg[maxutlegg + 1]; // Utleggene for turen. int sistedeltager, sisteutlegg; // Siste indeks/"skuff" brukt // i de to arrayene. 5

int main() { char kommando; // HOVEDPROGRAM: registrerdeltagereellerlesfrafil(); // (OPPGAVE 2B og 2G) skrivmeny(); cout << "\nønske: "; kommando = les(); while (kommando!= 'Q') { switch (kommando) { case 'S': skrivalt(); break; // Oppgave 2C case 'U': nyttutlegg(); break; // Oppgave 2D case 'B': registrerbetaling(); break; // Oppgave 2E case 'D': deltagerneskylder(); break; // Oppgave 2F default: skrivmeny(); break; cout << "\nønske: "; kommando = les(); cout << "\n\n"; return 0; // ***************** DEFINISJON AV KLASSE-FUNKSJONER: ***************** void Deltager::lesData() { // Oppgave 2B: Lag innmaten // Leser ALLE deltagerens data: void Deltager::skrivData() { // Oppgave 2C: Lag innmaten // Skriver ALLE deltagerens data: void Deltager::lesFraFil(ifstream & inn) { // Leser ALT fra fil: // Oppgave 2G: Lag innmaten // -------------------------------------------------------------------- Utlegg::Utlegg() { // Oppgave 2A: Lag innmaten // Initierer/"nullstiller" objektet: void Utlegg::skrivData() { // Oppgave 2C: Lag innmaten // Skriver ALLE data: void Utlegg::lesData() { // Oppgave 2D: Lag innmaten // Leser utlegget og hvem skal betale: // Registerer innbetaling fra deltager 'n': void Utlegg::registrerBetaling(int n) { // Oppgave 2E: Lag innmaten void Utlegg::lesFraFil(ifstream & inn) { // Oppgave 2G: Lag innmaten // Leser ALT fra fil: 6

// ********************** DEFINISJON AV FUNKSJONER: ********************* void skrivmeny() { // Presenterer lovlige menyvalg: cout << "\n\nf ØLGENDE KOMMANDOER ER LOVLIG:\n"; cout << "\ts = Skriv alle deltagere og utlegg\n"; cout << "\tu = nytt Utlegg har forekommet\n"; cout << "\tb = Betaling foretatt av en av deltagerne\n"; cout << "\td = hva hver av Deltagerne skylder\n"; cout << "\tq = Quit/avslutt\n"; char les() { // Henter ett ikke-blankt upcaset tegn: char ch; cin >> ch; cin.ignore(); // Leser ETT tegn. Forkaster '\n'. return (toupper(ch)); // Upcaser og returnerer. // Leser et tall i et visst intervall: int les(const char t[], const int min, const int max) { int n; do { // Skriver ledetekst: cout << '\t' << t << " (" << min << '-' << max << "): "; cin >> n; cin.ignore(); // Leser inn ett tall. while (n < min n > max); // Sjekker at i lovlig intervall. return n; // Returnerer innlest tall. // Leser en ikke-blank tekst: void les(const char t[], char s[], const int LEN) { do { // Ledetekst og leser: cout << '\t' << t << ": "; cin.getline(s, LEN); while (strlen(s) == 0); // Sjekker at tekstlengden er ulik 0. // -------------------------------------------------------------------- void registrerdeltagereellerlesfrafil() { // Ferdiglaget: ifstream inn("deltagere.dta"); if (!inn) registrerdeltagere(); // Oppgave 2B else { inn.close(); lesfrafil(); // Oppgave 2G void registrerdeltagere() { // Oppgave 2B: Lag innmaten void skrivalt() { // Oppgave 2C: Lag innmaten void nyttutlegg() { // Oppgave 2D: Lag innmaten void registrerbetaling() { // Oppgave 2E: Lag innmaten void deltagerneskylder() { // Oppgave 2F: Lag innmaten void lesfrafil() { // Oppgave 2G: Lag innmaten // Registrerer ALLE deltagerne: // Skriver ALLE deltagerne og utleggene: // Nytt utlegg registeres/har forekommet: // Registrerer innbetaling(er): // Skriver hva hver enkelt deltager skylder: // Leser HELE datastrukturen fra fil: 7