KONTINUASJONSEKSAMEN

Like dokumenter
GJØVIK INGENIØRHØGSKOLE

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

KONTINUASJONSEKSAMEN

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

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.

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

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

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

KONTINUASJONSEKSAMEN

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

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)

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

GJØVIK INGENIØRHØGSKOLE

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

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

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

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

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

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

Kontinuasjonseksamen

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

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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

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

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

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

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

Kontinuasjonseksamen

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

Kontinuasjonseksamen

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

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

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

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

Kontinuasjonseksamen

Eksamensoppgave i IMT1082 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. Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 7. desember HINDA / 00HINDB / 00HINEA 00HDMUA / 00HDMUB / 00HINGA

Kontinuasjonseksamensoppgave i IMT1031(F) Grunnleggende programmering

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

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

Eksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

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

Kontinuasjonseksamen

Eksamen. Objekt-orientert programmering

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

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

KONTINUASJONSEKSAMEN

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

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

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

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 SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

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

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

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

KONTINUASJONSEKSAMEN

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

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

HØYSKOLEN I OSLO, AVDELING FOR INGENIØRUTDANNING

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

EKSAMEN. Flexibel ingeniørutdanning, 2kl. Bygg m.fl.

KONTINUASJONSEKSAMEN

Transkript:

Høgskolen i Gjøvik KONTINUASJONSEKSAMEN FAGNAVN: FAGNUMMER: Grunnleggende programmering og datastrukturer LO169A EKSAMENSDATO: 4. september 1996 KLASSE: 1 AA/AE TID: 09.00-14.00 FAGLÆRER: Frode Haug ANTALL SIDER UTLEVERT: TILLATTE HJELPEMIDLER: 7 (inkludert denne forside) Alle trykte og skrevne. - Kontroller at alle oppgavearkene er tilstede. - Les hele oppgaveteksten nøye, før du begynner å besvare noe som helst. - INNFØRING MED PENN, evt. trykkblyant som gir gjennomslag. Ved innlevering skilles hvit og gul besvarelse og legges i hvert sitt omslag. Oppgavetekst og kladd (og evt. blå kopi) beholder kandidaten. - Ikke skriv noe av din besvarelse på oppgavearkene. - Husk kandidatnummer på alle ark.

