Kontinuasjonseksamen

Like dokumenter
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 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

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

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

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

Kontinuasjonseksamen

Kontinuasjonseksamen

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

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

Kontinuasjonseksamen

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: 5. desember HIND*, 01HINE*, 01HDMU*, 01HING* TID:

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

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

Kontinuasjonseksamen

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

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

Kontinuasjonseksamen

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

KONTINUASJONSEKSAMEN

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

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. EKSAMENSDATO: 7. desember HINDA / 00HINDB / 00HINEA 00HDMUA / 00HDMUB / 00HINGA

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 programmering 04HBIND*, 04HBINE*, 04HBINFA, 04HBMETEA, 04HBGEOA. ANTALL SIDER UTLEVERT: 8 (inkludert denne forside)

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

Kontinuasjonseksamen

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

Eksamensoppgave i IMT1082 Objekt-orientert programmering

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

Kontinuasjonseksamen

Eksamensoppgave i IMT1082 Objekt-orientert programmering

KONTINUASJONSEKSAMEN

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

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

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

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

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

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

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N. Grunnleggende 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. Eksamen. Objekt-orientert programmering

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

Kontinuasjonseksamen

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: 8. august 1995 TID:

GJØVIK INGENIØRHØGSKOLE

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

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

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 )

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

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

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

KONTINUASJONSEKSAMEN

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

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

KONTINUASJONSEKSAMEN

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

