Kontinuasjonseksamen

Like dokumenter
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 programmering 03HBIND*, 03HBINFA, 03HBINE*, 03HBMETEA, 03HBMEMAA, 03HBGEOA

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

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

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

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

Kontinuasjonseksamen

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

Kontinuasjonseksamen

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamensoppgave i IMT1031(F) 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

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

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. Eksamen. Objekt-orientert programmering

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

KONTINUASJONSEKSAMEN

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

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 96HINDA / 96HINDE (1 AA / AE)

Kontinuasjonseksamen

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

Kontinuasjonseksamen

Eksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

Eksamensoppgave i IMT1082 Objekt-orientert programmering

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

Kontinuasjonseksamen

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

Kontinuasjonseksamen

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

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

GJØVIK INGENIØRHØGSKOLE

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

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

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

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

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

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

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 00HINDA / 00HINDB / 00HINEA 00HDMUA / 00HDMUB

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

Kontinuasjonseksamen

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

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

Eksamen. Objekt-orientert programmering

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

GJØVIK INGENIØRHØGSKOLE

Kontinuasjonseksamen

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

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:

Kontinuasjonseksamen

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

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

KONTINUASJONSEKSAMEN

KONTINUASJONSEKSAMEN

HØGSKOLEN I SØR-TRØNDELAG

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

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

KONTINUASJONSEKSAMEN

HØYSKOLEN I OSLO, AVDELING FOR INGENIØRUTDANNING

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

KONTINUASJONSEKSAMEN

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

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

Transkript:

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk Kontinuasjonseksamen EMNENAVN: EMNENUMMER: Grunnleggende programmering IMT 1031 (F) EKSAMENSDATO: 16.august 2013 KLASSE(R): 12HBIND*, 12HBPUA, 12HBDRA, 12HBISA, 12HBSPA, 12HBINE*, 12HÅRMITA TID: 09.00-13.00 EMNEANSVARLIG: Frode Haug ANTALL SIDER UTLEVERT: TILLATTE HJELPEMIDLER: 6 (inkludert denne forside) Alle trykte og skrevne (kalkulator er ikke tillatt) Kontroller at alle oppgavearkene er til stede. Innføring med penn, eventuelt blyant som gir gjennomslag. Pass på så du ikke skriver på mer enn ett innføringsark om gangen (da det blir uleselige gjennomslag når flere ark ligger oppå hverandre). Ved innlevering skilles hvit og gul besvarelse, som legges i hvert sitt omslag. Oppgavetekst, kladd og blå kopi beholder kandidaten til klagefristen er over. Husk kandidatnummer på alle ark.

Eksamenssettet består av to ulike oppgavetyper: Oppgave 1 omhandler hva som blir utskriften fra/av to ulike programmer. Oppgave 2 omhandler et litt større programmerings-case. NB: Oppgavene 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> #include <cstring> using namespace std; char txt[] = "FORTSATT-ER-GRESK-SOMMERFERIE-ALLER-ALLER-BEST"; int main() { int i = 20, j = i % 6, k = i % 19; do { cout << txt[i + j + (k++)] << '\n'; i += j; j += k; while (txt[i-1]!= 'L'); j = 4; for (i = strlen(txt) % 10; i <= strlen(txt); j *= j, i +=j) cout << txt[i] << ' ' << txt[i+j] << '\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 Sykkel { private: char navn[30]; char lag[30]; public: Sykkel(char l[], char n[]) { strcpy(navn, n); strcpy(lag, l); void skriv() { cout << navn << ", " << lag << '\n'; bool erlik(char l[]) { return (!strcmp(lag, l)); bool har(char c) { return (navn[1] == c); void bygg(char n[]) { strcat(navn, " "); strcat(navn, n); int len() { return(strlen(navn)-strlen(lag)); ; int main() { Sykkel s1("sky", "Froome"), s3("sky", "Boasson"), s2("belkin", "Mollema"), s4("saxo-tinkoff", "Contador"); s3.skriv(); cout << (int) s2.erlik("sky") << ' ' << (int) s1.erlik("sky") << '\n'; cout << (int) s1.har('o') << ' ' << (int) s2.har('o') << ' ' << (int) s3.har('o') << ' ' << (int) s4.har('o') << '\n'; s3.bygg("hagen"); s3.skriv(); cout << s1.len() << ' ' << s3.len() << ' ' << s4.len() << '\n'; return 0; 2

