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

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

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

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

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

Kontinuasjonseksamen

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

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 E K S A M E N. Grunnleggende programmering

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

Kontinuasjonseksamen

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

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamensoppgave i IMT1031(F) Grunnleggende programmering

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

Kontinuasjonseksamen

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

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

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

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

KONTINUASJONSEKSAMEN

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

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

Kontinuasjonseksamen

Kontinuasjonseksamen

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

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Eksamen. Objekt-orientert programmering

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

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

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

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

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

Kontinuasjonseksamen

Eksamensoppgave i IMT1082 Objekt-orientert programmering

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

Eksamensoppgave i IMT1082 Objekt-orientert programmering

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

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

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

Kontinuasjonseksamen

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

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

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.

GJØVIK INGENIØRHØGSKOLE

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. Eksamen. Objekt-orientert programmering 98HINDA / 98HINDB / 98HINEA 98HDMUA / 98HDMUB

Eksamen. Objekt-orientert programmering

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

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

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 E K S A M E N. Grunnleggende programmering

Kontinuasjonseksamen

Kontinuasjonseksamen

GJØVIK INGENIØRHØGSKOLE

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:

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 / 00HINDB / 00HINEA ( 2DA / 2DB / 2EA ) TID:

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*

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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

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

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

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:

KONTINUASJONSEKSAMEN

KONTINUASJONSEKSAMEN

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

KONTINUASJONSEKSAMEN