Transkript:

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk Kontinuasjonseksamen EMNENAVN: Grunnleggende programmering EMNENUMMER: IMT 1031 EKSAMENSDATO: 14.august 2009 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[] = "EMIRATES-CUP-VAR-EN-STOOOOR-OPPLEVELSE"; int i = 20, j = i % 7, k = (i*2)/j, len = strlen(txt); cout << txt[j] << ' ' << txt[k] << '\n'; while ((i += k) < len) { cout << txt[i] << ' ' << txt[i - (5 % 3)] << '\n'; i = int(true); j = int(false) + 4; cout << txt[i] << ' ' << txt[j] << '\n'; cout << txt[(len%j)+i] << ' ' << txt[k-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; const int LEN = 30; char txt[4][len] = { "Arsenal", "Rangers", "Atletico Madrid", "Paris Saint-Germain" ; class Lag { private: char txt[len]; int nr; public: Lag() { strcpy(txt, ""); nr = 0; Lag(char t[], int n) { strcpy(txt, t); nr = n; void funk() { cout << nr << ": " << txt << '\n'; bool funk(char t[]) { return (!strcmp(txt, t)); int funk(int n, int m =2) { return (nr += (n*m)); ; int main() { Lag l1(txt[0], 1), l2(txt[1], 2), l3(txt[2], 3), l4(txt[3], 4), l5; l2.funk(); l5 = l1; l1 = l3; l3 = l5; l3.funk(); cout << ( (l1.funk("arsenal"))? "!!!" : ":-(" ) << '\n'; cout << l2.funk(4, 5) << '\n'; cout << l4.funk(10) << '\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 og dets datamedlemmer, globale variable, main, de tre les( ) funksjonene. Bruk alt dette aktivt! Det skal lages et program for utleie av sykler på Hardangervidda. Det finnes tre ulike utleiesteder: Haugastøl, Finse og Flåm. Programmet du skal lage holder orden på de 100 syklene som er disponible, dvs. bl.a. deres status og hvilket sted en sykkel befinner seg (når ledig) evt. hvor ble leid ut fra. Datastrukturen En sykkel er representert vha. klassen Sykkel (se vedlegget). Slike objekter ligger lagret i arrayen syklene. Denne er MAXSYKLER+1 lang, og hver (indeks 1-100, vi bruker ikke nr.0) inneholder data om en gitt sykkel. Vi har også den globale variabelen dagnummer som angir inneværende dags nummer i året. Legg merke til hvordan denne initieres i main hver gang (dag) programmet startes på nytt. 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 Sykkel::Sykkel() og void Sykkel::skriv_sted() Constructoren sørger for at alle objektets aktuelle verdier blir satt til 0 (null) eller (tom tekst). Boolsk variabel blir satt til true, mens enum-variabel blir gitt verdien Haugastol. Den andre funksjonen sørger kun for at de ulike verdiene variabelen sted kan inneha, blir skrevet ut som tekstene Haugastøl, Finse eller Flåm. b) Lag funksjonene Sted les_sted() og int finn_ledig(sted h) Den første funksjonen spør først om et tall i intervallet 1-3 (bruk aktuell les( ) ). Den returnerer så en aktuell enum-verdi ut fra denne int-verdien. Den andre funksjonen går gjennom syklene-arrayen (så lenge det er nødvendig). Når den finner en ledig sykkel (bruk ferdiglaget funksjon) som er til leie på stedet h (bruk også her ferdiglaget funksjon) så returneres sykkelens indeks ellers returneres 0 (null). c) Lag funksjonene void skriv_alle() og void Sykkel::skriv(int n) Først skrives nåværende dagnummer i året. Deretter gås det gjennom alle syklene. For hver av dem skrives dets indeksnummer og stedet sykkelen befinner seg/ble leiet ut fra. Er sykkelen ledig, skrives bare LEDIG, ellers skrives også de tre siste datamedlemmene. Stans utskriften (og be brukeren om å skriv ett tegn) for hver 20.utskrift. d) Lag funksjonene void utlevering() og void Sykkel::utlever() Først bestemmes et utleiested (bruk funksjon laget i oppgave 2B). Det sjekkes om dette stedet har ledig sykkel til utleie (bruk også her funksjon laget i oppgave 2B). Om så ikke er tilfelle, kommer det en melding. I motsatt fall (vha. Sykkel::utlever() ) leses/settes alle relevante verdier i aktuelt Sykkel-objekt (bruk les( )-funksjoner). 3

e) Lag funksjonene void innlevering() og void Sykkel::innlever() Først spørres det etter det lovlig sykkelnummer. Er ikke denne sykkelen utlånt, kommer det en melding. I motsatt fall kalles den andre funksjonen. Denne funksjonen skriver først ut leietagerens navn, antall dager den har vært utleid, samt stedet den ble leiet fra. Den leser så inn verdien for innleveringsstedet, samt resetter de fire andre variablene på samme måte som constructoren gjorde. f) Lag funksjonene void skriv_til_fil() void Sykkel::skriv_til_fil( ) Disse funksjonene sørger for at alle data om alle sykler blir skrevet til filen SYKLER.DTA. Formatet på filen velger du selv, men dette skal angis som en del av besvarelsen. g) Lag funksjonene void les_fra_fil() og void Sykkel::les_fra_fil( ) Disse funksjonene sørger for at alle data om alle sykler blir lest inn fra filen SYKLER.DTA (ut fra det formatet du selv bestemte ovenfor). Klargjøring Utleiefirmaet har eksakt 100 sykler til utleie. Disse er nummerert 1-100, og er såpass like at vi ikke skiller på dame-, herre- og barnesykler. Om en sykkel er ledig (inne), så vil datamedlemmet sted henvise til hvilket av de tre stedene den befinner seg. Er sykkelen ikke ledig, vil den referere til hvor den ble leiet ut fra (befant seg sist). dagnummer inneholder et tall i intervallet MINDAG til MAXDAG. Det er brukeren ansvar, i det programmet starter opp hver dag, å gi denne korrekt verdi - en høyere en gårsdagen. Som kontaktinfo for hver sykkel lagres altså kun personens navn og (mobil)telefonnummer (selv om det sikkert er noe ymse dekning i fjellheimen.). Ønsker en person å leie flere sykler (som ikke er uvanlig), så må altså dessverre disse dataene skrives inn flere ganger. Men, pytt, pytt.. 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 måtte du ikke komme helt ut og sykle! 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 using namespace std; // CONST og ENUM: const int STRLEN = 40; // Max. tekstlengde. const int MAXSYKLER = 100; // Max. antall sykler til utleie. const int MINDAG = 100; // Min. dagnummer i året (i april). const int MAXDAG = 300; // Max. dagnummer i året (i oktober). const int MINTLF = 10000000; // Min. telefonnummer. const int MAXTLF = 99999999; // Max. telefonnummer. enum Sted { Haugastol, Finse, Flaam ; // Steder med sykkelutleie. class Sykkel { // KLASSER: private: char navn[strlen]; int tlf; int dagnr; bool ledig; Sted sted; // Leiers navn. // Leiers kontaktinfo - kun (mobil)telefon. // Dagnummeret i året sykkelen ble leiet. // Sykkelen ledig eller ei. // Stedet sykkelen ble leiet/befinner seg. public: // Definisjon/deklarasjon av medlemsfunksjoner: Sykkel(); // Lag innmaten ifm. oppgave 2A bool er_ledig() { return ledig; Sted hent_sted() { return sted; void skriv_sted(); // Lag innmaten ifm. oppgave 2A void skriv(int n); // Lag innmaten ifm. oppgave 2C void utlever(); // Lag innmaten ifm. oppgave 2D void innlever(); // Lag innmaten ifm. oppgave 2E void skriv_til_fil(ostream* ut); // Lag innmaten ifm. oppgave 2F void les_fra_fil(istream* inn); // 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); Sted les_sted(); // Oppgave 2B int finn_ledig(sted h); // Oppgave 2B void skriv_alle(); // Oppgave 2C void utlevering(); // Oppgave 2D void innlevering(); // Oppgave 2E void skriv_til_fil(); // Oppgave 2F void les_fra_fil(); // Oppgave 2G // GLOBALE VARIABLE: Sykkel syklene[maxsykler+1]; // Sykkel-objekter (bruker indeks 1-100). int dagnummer; // Inneværende dags nummer i året. 5

int main() { // HOVEDPROGRAM: char kommando; les_fra_fil(); // Oppgave 2G dagnummer = les("dagens dagnummer i året", MINDAG, MAXDAG); skriv_meny(); kommando = les("ønske"); while (kommando!= 'Q') { switch (kommando) { case 'U': utlevering(); break; // Oppgave 2D case 'I': innlevering(); break; // Oppgave 2E case 'S': skriv_alle(); break; // Oppgave 2C case 'T': skriv_til_fil(); break; // Oppgave 2F default: skriv_meny(); break; kommando = les("ønske"); skriv_til_fil(); // Oppgave 2F cout << "\n\n"; return 0; // ******************* DEFINISJON AV KLASSE-FUNKSJONER: ******************* Sykkel::Sykkel() { // Initierer ALLE datamedlemmer: // Oppgave 2A: Lag innmaten void Sykkel::skriv_sted() { // Enum-verdi ut som tekst: // Oppgave 2A: Lag innmaten void Sykkel::skriv(int n) { // ALLE data (til skjerm): // Oppgave 2C: Lag innmaten void Sykkel::utlever() { // Data settes når leies: // Oppgave 2D: Lag innmaten void Sykkel::innlever() { // Skriver info, resetter data: // Oppgave 2E: Lag innmaten // Skriver ALT om sykkelen til fil: void Sykkel::skriv_til_fil(ostream* ut) { // Oppgave 2F: Lag innmaten // Leser ALT om sykkelen fra fil: void Sykkel::les_fra_fil(istream* inn) { // Oppgave 2G: Lag innmaten // ********************** DEFINISJON AV FUNKSJONER: ********************* void skriv_meny() { // Presenterer lovlige menyvalg: cout << "\n\nfølgende KOMMANDOER ER LOVLIG:\n"; cout << "\tu = Utleie/Utlevering av sykkel\n"; cout << "\ti = Innlevering av sykkel\n"; cout << "\ts = Skriv alle syklene\n"; cout << "\tt = skriv Til fil\n"; cout << "\tq = Quit/avslutt\n"; 6

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. Sted les_sted() { // Finner/leser "enumverdi": // Oppgave 2B: Lag innmaten int finn_ledig(sted h) { // Indeks (om mulig) til ledig sykkel: // Oppgave 2B: Lag innmaten void skriv_alle() { // Skriver ALT om ALLE syklene: // Oppgave 2C: Lag innmaten void utlevering() { // Utlever en sykkel et sted: // Oppgave 2D: Lag innmaten void innlevering() { // Innlever en sykkel ett sted: // Oppgave 2E: Lag innmaten void skriv_til_fil() { // Skriver ALT til fil: // Oppgave 2F: Lag innmaten void les_fra_fil() { // Leser ALT fra fil: // Oppgave 2G: Lag innmaten 7