Oppgave 2 (70 %) Les hele teksten for denne oppgaven nøye, før du begynner å besvare noe som helst. Studer vedlegget, som inneholder mange viktige opplysninger som du trenger/skal bruke. Legg spesielt merke til const ene, klassen, dens datamedlemmer og dens to ferdiglagde funksjoner, globale variable, main og de tre les( ) ene. Bruk alt dette aktivt. En litt større sosial vennegjeng ønsker å samles/treffe hverandre ofte. For å få til dette blir det alltid den første dagen i måneden lagt inn når de ulike personene har mulighet den kommende måneden. Dette gjør at programmet vi skal lage kan komme med forslag til ulike dager de kan treffes. Datastrukturen En deltager er representert av klassen Deltager. I vedlegget kan du se: hvilke datamedlemmer som inngår i objekter av denne klassen, hvordan slike objekter ligger i arrayen deltagere, hvor lang denne arrayen er, samt at indeksene 1 til og med sistebrukt er i bruk. I arrayen dag er indeksene 1 til og med antdager i bruk (vi bruker altså ikke indeks nr.0 i noen av arrayene). Dette skal være alt du trenger av klasser, datamedlemmer og globale variable for å løse denne eksamensoppgaven. Oppgaven a) Lag funksjonene void nydeltager() og void Deltager::lesData() Den første funksjonen sjekker først om det er plass til flere deltagere. Om så ikke er tilfelle, kommer det en melding. I motsatt fall tas et nytt objekt i bruk. Dette objektet leser så selv inn relevante data (vha. den andre funksjonen) til sine tre første datamedlemmer angitt i vedlegget. Den sørger også for (ved å kalle relevant funksjon) at hele arrayen dag settes til false. b) Lag funksjonen void fjerndeltager() Funksjonen spør først om et lovlig deltagernummer (inkludert nr.0). Om brukeren velger 0 (null), kommer det en melding om det, og ingenting skjer ellers. I motsatt fall flyttes den siste deltageren til den plassen der den slettede har vært, og sistebrukt telles ned. c) Lag funksjonene void nullstillalle() og void Deltager::nullstill() Den første funksjonen sørger for at alle deltagerne setter sin array dag til kun å inneholde false (vha. den andre funksjonen), samt at antdager blir lest inn for den nye måneden. d) Lag funksjonene void lesdager() og void Deltager::lesDager() Den første funksjonen ber om et lovlig deltagernummer, og kaller deretter den andre funksjonen. Denne funksjonen igjen sørger først for at hele dag settes til false (kaller relevant funksjon). Deretter spør den om dagnumre helt til brukeren skriver 0 (null). Er dagnummeret i rett intervall (1 - antdager) markeres den som true i dag, ellers kommer det en melding om at dagnummeret er utenfor aktuelt intervall. Til slutt gås det gjennom dag, og alle dagnumrene (indeksene) vedkommende kan møte blir skrevet ut på skjermen. 3

e) Lag funksjonen void finnmotedager() Det defineres først bl.a en lokal array (som må nullstilles) til å holde orden på hvor mange deltagere som kan møte på månedens ulike dager. Deretter gås det gjennom alle deltagerne. For hver av dem gås det gjennom alle månedens dager, og deltageren svarer true/false (vha. ferdiglaget funksjon) til om hun/han kan delta på en aktuell dag. Kan vedkommende delta, registreres dette i den lokale arrayen. Det skrives så en liste over hvilke dager evt. alle deltagerne kan møte/komme/treffes. Helt til slutt skrives det en liste med hvilke dager minst halvparten, men ikke alle, kan møte. I tillegg til dagnummeret skrives antallet (i parentes) som kan møte. NB: Oppgave 2e teller dobbelt så mye som de andre deloppgavene her i oppgave 2. f) Lag de to void lesfrafil( ) -funksjonene Funksjonene sørger til sammen for at hele datastrukturen (inkludert de to intene) blir lest inn fra filen SAMLING.DTA. Formatet bestemmer du selv, men angi dette som en del av besvarelsen. Klargjøring og forutsetninger I praksis brukes programmet på følgende måte: Den første dagen i hver måned (på morgenen/ formiddagen) utføres 2c (en gang) etterfulgt av 2d (en gang for hver av deltagerne), dvs. kommandoene U og L. Deretter gjøres 2e (kommando D ). Deltagerne kan så varsles (via mail/sms) om når det blir ett eller flere møter/treff den kommende måneden. Dette avgjør den som kjører programmet, etter som hun/han finner dag(er) der alle eller mange kan møtes/treffes. Å fjerne en deltager (2b) kan utføres når som helst i løpet av måneden. Det kan også legges inn en ny deltager (2a) når som helst. Dette etterfølges umiddelbart med innlesing av datoer (2d) for vedkommende. Brukeren vil da bare skrive inn dager som er i resten av måneden. Deretter kan selvsagt 2e utføres igjen, og evt. nytt/endret møte-varsel sendes alle. Vi forutsetter (dog noe urimelig) at de dager en deltager har registrert i programmet at hun/han kan møte (har ledig) en måned forblir ledige. Dermed kan nye gjeldende varsler (kanskje med meget kort frist) sendes ut når som helst i løpet av måneden. Legg merke til at alle MAXDAG indeksene i dag ikke nødvendigvis er i bruk hver måned. Det er antdag av dem som til enhver tid er i bruk. Men, til fil kan like godt alle MAXDAG skrives ut, selv om noen av de siste altså egentlig er irrelevante. Programmet inneholder ingen funksjoner for å vise/display en eller alle deltagerne. Brukeren må derfor huske (ifm. oppgave 2b og 2d) de ulike deltagernes numre. mail og tlf brukes ikke til noe spesielt. I praksis vil dette selvsagt brukes for å varsle deltagerne om et kommende møte/treff. Gjør dine egne forutsetninger dersom du finner oppgaveteksten upresis eller ufullstendig. Gjør i så fall rede for disse forutsetningene først i besvarelsen din. Lykke til med eksamensoppgaven (så lenge du har møtt opp)! FrodeH 4