Transkript:

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N EMNENAVN: Grunnleggende programmering EMNENUMMER: IMT 1031 EKSAMENSDATO: 2.desember 2008 KLASSE(R): 08HBIND*, 08HBPUA, 08HBDRA, 08HBISA, 08HBINE* TID: 09.00-13.00 EMNEANSVARLIG: Frode Haug ANTALL SIDER UTLEVERT: TILLATTE HJELPEMIDLER: 7 (inkludert denne forside) Alle trykte og skrevne Kontroller at alle oppgavearkene er til stede. Innføring med penn, eventuelt trykkblyant 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. Ikke skriv noe av din besvarelse på oppgavearkene. Men, i oppgavetekst der du skal fylle ut svar i tegning/tabell/kurve, skal selvsagt dette innleveres sammen med hvit besvarelse. Husk kandidatnummer på alle ark. Ta vare på dette nummeret til sensuren faller.

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; int main() { char txt[] = "TARZAN-HENGER-LENGE-I-JUNGELLIANENE"; int i = 17, j = i % 3, k = i / j, len = strlen(txt); cout << txt[j] << ' ' << txt[k] << '\n'; --i; while (i <= len-k) { i += k; cout << txt[i] << ' ' << txt[i+j] << '\n'; cout << txt[len % 5] << ' ' << txt[len / 5] << '\n'; cout << txt[17-4 * 2 / 3] << ' ' << txt[17 % 3 * 5] << '\n'; return 0; b) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> #include <cstring> using namespace std; const int LEN = 40; class Foo { private: char txt[len]; int nr; public: Foo() { nr = 0; strcpy(txt, "NULL"); Foo(int n, char t[]) { nr = n; strcpy(txt, t); void funk() { cout << nr << ": " << txt << '\n'; bool funk(int n) { return (nr!= n); void funk(char s[], char t[]) { if (funk(2001)) strcpy(txt, t); else strcpy(txt, s); ; int main() { Foo o1, o3(2006, "2x Highbury"), o2(1989, "QPR"), o5, o4(2001, "Sommer"); o2.funk(); o3.funk(); o5 = o2; o1 = o3; o3= o4; o2 = o1; o3 = o5; o1 = o4; o1.funk(); cout << o2.funk(2006) << ' ' << o3.funk(2006) << ' ' << o4.funk(2001) << '\n'; o1.funk("ferie", "Opphold"); o1.funk(); 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 og dets datamedlemmer, globale variable, main, de tre les( ) funksjonene. Bruk alt dette aktivt! Innledning Du er medlem av den populære Varanger og Moss -dykkerklubb. Dere har et webkamera stående nede på 18½ meters dyp for å overvåke og videreformidle (på nettet) dyrelivet. Noen i klubben ønsker at dere skal ha en ukes konstant vakt ved nettleseren, for å registrere når visse utvalgte og stadig tilbakevendende ( fastboende ) dyr er aktive foran kamera. De har også fått vite at du er litt av en kløpper til å programmere. Derfor vil de nå at du skal lage programmet som trengs. Det er det denne eksamensoppgaven omhandler. Datastrukturen Et dyr er representert vha. klassen Dyr. Av vedlegget kan du se hvilke datamedlemmer hvert slikt objekt inneholder. Dyr-objekter ligger lagret i arrayen dyrene. Denne er MAXDYR+1 lang, men til enhver tid er siste_dyr av dem i bruk. Vi bruker ikke indeks nr.0. På den første siden i vedlegget kan du se mange ulike deklarasjoner/definisjoner. Dette skal være alt du trenger av klasser, datamedlemmer og globale variable for å løse denne eksamensoppgaven! Oppgaven a) Lag funksjonene Dyr::Dyr(), void nytt_dyr() og void Dyr::lese() Constructoren sørger for at alle objektets tekster/strenger blir satt til (den tomme tekst), samt at hele den to-dimensjonale arrayen blir nullstilt. Funksjonen nytt_dyr() kommer med en melding om det ikke er plass til flere dyr. I motsatt fall tas et nytt objekt i bruk (siste_dyr telles opp). Den siste funksjonen sørger for at objektet selv leser inn sitt navn og art. NB: Vi har ingen sjekk på om duplikate dyr forekommer. b) Lag funksjonene void display_dyr() og void Dyr::skriv() Den første funksjonen spør først om et lovlig indeks-/dyrenummer. Deretter skrives alle dyrets data ut på skjermen med et passelig utseende/layout. Hint: Bruk bl.a. skriv_navn()-funksjonen i oppgave 2c. c) Lag funksjonene void meny_av_alle() og void Dyr::skriv_navn() Det gåes gjennom alle dyrene. For hvert dyr skrives dets indeks, navn og art ut på en linje. d) Lag funksjonene void observasjon() og void Dyr::observert(, ) Først leses et dyrs nummer. Om dette er i ulovlig intervall, så kommer det en melding. I motsatt fall avleses nåværende ukedag og døgntime (mer om dette rett nedenfor). Disse sendes med som parameter til den andre funksjonen. Denne igjen kommer med en melding om ukedagen (0-6) og døgntimen (0-23) ikke er OK. I motsatt fall telles antall observasjonen av det aktuelle dyret opp med 1 for det aktuelle tidspunktet. 3

Helt i starten av vedlegget kan du bl.a. se: #include "dag_time.h" Denne filen inneholder kun klassen Dag_Time med sine to (public) funksjoner: int hent_dag() - returnerer et ukedagsnummer (0 = søndag, 1=mandag, 6=lørdag) int hent_time() - returnerer en døgntime (0-23) Dette kan dermed brukes/hentes på følgende måte: Dag_Time dt; int dag, time; dag = dt.hent_dag(); time = dt.hent_time(); e) Lag funksjonene void skriv_til_fil() og void Dyr::skriv_til_fil( ) Disse funksjonene sørger for at alle data om alle dyr blir skrevet til filen OBS_DYR.DTA. Formatet på filen velger du selv, men dette skal angis som en del av besvarelsen. f) Lag funksjonene void les_fra_fil() og void Dyr::les_fra_fil( ) Disse funksjonene sørger for at alle data om alle dyr blir lest inn fra filen OBS_DYR.DTA (ut fra det formatet du selv bestemte ovenfor). g) Lag funksjonene void statistikk() og void Dyr::statistikk(, ) Den første funksjonen leser først en lovlig starttime (0-23) og sluttime (starttime 23). Deretter gåes det gjennom alle dyrene. For hvert av dem skrives dets navn og art (jfr. funksjonen i oppgave 2c). Det telles så opp, og skrives på skjermen, totalt antall ganger dyret er observert i det aktuelle tidsintervallet på døgnet - uansett ukedag. Klargjøring og forutsetninger I praksis vil programmet bli brukt på følgende måte: o Først vil kommandoen N (Nytt dyr - oppgave 2a) alene bli utført mange ganger. Dette for å legge inn alle de fastboende dyrene (f.eks. torsken Torstein, krabben Kari, langen Langedusa, ålen Ådel) man vil ha i systemet, før selve observeringen starter. o Startskuddet for observeringen går. Klubbens medlemmer har så eksakt en ukes døgnkontinuerlig vakt ved webkamerat og bruker programmet du har laget. o Under observeringen vil brukeren, når vedkommende på nytt ser et av dyrene som skal observeres, primært bruke kommandoen O n (Observasjon - oppgave 2d). o Med (u)jevne mellomrom gir brukeren kommandoen T (skriv Til fil - oppgave 2e). o Når brukeren har behov for å bli påminnet om hvilke dyr som har hvilke numre, så bruker hun/han kommandoen M (Meny av alle - oppgave 2c). o Om brukeren blir litt nysgjerrig på data og statistikk (hittil), så brukes kommandoene D (Display dyr - oppgave 2b) og S (Statistikk - oppgave 2g). 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 observeringen (av oppgaven)! frode_ætt_haugianerne.no 4

Vedlegg: Halvferdig programkode (.tpl-fil) // INCLUDE: #include <fstream> // ifstream, ofstream #include <iostream> // cin, cout #include <iomanip> // setw #include <cstring> // strcpy, strlen #include <cctype> // toupper #include "dag_time.h" // Funksjoner for avlesing av ukedag og døgntime using namespace std; // CONST: Ukedagene: const char DAGER[][5] ={ " Søn", " Man", "Tirs", " Ons", "Tors", " Fre", " Lør" ; const int STRLEN = 40; // Max. tekstlengde. const int MAXDYR = 30; // Max. antall dyr å observere. const int ANTDAGER = 7; // Antall dager (en uke) å observere. const int ANTTIMER = 24; // Antall timer i et døgn. // KLASSE: class Dyr { private: char navn[strlen]; // (Kalle)navn. char art[strlen]; // Dyreart. int obs[antdager][anttimer]; // Matrise av en ukes observasjoner - 24/7. public: // Definisjon/deklarasjon av medlemsfunksjoner: Dyr(); // Lag innmaten ifm. oppgave 2A void lese(); // Lag innmaten ifm. oppgave 2A void skriv(); // Lag innmaten ifm. oppgave 2B void skriv_navn(); // Lag innmaten ifm. oppgave 2C void observert(int d, int t); // Lag innmaten ifm. oppgave 2D void skriv_til_fil(ostream* ut); // Lag innmaten ifm. oppgave 2E void les_fra_fil(istream* inn, char nvn[]); // Lag innmaten ifm. oppgave 2F void statistikk(int st, int sl); // Lag innmaten ifm. oppgave 2G ; // DEKLARASJON AV FUNKSJONER: void skriv_meny(); char les(char t[]); void les(const char t[], char s[], const int LEN); int les(const char t[], const int min, const int max); void nytt_dyr(); void display_dyr(); void meny_av_alle(); void observasjon(); void skriv_til_fil(); void les_fra_fil(); void statistikk(); // Oppgave 2A // Oppgave 2B // Oppgave 2C // Oppgave 2D // Oppgave 2E // Oppgave 2F // Oppgave 2G // GLOBALE VARIABLE: Dyr dyrene[maxdyr+1]; // Array med Dyr-objekter. int siste_dyr; // Indeks for siste dyr hittil brukt. 5

int main() { // HOVEDPROGRAM: char kommando; les_fra_fil(); // Oppgave 2F skriv_meny(); kommando = les(" nske"); while (kommando!= 'Q') { switch (kommando) { case 'N': nytt_dyr(); break; // Oppgave 2A case 'D': display_dyr(); break; // Oppgave 2B case 'M': meny_av_alle(); break; // Oppgave 2C case 'O': observasjon(); break; // Oppgave 2D case 'S': statistikk(); break; // Oppgave 2G case 'T': skriv_til_fil(); break; // Oppgave 2E default: skriv_meny(); break; kommando = les(" nske"); skriv_til_fil(); // Oppgave 2E cout << "\n\n"; return 0; // ******************* DEFINISJON AV KLASSE-FUNKSJONER: ****************** Dyr::Dyr() { // Initierer ALLE datamedlemmer: // Oppgave 2A: Lag innmaten void Dyr::lese() { // Leser tekstlige datamedlemmer: // Oppgave 2A: Lag innmaten void Dyr::skriv() { // Skriver ALT om dyret til skjerm: // Oppgave 2B: Lag innmaten void Dyr::skriv_navn() { // Skriver navn og art: // Oppgave 2C: Lag innmaten // Teller opp antall observasjoner: void Dyr::observert(int d, int t) { // Oppgave 2D: Lag innmaten // Skriver ALT om dyret til fil: void Dyr::skriv_til_fil(ostream* ut) { // Oppgave 2E: Lag innmaten // Leser ALT om dyret fra fil: void Dyr::les_fra_fil(istream* inn, char nvn[]) { // Oppgave 2F: Lag innmaten // Statistikk over hvor ofte dyrene har blitt sett i et gitt tidsintervall: void Dyr::statistikk(int st, int sl) { // Oppgave 2G: Lag innmaten 6

// ********************* DEFINISJON AV FUNKSJONER: ******************** void skriv_meny() { // Presenterer lovlige menyvalg: cout << "\n\nfølgende KOMMANDOER ER LOVLIG:\n"; cout << "\tn = Nytt dyr\n"; cout << "\td = Display/skriv ALLE data om ETT dyr\n"; cout << "\tm = Meny med ALLE dyrene som skal observeres\n"; cout << "\to n = en Observasjon av dyr nr.'n'\n"; cout << "\ts = Statistikk over dyr i et visst tidsintervall\n"; cout << "\tt = skriv Til fil\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 inn en ikke-blank 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. // 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. void nytt_dyr() { // Legger inn (om mulig) ETT nytt dyr: // Oppgave 2A: Lag innmaten void display_dyr() { // Skriver ALT om ETT dyr: // Oppgave 2B: Lag innmaten void meny_av_alle() { // Skriver meny av/for ALLE dyrene: // Oppgave 2C: Lag innmaten void observasjon() { // EN observasjon av et GITT dyr: // Oppgave 2D: Lag innmaten void skriv_til_fil() { // Skriver ALT til fil: // Oppgave 2E: Lag innmaten void les_fra_fil() { // Leser ALT fra fil: // Oppgave 2F: Lag innmaten void statistikk() { // Dyr i et visst tidsintervall: // Oppgave 2G: Lag innmaten 7