Oppgaven i korthet Du skal lage et program som holder orden på et lager av varer, deres leverandører og hvordan etterbestille varer som det (snart) er tomt for på lageret. Programmet skal være menydrevet (se "main" i vedlegget), og det skal være mulig å foreta følgende operasjoner: - registrere både en ny vare og en ny leverandør - selge ett stykk av en angitt vare - motta (fra leverandør) flere stykk av en angitt vare - skriv etterbestilling (til fil) for en angitt vare - lagre/hente hele datastrukturen fra/til fil Klasser og datastrukturen Som du ser av vedlegget, så har vi to klasser kalt henholdsvis "Leverandor" og "Vare". Inni hver av klassene er det angitt en del datamedlemmer (+ den som arves fra "Num_element"). Det er strengt tatt ikke nødvendig å hverken definere flere klasser eller datamedlemmer for å løse denne eksamensoppgave. Som du også ser av vedlegget, så vil datastrukturen bestå av to ulike lister, en med varer og en med leverandører. Les hele oppgaveteksten, og studer vedlegget nøye før du starter med å løse oppgavene. (Det er strengt tatt ikke nødvendig med definisjon av flere globale variable for å løse oppgaven.) NB: For å få et fullverdig program, så er det ikke nok at du kun koder de funksjonene som er angitt i de nedenforstående oppgavene. Du må/bør også lage en del andre funksjoner (det vil spesielt være naturlig med funksjoner inni class'ene). Alle disse nødvendige funksjonene skal også angis som en del av besvarelsen. Oppgave 1: a) Skriv innmaten til funksjonen " void ny_leverandor() ". Funksjonen skal opprette en ny leverandør og sørge for at alle relevante data leses inn, f.eks. vha. en constructor. Leverandørens nummer settes til en høyere enn det "siste_leverandor" er hittil. b) Skriv innmaten til funksjonen " void ny_vare() ". Funksjonen skal opprette en ny vare og sørge for at alle relevante data leses inn, f.eks. vha. en constructor. Varens nummer settes til en høyere enn det "siste_vare" er hittil. 2

Oppgave 2: a) Skriv innmaten til funksjonen " void selg_vare() ". Funksjonen leser et lovlig varenummer. Finnes denne varen, så telles (om mulig) varens "ant_igjen" ned med 1, ellers skrives meldinger. Dersom "ant_igjen" er mindre eller lik "bestillingsgrense", så har vi følgende tre alternativer for status: - "OK": Skifter til "Avventer". Anmodning om etterbestilling skrives til filen "AVVENTE.DTA" (mer om dette rett nedenfor). - "Avventer": Melding gis om at har allerede skrevet til filen "AVVENTE.DTA". - "Bestilt": Melding gis om at etterbestilling er allerede foretatt. Det er slik at når "ant_igjen" <= "bestillingsgrense", så er det ikke sikkert at det automatisk og umiddelbart skal etterbestilles. Dette skal brukeren manuelt kunne avgjøre (vha. kommandoen "B", se oppgave 3). Derfor, hver gang det selges en vare som har "ant_igjen" <= "bestillingsgrense" og "status" == "OK", så skrives varens nummer til slutt på filen "AVVENTE.DTA". Alt dette skal altså denne funksjonen sørge for at skjer. b) Skriv innmaten til funksjonen " void mottatt_vare() ". Funksjonen leser et lovlig varenummer. Finnes denne varen, så telles varens "ant_igjen" opp med det antallet som brukeren taster inn. Status settes til "OK". Oppgave 3: Skriv innmaten til funksjonen " void bestille() ". Funksjonen leser filen "AVVENTE.DTA". For hvert nummer som den finner skal brukeren spørres om hun/han ønsker å etterbestille denne varen. Er svaret "Nei", så settes "status" tilbake fra "Avventer" til "OK". Er svaret "Ja", så settes "status" til "Bestilt", og bestilling skrives til slutt på filen "BESTILL.DTA". Hver slik bestilling skal innebære leverandørens navn, gate og sted, samt varens navn, nummer og antall ønsket. Når filen "AVVENTE.DTA" er ferdig lest, så skal hele dens innhold slettes/nullstilles. Oppgave 4: Skriv innmaten til funksjonen " void til_fil() ". Funksjonen skal skrive hele datastrukturen (begge listene) til to filer, henholdsvis "VARER.DTA" og "LEVERAND.DTA". Disse skal være på binær form. Oppgave 5: Skriv innmaten til funksjonen " void fra_fil() ". Funksjonen leser inn og oppretter datastrukturen vha. filene beskrevet i oppgave 4. 3

Diverse: - Bruk LISTTOOL.H. - Husk å bruk funksjonen "int les_tall(...)" der det er naturlig. - Vi forutsetter at det er plass til alle data i maskinens primærhukommelse. - Gjør dine egne forutsetninger dersom du finner oppgaveteksten upresis eller ufullstendig. Gjør i så fall rede for disse forutsetningene. Lykke til, og måtte varen som leveres vare lenge! FrodeH 4

Vedlegg: Hovedrisset av programmet: // Fil: CPP \ EXTRAMEN \ EX_S96.TPL // Hovedrisset for kontinuasjonseksamen i C++, september 1996. // Laget av Frode Haug, HiG, august 1996. // Litt endret/modifisert av FrodeH, HiG, våren 2003 #include <iostream> #include <fstream> #include <cctype> #include "listtool.h" // INCLUDE: // cout, cin // ifstream, ofstream, fstream // toupper // (Verktøykasse for håndtering av lister.) using namespace std; // CONST og ENUM: const int STRLEN = 30; // Max.lengde av tekst. char AVVENTE_FIL[] = "AVVENTE.DTA"; // Fire ulike filnavn: char BESTILL_FIL[] = "BESTILL.DTA"; char VARER_FIL[] = "VARER.DTA"; char LEVERANDOR_FIL[] = "LEVERAND.DTA"; enum typer { OK, Avventer, Bestilt ; // Status for en vare. // DEKLARASJON AV PROSEDYRER: int les_tall(char* ledetekst, int min, int max); void skriv_meny(); void ny_leverandor(); // Oppgave 1a void ny_vare(); // Oppgave 1b void selg_vare(); // Oppgave 2a void mottatt_vare(); // Oppgave 2b void bestille(); // Oppgave 3 void til_fil(); // Oppgave 4 void fra_fil(); // Oppgave 5 // KLASSER: class Leverandor : public Num_element { // Klassen 'Leverandor'. private: char navn[strlen]; // Leverandørens navn char gate[strlen]; // Leverandørens gateadresse char sted[strlen]; // Leverandørens postnummer og -sted. public: // Constructorer, destructor og funksjoner du måtte trenge. ; 5

