Kontinuasjonseksamen

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

Kontinuasjonseksamen

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

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

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

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

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

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

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

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

KONTINUASJONSEKSAMEN

Eksamen. Objekt-orientert programmering

Kontinuasjonseksamen

Kontinuasjonseksamen

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

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

Eksamensoppgave i IMT1082 Objekt-orientert programmering

Høgskolen i Gjøvik Institutt 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

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

Eksamensoppgave i IMT1082 Objekt-orientert programmering

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

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

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

Kontinuasjonseksamensoppgave i IMT1031(F) Grunnleggende programmering

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

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

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

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

Kontinuasjonseksamen

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

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

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

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

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

GJØVIK INGENIØRHØGSKOLE

Kontinuasjonseksamen

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

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

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.

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

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

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

Kontinuasjonseksamen

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

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:

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

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 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. Avdeling for elektro- og allmennfag E K S A M E N. EKSAMENSDATO: 12. desember 1995 TID:

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

Programmering i C++ Løsningsforslag Eksamen høsten 2005

KONTINUASJONSEKSAMEN

HØYSKOLEN I OSLO, AVDELING FOR INGENIØRUTDANNING

KONTINUASJONSEKSAMEN

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

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: Objekt-orientert programmering IMT1082 / IMT1182 EKSAMENSDATO: 4. januar 2008 KLASSE(R): 06HBIND*, 06HBINFA, 06HBISA, 05HBINE* TID: 09.00-13.00 EMNEANSVARLIG: Frode Haug ANTALL SIDER UTLEVERT: TILLATTE HJELPEMIDLER: 9 (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.

NB: Oppgave 1a, 1b, 1c og 2 er totalt uavhengige og kan derfor løses separat. Oppgave 1 (30%) a) Det nedenfor stående programmet var det ønskelig at gav følgende utskrift: AAA : 0 2 4 6 8 10 12 14 16 18 BBB: 0 5 10 15 20 25 30 35 40 45 CCC: 0 10 20 30 40 50 60 70 80 90 BBB : 3 6 9 12 15 18 21 24 27 30 CCC: 6 12 18 24 30 36 42 48 54 60 Men, i koden er det fem feil av typen syntaktiske (som kompilatoren reagerer på) og/eller semantiske (logiske, som gjør at programmet ikke fungerer som ønsket). Hvilke? NB: Tallene helt til venstre på hver linje er ikke en del av koden, men kun ment som linjenummer, slik at du enklere kan henvise til hvor feilene er å finne. 1 #include <iostream> 2 #include <cstring> 3 using namespase std; 4 const int LEN = 20; 5 class Objekt { 6 private: 7 char text[len]; 8 int tall[len/2]; 9 public: 10 Objekt(char t[], int n) { strcmp(text, t); 11 for (int i = 0; i < LEN/2; i++) tall[i] = i*n; 12 void display() { cout << '\n' << text << ':'; 13 for (int i = 1; i <= LEN/2; i++) cout << ' ' << tall[i-1]; 14 void sett(int n) { for (int i = 0; i < LEN/2; i++) tall[i] = i*n; 15 ; 16 int main() { 17 Objekt obj1("aaa", 2), obj2("bbb", 5); 18 Objekt* obj3 = new Objekt("CCC", 10); 19 obj1.display(); obj2.display(); obj3->display(); 20 obj2.sett(3); obj3->sett(16); 21 obj2.display(); obj3.display(); 22 cout << "\n\n"; 23 return 0; 24 2

b) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> using namespace std; char text[] = "DEILIG-ER-DEN-HIMMEL-BLÅ-IHVERTFALL-ETTERPÅ"; void funk1(int a, int b=4, int c=3) { cout << text[a / b + c] << '\n'; void funk2(int c, char d='s') { text[c*4] = d; cout << text+((c*4)-2) << '\n'; char funk3(int e) { return text[2*e/3]; int main() { funk1(27, 8, 7); funk1(33); funk2(10, 'X'); text[30] = '\0'; funk2(6); funk2(7, funk3(15)); return 0; c) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> using namespace std; class A { private: int a, b; public: A(int c) { a = c; b = a % 4; virtual void display() { cout << a << ' ' << b << ' '; virtual void funk() { a %= b; b++; bool operator >= (int d) { return (a >= d); ; class B : public A { private: int a, c; public: B(int d) : A(d) { a = c = 7; void display() { A::display(); cout << '\n' << a << ' ' << c << '\n'; void funk() { a += c; c--; ; int main() { A* obj[3]; obj[0] = new A(14); obj[0]->display(); obj[1] = new A(17); obj[1]->funk(); obj[1]->display(); cout << '\n'; obj[2] = new B(18); obj[2]->funk(); obj[2]->display(); cout << (*obj[1] >= 16) << '\n'; cout << (*obj[2] >= 16) << '\n'; return 0; 3

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 spesielt merke til const ene, de to klassene (med datamedlemmer og funksjoner), globale variable, main() og de tre ferdiglagde les( )-funksjonene. Bruk alt dette svært aktivt! I denne oppgaven skal du lage et lite program som holder orden på ulike kategorier av DVDer. Slike kategorier kan f.eks. være: Action, Barn, Drama, Familie, Grøsser, Komedie, Krig og Western. Det finnes maksimalt 50 ulike slike kategorier i vårt tilfelle. Datastrukturen Datastrukturen består (som du ser i vedlegget) av peker-arrayen kategoriene, der siste_kat av disse pekerne for tiden er i bruk. Hvert Kategori-objekt igjen inneholder en liste med de DVDene som inngår i vedkommende kategori. Alle klasser, det de arver, alle datamedlemmer og alle prototyper for medlemsfunksjoner er komplett og fullstendig deklarert/definert i vedlegget. Din oppgave blir kun å skrive innmaten til en del funksjoner (totalt 22 stk.) inni og utenfor de to klassene. Oppgaven a) Skriv innmaten til funksjonene void skriv_kategoriene() og void Kategori::skriv() For alle kategoriene skal følgende skrives ut: nummer/indeks, navn og antall DVDer. Skriv innmaten til funksjonene void skriv_en_kategori(), void Kategori::skriv_alt() og void DVD::display() Brukeren spørres først etter et lovlig kategorinummer (bruk aktuell les( )). For vedkommende kategori skrives alt ut, dvs. dets navn, antall DVDer, samt alle data om alle DVDene i kategorien. b) Skriv innmaten til funksjonene void ny_kategori()og Kategori::Kategori( ) Om det ikke er plass til flere kategorier, så kommer det en melding. I motsatt fall spørres det etter et kategorinavn (bruk aktuell les( )). Det opprettes så en ny kategori med dette navnet, samt at dets andre datamedlem initieres. Den nye kategoriens nummer skrives også ut. c) Skriv innmaten til funksjonene int finn_dvd( ) og bool Kategori::inneholder( ) Den første funksjonen returnerer (om mulig) indeksen for den kategorien der en DVD med nummer/id lik funksjonens parameter evt. befinner seg, ellers returneres 0. Til denne jobben benytter finn_dvd( ) seg av funksjonen inneholder( ), som bare returnerer true/false til om en DVD med nummer/id lik parameteren befinner seg i den kategorien eller ei. 4

d) Skriv innmaten til funksjonene void ny_dvd(), void Kategori::ny( ), DVD::DVD( ) og void DVD::les_data() Først spørres etter et nummer/id for en DVD. Om denne allerede finnes (bruk finn_dvd( )) i samlingen, kommer det en melding. I motsatt fall leses et lovlig kategorinummer. Det opprettes så og legges inn en ny DVD i vedkommende kategori. Den nye leser selv inn alle sine andre data. NB: Husk her å bruke ulike les( )-funksjoner meget aktivt! e) Skriv innmaten til funksjonene void slett_dvd() og void Kategori::slett( ) Det spørres først etter en DVDs nummer/id. Finnes den ikke, kommer det en melding. I motsatt fall slettes/fjernes den fra den aktuelle kategorien. f) Skriv innmaten til funksjonene void slett_kategori(), bool Kategori::tom(), DVD* Kategori::hent_forste() og void Kategori::ny( ) Først spørres det etter et lovlig kategorinummer. Så lenge denne kategorien fortsatt inneholder DVDer (ikke er tom), tilbys brukeren å flytte den første gjenværende DVDen i dets liste over til en annen kategori. Velger brukeren kategori nr.0, så blir DVDen slettet/fjernet helt. Den siste/ bakerste kategorien flyttes så til der den slettede har ligget, og siste_kat telles ned med 1. g) Skriv innmaten til funksjonene void les_fra_fil(), void Kategori::les_fra_fil( ) og void DVD::les_fra_fil( ) Funksjonene sørger for at hele datastrukturen blir lest inn fra filen DVD.DTA. Denne har følgende format for hver kategori-post: Først en linje med kategoriens navn. Så en linje med antall DVDer i kategorien. Deretter fire linjer pr. DVD i kategorien med formatet: Først en linje med det 13-sifrede unike nummeret/iden, etterfulgt av årstallet (med en blank mellom). Så tre tekstlinjer, med henholdsvis DVDens: tittel, beskrivelse og omtale av ekstra-materialet. (NB: Du skal altså ikke lage noen funksjoner som skriver til fil i denne eksamensoppgaven.) Annet (klargjørende?): Du skal bruke LISTTOOL ifm. løsningen av denne oppgaven. Alle DVDer er identifisert vha. et unikt 13-sifret nummer (som alltid står bakpå DVDene, rett under strekkoden). Denne lagrer vi her som en tekst, fordi int kan bare inneholde opptil 11 sifre. Men: I vårt program har vi ingen sjekk på om den teksten brukeren angir for en DVDs nummer/id alltid er 13 lang og kun inneholder sifre/tall. Som det kommer fram av vedlegget så er dataene som lagres om hver DVD svært begrenset. Vi kunne selvsagt tatt med masse annet også om hver DVD, som f.eks. skuespillere, produsent, sone, språk og teksting. (Men nå er ikke poenget med denne oppgaven å håndtere masse data...) 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. Lykke til, og måtte du få se mange gode DVDer! frode_ætt_haugianerne.no 5

Vedlegg: Halvferdig programkode #include <iostream> #include <fstream> #include <iomanip> #include <cstring> #include <cctype> #include <cstdlib> #include "listtool.h" using namespace std; // INCLUDE: // cin, cout // i(f)stream, o(f)stream // setw // strlen, strcpy // toupper // atoi // "Verktøykasse" for listehåndtering. // CONST: const int STRLEN = 80; // Max. streng-lengde. const int MAXKAT = 50; // Max. antall kategorier med DVDer. // KLASSER: class DVD : public Text_element { private: // Text=13-sifret unikt tall (int er for liten). char* tittel; // Filmens/DVDens tittel. char* beskr; // Beskrivelse av selve filmen/innholdet. char* extra; // beskrivelse av ekstramaterialet. int aar; // Utgivelsesår. // Kunne ha vært MASSE andre data også... public: // Funksjons-deklarasjoner: DVD(char t[]); // Lag innmaten ifm. oppgave 2D ~DVD(); void display(); // Lag innmaten ifm. oppgave 2A void les_data(); // Lag innmaten ifm. oppgave 2D void les_fra_fil(istream *inn); // Lag innmaten ifm. oppgave 2G ; class Kategori { private: char* navn; List* dvdene; // Kategoriens navn. // Liste med/av DVDene i kategorien. public: // Funksjons-deklarasjoner: Kategori(char t[]); // Lag innmaten ifm. oppgave 2B ~Kategori(); void skriv(); // Lag innmaten ifm. oppgave 2A void skriv_alt(); // Lag innmaten ifm. oppgave 2A bool inneholder(char t[]); // Lag innmaten ifm. oppgave 2C void ny(char t[]); // Lag innmaten ifm. oppgave 2D void ny(dvd* d); // Lag innmaten ifm. oppgave 2F void slett(char t[]); // Lag innmaten ifm. oppgave 2E bool tom(); // Lag innmaten ifm. oppgave 2F DVD* hent_forste(); // Lag innmaten ifm. oppgave 2F void les_fra_fil(istream *inn); // Lag innmaten ifm. oppgave 2G ; // DEKLARASJON AV FUNKSJONER: void skriv_meny(); char les(); int les(char* t, const int MIN, const int MAX); void les(const char t[], char s[], const int LEN); void skriv_kategoriene(); // Oppgave 2A void skriv_en_kategori(); // Oppgave 2A void ny_kategori(); // Oppgave 2B int finn_dvd(); // Oppgave 2C void ny_dvd(); // Oppgave 2D void slett_dvd(); // Oppgave 2E void slett_kategori(); // Oppgave 2F void les_fra_fil(); // Oppgave 2G 6

// GLOBALE VARIABLE: Kategori* kategoriene[maxkat+1]; // Datastrukturen (bruker indeks 1-50). int siste_kat; // Brukt av arrayen over. int main() { char valg; // HOVEDPROGRAM: les_fra_fil(); // Oppgave 2G skriv_meny(); valg = les(); while (valg!= 'Q') { switch(valg) { case 'K': skriv_kategoriene(); break; // Oppgave 2A case 'S': skriv_en_kategori(); break; // Oppgave 2A case 'N': ny_kategori(); break; // Oppgave 2B case 'D': ny_dvd(); break; // Oppgave 2D case 'F': slett_dvd(); break; // Oppgave 2E case 'X': slett_kategori(); break; // Oppgave 2F default: skriv_meny(); valg = les(); cout << "\n\n"; return 0; break; // ************************************************************************* // ****************** DEFINISJON AV MEDLEMS-FUNKSJONER: ****************** // ************************************************************************* // ******************************** DVD: ******************************* DVD::DVD(char t[]) : Text_element(t) { // Oppgave 2D: Lag innmaten // Nullstiller: DVD::~DVD() { // Frigir alt allokert: delete [] tittel; delete [] beskr; delete [] extra; void DVD::display() { // Skriver alle data: void DVD::les_data() { // Oppgave 2D: Lag innmaten // Leser inn ALLE data: void DVD::les_fra_fil(istream *inn) { // Oppgave 2G: Lag innmaten // Leser ALT fra fil: 7

// ****************************** KATEGORI: ****************************** Kategori::Kategori(char t[]) { // Oppgave 2B: Lag innmaten // Initierer ALLE data: Kategori::~Kategori() { delete [] navn; delete dvdene; void Kategori::skriv() { void Kategori::skriv_alt() { bool Kategori::inneholder(char t[]) { // Oppgave 2C: Lag innmaten void Kategori::ny(char t[]) { // Oppgave 2D: Lag innmaten void Kategori::ny(DVD* d) { // Oppgave 2F: Lag innmaten void Kategori::slett(char t[]) { // Oppgave 2E: Lag innmaten bool Kategori::tom() { // Oppgave 2F: Lag innmaten DVD* Kategori::hent_forste() { // Oppgave 2F: Lag innmaten // Skriver navn og antall DVDer: // Skriver ALT: // Returnerer om noen DVD har 't' som ID: // Legger inn ny DVD: // Legger inn DVD: // Sletter/fjerner DVD med ID lik 't': // Returnerer om kategori er tom eller ei: // Returnerer med første DVD i lista: void Kategori::les_fra_fil(istream *inn) { // Oppgave 2G: Lag innmaten // Leser fra fil: // **************************************************************************** // ****************** DEFINISJON AV (GLOBALE) FUNKSJONER: ****************** // **************************************************************************** void skriv_meny() { // Skriver alle mulige menyvalg: cout << "\n\nfølgende KOMMANDOER ER TILGJENGELIGE:" << "\n K - skriv Kategori(navnene)" << "\n S - Skriv en kategori(s DVDer)" << "\n N - Ny kategori" << "\n D - ny DVD" << "\n F - Fjern/slett en DVD" << "\n X - fjern/slett en kategori - evt. flytt/slett dets DVDer" << "\n Q - Quit / avslutt"; 8

char les() { char ch; cout << "\n\nkommando: "; cin >> ch; cin.ignore(); return (toupper(ch)); // Leser og upcaser brukerens valg/ønske: // Leser et TALL mellom MIN og MAX: int les(char* t, const int MIN, const int MAX) { char text[strlen]; int n; do { cout << '\t' << t << " (" << MIN << '-' << MAX << "): "; cin.getline(text, STRLEN); n = atoi(text); // Leser som tekst - omgjør: while (n < MIN n > MAX); return n; // 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. void skriv_kategoriene() { void skriv_en_kategori() { void ny_kategori() { // Oppgave 2B: Lag innmaten // Skriver ALLE kategorienes navn: // Skriver ALT om EN kategori: // Legger inn en ny kategori: // Finner (om mulig) og returnerer indeks for int finn_dvd(char t[]) { // kategori der DVD med ID lik 't' er: // Oppgave 2C: Lag innmaten void ny_dvd() { // Oppgave 2D: Lag innmaten void slett_dvd() { // Oppgave 2E: Lag innmaten // Legger inn ny DVD i kategori: // Slett/fjern en gitt DVD: // Sletter en hel kategori, men tilbyr void slett_kategori() { // brukeren å flytte alle dets DVDer: // Oppgave 2F: Lag innmaten void les_fra_fil() { // Oppgave 2G: Lag innmaten // Leser HELE datastrukturen fra fil: 9