Vedlegg: Halvferdig programkode (.tpl-fil) // 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 MAXDELTAGER = 20; // Max. antall deltagere i gruppen. const int MINDAG = 28; // Min. antall dager i en måned. const int MAXDAG = 31; // Max. antall dager i en måned. class Deltager { // KLASSE: private: char navn[strlen]; // Deltagerens navn. char mail[strlen]; // Mailadresse. int tlf; // Telefon (fast eller mobil). bool dag[maxdag+1]; // Kan (ikke) på dag nr.'i'. public: // Deklarasjon av medlemsfunksjoner: Deltager() { nullstill(); void lesdata(); // Oppgave 2A void nullstill(); // Oppgave 2C void lesdager(); // Oppgave 2D bool kandag(int d) { return (dag[d]); void lesfrafil(istream* inn, int t); // Oppgave 2F ; // DEKLARASJON AV FUNKSJONER: void skrivmeny(); char les(char t[]); int les(const char t[], const int min, const int max); void les(const char t[], char s[], const int LEN); void nydeltager(); // Oppgave 2A void fjerndeltager(); // Oppgave 2B void nullstillalle(); // Oppgave 2C void lesdager(); // Oppgave 2D void finnmotedager(); // Oppgave 2E void lesfrafil(); // Oppgave 2F // GLOBALE VARIABLE: Deltager deltagere[maxdeltager+1]; // Array med Deltager-objekter. int sistebrukt, // Indeks for siste Deltager hittil brukt. antdager; // Antall dager i aktuell måned. int main() { char kommando; // HOVEDPROGRAM: lesfrafil(); // Oppgave 2F skrivmeny(); kommando = les("ønske"); while (kommando!= 'Q') { switch (kommando) { case 'N': nydeltager(); break; // Oppgave 2A case 'F': fjerndeltager(); break; // Oppgave 2B case 'U': nullstillalle(); break; // Oppgave 2C case 'L': lesdager(); break; // Oppgave 2D case 'D': finnmotedager(); break; // Oppgave 2E default: skrivmeny(); break; kommando = les("ønske"); cout << "\n\n"; return 0; // ***************** DEFINISJON AV KLASSE-FUNKSJONER: ***************** void Deltager::lesData() { // Leser egne hoveddata: // Oppgave 2A: Lag innmaten 5

void Deltager::nullstill() { // Nullstiller alle egne dager: // Oppgave 2C: Lag innmaten void Deltager::lesDager() { // Leser aktuelle egne møtedager: // Oppgave 2D: Lag innmaten // Leser egne data fra fil: void Deltager::lesFraFil(istream* inn, int t) { // Oppgave 2F: Lag innmaten // ********************** DEFINISJON AV FUNKSJONER: ********************* void skrivmeny() { // Presenterer lovlige menyvalg: cout << "\n\nfølgende KOMMANDOER ER LOVLIG:\n"; cout << "\tn = Ny deltager\n"; cout << "\tf = Fjern deltager\n"; cout << "\tu = nullstill dagene for ALLE deltagerne\n"; cout << "\tl = Les dager for EN deltager\n"; cout << "\td = finn felles Dager for aktuelle møter/treff\n"; cout << "\tq = Quit/avslutt\n"; char les(char t[]) { // Henter ett ikke-blankt upcaset tegn: char ch; cout << '\n' << t << ": "; // Skriver medsendt ledetekst. 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 { cout << '\t' << t << ": "; cin.getline(s, LEN); // Ledetekst og leser. while (strlen(s) == 0); // Sjekker at tekstlengden er ulik 0. void nydeltager() { // Legger inn EN ny deltager: // Oppgave 2A: Lag innmaten void fjerndeltager() { // Fjerner EN deltager: // Oppgave 2B: Lag innmaten void nullstillalle() { // Nullstiller ALLE deltagerne: // Oppgave 2C: Lag innmaten void lesdager() { // Leser EN deltagers møtedager: // Oppgave 2D: Lag innmaten void finnmotedager() { // Finner dager der flest kan møte: // Oppgave 2E: Lag innmaten void lesfrafil() { // Leser inn HELE datastrukturen: // Oppgave 2F: Lag innmaten 6