class Vare : public Num_element { // Klassen 'Vare'. private: char navn[strlen]; // Varens navn. int leverandor_nr; // Nummer på leverandøren av denne varen. float pris; // Varens pris. int ant_igjen; // Antall igjen på lager av varen. int bestillingsgrense; // Antall igjen når det skal anmodes om etterbestilling. typer status; // Status for varen (OK, Avventer, Bestilt). public: // Constructorer, destructor og funksjoner du måtte trenge. ; // GLOBALE VARIABLE: List* leverandorer; // Liste av leverandører. List* varer; // Liste av varer. int siste_leverandor = 0; // Siste ID brukt for leverandører. int siste_vare = 0; // Siste ID brukt for varer. int main() { char kommando; // HOVEDPROGRAM: leverandorer = new List(Sorted); varer = new List(Sorted); fra_fil(); // Oppretter to tomme lister: // Leser datastrukturen fra to filer. skriv_meny(); // Leser brukerens menyvalg: cout << "\n\ngi kommando ( L, V, S, M, B, T, Q ): "; cin >> kommando; cin.ignore(); kommando = toupper(kommando); while (kommando!= 'Q') { // Sålenge ikke avslutt: switch (kommando) { case 'L': ny_leverandor(); break; // Oppretter ny leverandør. case 'V': ny_vare(); break; // Oppretter ny vare. case 'S': selg_vare(); break; // Selger ett stk. av en vare. case 'M': mottatt_vare(); break; // Mottar flere av en vare. case 'B': bestille(); break; // Lager etterbestillinger. case 'T': til_fil(); break; // Skriver datastr. til to filer. default: skriv_meny(); break; // Skriver menyvalgene. cout << "\n\ngi kommando ( L, V, S, M, B, T, Q ): "; // Leser menyvalg: cin >> kommando; cin.ignore(); kommando = toupper(kommando); bestille(); // Sjekker filen 'BESTILL.DTA'. til_fil(); // Skriver datastrukturen til to filer. return 0; 6

// DEFINISJON AV PROSEDYRER: // Skriver tekst, returnere med tall i intervallet min til max: int les_tall(char* ledetekst, int min, int max) { int tall; do { cout << '\t' << ledetekst << " (" << min << '-' << max << "): "; cin >> tall; while (tall < min tall > max); cin.ignore(); return tall; void skriv_meny() { // Brukermenyen/-valgene: cout << "\n\n\nfølgende kommandoer er tilgjengelige/lovlige:"; cout << "\n\tl - legge inn ny Leverandør"; cout << "\n\tv - legge inn ny Vare"; cout << "\n\ts - Selg en vare"; cout << "\n\tm - Mottak av bestilt vare"; cout << "\n\tb - Bestille varer"; cout << "\n\tt - skrive data Til fil"; cout << "\n\tq - Quit/avslutt programmet"; void ny_leverandor() { // Oppretter og legger inn ny leverandør. // Se oppgaveteksten: OPPGAVE 1a void ny_vare() { // Oppretter og legger inn ny vare. // Se oppgaveteksten: OPPGAVE 1b void selg_vare() { // Selger ett stk. av en vare. // Se oppgaveteksten: OPPGAVE 2a void mottatt_vare() { // Mottat flere av en (etterbestilt) vare. // Se oppgaveteksten: OPPGAVE 2b void bestille() { // Skriver etterbestilling(er) til fil. // Se oppgaveteksten: OPPGAVE 3 void til_fil() { // Skriver hele datastrukturen til fil. // Se oppgaveteksten: OPPGAVE 4 void fra_fil() { // Leser hele datastrukturen fra fil. // Se oppgaveteksten: OPPGAVE 5 7