Kontinuasjonseksamen



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

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

Kontinuasjonseksamen

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

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

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

Kontinuasjonseksamen

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

Eksamen. Objekt-orientert programmering

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

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

Kontinuasjonseksamensoppgave 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

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

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

KONTINUASJONSEKSAMEN

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

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 03HBIND*, 03HBINFA, 03HBMETEA

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 Institutt for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

Kontinuasjonseksamen

Eksamensoppgave i IMT1082 Objekt-orientert 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

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

Kontinuasjonseksamen

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

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

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

KONTINUASJONSEKSAMEN

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

Kontinuasjonseksamen

Kontinuasjonseksamensoppgave i IMT1031(F) Grunnleggende programmering

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

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

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

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

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. Grunnleggende datakunnskap og programmering 98HINDA / 98HINDB / 98HINEA 98HDMUA / 98HDMUB / 98HINGA

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. - Kontroller at alle oppgavearkene er tilstede. - Les hele oppgaveteksten nøye, før du begynner å besvare noe som helst.

KONTINUASJONSEKSAMEN

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

GJØVIK INGENIØRHØGSKOLE

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

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

KONTINUASJONSEKSAMEN

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

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

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

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

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

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 Institutt for informatikk og medieteknikk E K S A M E N. 04HBIND* / 04HBINFA / div. andre

Kontinuasjonseksamen

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag E K S A M E N. EKSAMENSDATO: 12. desember 1995 TID:

KONTINUASJONSEKSAMEN

KONTINUASJONSEKSAMEN

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

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

HØGSKOLEN I SØR-TRØNDELAG

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 Avdeling for informatikk og e-læring - AITeL

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Transkript:

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk Kontinuasjonseksamen EMNENAVN: EMNENUMMER: Objekt-orientert programmering IMT1082 / IMT1182 EKSAMENSDATO: 5. januar 2009 KLASSE(R): 07HB IND* / PUA / DRA / ISA 06HBINE* 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: Katt - ikke farlig Løve - farlig Gaupe - ikke farlig Tiger - farlig Jaguar - farlig Tiger har indeks nr.3 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 namespace std; 4 class Dyr { 5 private: 6 char navn[30]; 7 public: 8 Dyr() { strcpy(navn, ""); 9 virtual sett(char nvn[]) { strcpy(navn, nvn); 10 virtual void display() { cout << navn << ' '; 11 bool operator == (char nvn[]) { return (!strcmp(navn, nvn)); 12 ; 13 class Katte : public Dyr { 14 private: 15 bool farlig; 16 public: 17 Katte() { farlig = False; 18 void sett(char nvn[], bool f) { Dyr::sett(nvn); farlig = f; 19 void display() { Dyr::display(); 20 cout << " - " << ((farlig)? "ikke " : "") << "farlig\n"; 21 ; 22 int main() { 23 Dyr dyrene[4]; 24 int i; 25 dyrene[0].sett("katt", false); dyrene[1].sett("løve", true); 26 dyrene[2].sett("gaupe", false); dyrene[3].sett("tiger", true); 27 dyrene[4].sett("jaguar", true); 28 for (i = 0; i < 5; i++) dyrene[i].display(); 29 for (i = 0; i < 5; i++) 30 if (dyrene[i] == "Tiger") cout << "Tiger har indeks nr." << i << '\n'; 31 return 0; 32 2

b) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> #include <cstring> using namespace std; char txt[] = "DYKKARKLUBBENSDYBDEWEBKAMERA"; void funk(int a, int b=17) { for (int i = a; i > b/3; i-- ) cout << txt[i]; void funk(int a, char c) { txt[a/3] = txt[a/3+1] = txt[a/3+2] = c; int main() { char txt2[10]; char* t = &txt[14]; int n = strlen(txt); for ( ; *t!= 'E'; t++) cout << *t; cout << '\n'; t = &txt[(n%5)+1]; for ( ; *t!= 'U'; t++) cout << *t; cout << '\n'; strncpy(txt2, t, 3); txt2[3] = '\0'; cout << txt2 << '\n'; funk(9, 15); cout << '\n'; funk(62, 'W'); t = &txt[19]; cout << t << '\n'; return 0; c) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> #include <cstring> using namespace std; const int LEN = 5; class A { private: int a1, a2; public: A(int t1) { a1 = 0; a2 = t1; virtual void display() { cout << a1 << ' ' << a2 << ' '; void operator = (int t) { a1 = t; void operator + (int t) { a1 += t; ; class B : public A { private: int a1, b1; public: B(int t1, int t2) : A(t1){ a1 = t2; b1 = 4; void display() { A::display(); cout << a1 << ' ' << b1; void operator * (int t) { b1 *= t; ; int main() { A* aobj = new A(13); aobj->display(); cout << '\n'; B* bobj = new B(33, 23); bobj->display(); cout << '\n'; delete aobj; aobj = new B(43, 53); *aobj = 63; aobj->display(); cout << '\n'; *bobj * 3; bobj->display(); cout << '\n'; *bobj + 7; bobj->display(); cout << '\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 alle const ene, de to klassene (med datamedlemmer og funksjoner), globale variable, main(), de fire ferdiglagde les( )-funksjonene. Legg også merke til den ferdiglagde Program::hent_prosent( ). Bruk alt dette svært aktivt! I denne oppgaven skal du lage et lite program som holder orden på en banks ulike kunder og deres lån (rente og gjenstående lånebeløp). Datastrukturen Datastrukturen består (som du ser i vedlegget) av en liste med kunder, samt en array med bankens fem ulike låneprogram. En kunde har bare ett lån i banken, og ethvert lån er koblet opp mot ett låneprogram. 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 16 stk.) inni og utenfor klassene. Oppgaven a) Skriv innmaten til funksjonene void skriv() og void Kunde::display() Den første funksjonen ber brukeren om et aktuelt 7-sifret kundenummer. Om denne ikke finnes kommer det en melding. Ellers skrives (vha. den andre funksjonen og med et passende utseende) alle kundens data ut på skjermen. b) Skriv innmaten til funksjonene void innbetaling() og void Kunde::innbetaling() Den første funksjonen leser et potensielt kundenummer. Om denne ikke finnes kommer det en melding. I motsatt fall foretas det en innbetaling på (redusering av) lånet hos vedkommende kunde vha. den andre funksjonen. c) Skriv innmaten til funksjonene void endre_program() og void Program::endre_prosent() Den første funksjonen leser et aktuelt nummer (1-5) for et (låne)program. Den sørger så for at dette programmets lånerente evt. blir endret vha. den andre funksjonen. Denne siste funksjonen skal først vise/presentere alle låneprogrammets nåværende data. Siden det er en rimelig alvorlig operasjon å endre et låneprograms rente, så spørres det etter den nye verdien to ganger. Om disse ikke er like, kommer det en melding, og ingen endring foretas. I motsatt fall settes renten til den (to ganger identisk innskrevne) nye verdien. d) Skriv innmaten til funksjonene void ny_kunde() og Kunde::Kunde( ) Den første funksjonen leser et potensielt nytt kundenummer. Om denne finnes allerede kommer det en melding. I motsatt fall opprettes, og legges inn, et nytt kunde-objekt. Constructoren sørger for at alle objektets data blir satt/fylt med innleste rimelige verdier. Bruk les-funksjoner og const er meget aktivt! Månedlig avdrag settes til: belop / (ant_aar * 12) 4

e) Skriv innmaten til funksjonene void varsling() og void Kunde::varsel( ) Den første funksjonen går gjennom alle kundene, og sørger for at (vha. den andre funksjonen) det til filen VARSEL.DTA blir skrevet innbetalingsvarsel for hver av kundene liggende fortløpende etter hverandre på filen. Innbetalingsvarsel for en kunde skal inneholde: navn, adresse, kunde-/kontonr, låneprogramnr, prosent (på lånet, hentet fra programmet), antall år lånet totalt går over, restlånet, månedlig fast avdrag, totalt å innbetale den 15. i denne måned ( totalt = avdrag + ((belop * prosent) / (100 * 12)) ). (Denne funksjonen kjøres helt i starten av hver hver måned. Filen blir skrevet ut, og de ulike varslene blir (klippet opp og) sendt (mail eller brev) til hver enkelt kunde.) f) Skriv innmaten til de tre void skriv_til_fil( )-funksjonene. Funksjonene skal til sammen sørge for at hele datastrukturen skrives til filene PROGRAM.DTA (programmer) og LAANKUND.DTA (kunder). Formatene bestemmer du helt selv, men de skal oppgis som en del av besvarelsen. g) Skriv innmaten til funksjonene void les_fra_fil(), Kunde::Kunde(, ) og Program::Program(, ) Funksjonene skal til sammen sørge for at hele datastrukturen blir lest inn igjen fra filene angitt ovenfor, og med det formatet du selv der bestemte. Annet (klargjørende?): Du skal bruke LISTTOOL ifm. løsningen av denne oppgaven. Det er bl.a foretatt følgende forenklinger ift. et reelt tilfelle: Alle må betale sine lån den 15. hver måned (dvs. ikke mulig f.eks. kvatals-/halvårsvis). Innbetalingen som foregår ifm. oppgave 2b er basert på varselet ifm. oppgave 2e. Men, det er ingen sjekk om at disse beløpene er de samme. Kunden kan selv velge å betale alt fra 0 (null) kroner og helt opp til lånets størrelse. Det betales like mye i renter hver måned (jfr. tallet 12 flere steder ovenfor), uavhengig av månedens egentlige lengde (28-31 dager). Ikke mulig med: endre antall låneår, endre en kundes låneprogram, avdragsfrie år, legge inn nye låneprogram (de fem er faste), utskrift av de fem låneprogrammene. Ifm. en Kunde er det kun belop som endres alt annet er fast. Ifm. et Program er det kun mulig å endre på prosent. En renteendring (oppgave 2c) får umiddelbar konsekvens ved neste varsel (oppgave 2e) ikke noen seks ukers forsinkelse/varsel som mange banker opererer med. Kundenummer = kundens ID = kontonummer (de syv siste sifrene i et reelt 11-sifret kontonummer). Kundens faste månedlige avdrag de neste ant_aar årene blir satt i oppgave 2d. Rentene kommer altså i tillegg, men disse blir mindre etter hvert som lånet nedbetales dvs. et serielån (mot mer vanlig: annuitetslån, der månedlig sum (avdrag + renter) er den samme). 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 - også med (fremtidige) lån! frode_ætt_haugianerne.no 5

Vedlegg 1: Halvferdig programkode // INCLUDE: #include <iostream> // cin, cout #include <fstream> // i(f)stream, o(f)stream #include <cstring> // strlen, strcpy #include <cctype> // toupper #include <cstdlib> // atoi, atof #include "listtool.h" // "Verktøykasse" for listehåndtering. using namespace std; // CONST: const int STRLEN = 80; // Standard streng-lengde (i array). const int ANTPROGRAM = 5; // Antall ulike låneprogram banken har. const int MAXLAANEAAR = 25; // Max. antall låneår. const int MINKONTO = 1000000; // Nummer på første kontonummer. const int MAXKONTO = 9999999; // Nummer på siste kontonummer. const int MINLAAN = 10000; // Min. beløp på lån (10-tusen). const int MAXLAAN = 10000000; // Max. beløp på lån (10 mill.). const float MAXPROSENT = 30.0F; // Max. prosent for/på et lån. // KLASSER: class Kunde : public Num_element { private: // number = kundens ID/kontonummer. char * navn, // Navn. * adr, // Adresse (gate og sted). * mail; // Mail-adresse. int tlf, // Telefon (fast eller mobil). program, // Låneprogramnummer (= 1-5). ant_aar; // Antall år lånet går over. float belop, // Nåværende lånebeløp. avdrag; // Månedlig fast avdragsbeløp. public: Kunde(int nr); // Lag innmaten ifm. oppgave 2D. Kunde(int nr, istream* inn); // Lag innmaten ifm. oppgave 2G. ~Kunde() { delete [] navn; delete [] adr; delete [] mail; void display(); // Lag innmaten ifm. oppgave 2A. void innbetaling(); // Lag innmaten ifm. oppgave 2B. void varsel(ostream* ut); // Lag innmaten ifm. oppgave 2E. void skriv_til_fil(ostream* ut); // Lag innmaten ifm. oppgave 2F. ; class Program { private: char* beskrivelse; float prosent; // Beskrivelse av låneprogrammet. // Nåværende låneprosent på programmet. public: Program(char* t, float p); // Lag innmaten ifm. oppgave 2G. ~Program() { delete [] beskrivelse; void endre_prosent(); // Lag innmaten ifm. oppgave 2C. float hent_prosent() { return prosent; void skriv_til_fil(ostream* ut); // Lag innmaten ifm. oppgave 2F. ; // DEKLARASJON AV FUNKSJONER: void skriv_meny(); char les(); int les(char* t, const int MIN, const int MAX); float les(char* t, const float MAX); void les(const char t[], char s[], const int LEN); void skriv(); // Lag innmaten ifm. oppgave 2A. void innbetaling(); // Lag innmaten ifm. oppgave 2B. void endre_program(); // Lag innmaten ifm. oppgave 2C. void ny_kunde(); // Lag innmaten ifm. oppgave 2D. void varsling(); // Lag innmaten ifm. oppgave 2E. void skriv_til_fil(); // Lag innmaten ifm. oppgave 2F. void les_fra_fil(); // Lag innmaten ifm. oppgave 2G. 6

// GLOBALE VARIABLE: List* kunder; // Listen med alle lånekundene. Program* programmer[antprogram+1]; // Array med de ulike programmene. int main() { char valg; // HOVEDPROGRAM: kunder = new List(Sorted); les_fra_fil(); // Oppgave 2G skriv_meny(); valg = les(); while (valg!= 'Q') { switch(valg) { case 'S': skriv(); break; // Oppgave 2A case 'I': innbetaling(); break; // Oppgave 2B case 'P': endre_program(); break; // Oppgave 2C case 'N': ny_kunde(); break; // Oppgave 2D case 'V': varsling(); break; // Oppgave 2E default: skriv_meny(); break; if (valg == 'I' valg == 'K' valg == 'P' valg == 'N') skriv_til_fil(); // Oppgave 2F valg = les(); cout << "\n\n"; return 0; // ************************************************************************* // ****************** DEFINISJON AV MEDLEMS-FUNKSJONER: ****************** // ************************************************************************* // ******************************** KUNDE: ****************************** Kunde::Kunde(int nr) : Num_element(nr) { // Oppgave 2D: Lag innmaten // Leser ALLE data: // Leser ALT fra fil: Kunde::Kunde(int nr, istream* inn) : Num_element(nr) { // Oppgave 2G: Lag innmaten void Kunde::display() { // Oppgave 2A: Lag innmaten void Kunde::innbetaling() { // Oppgave 2B: Lag innmaten void Kunde::varsel(ostream* ut) { // Oppgave 2E: Lag innmaten void Kunde::skriv_til_fil(ostream* ut) { // Oppgave 2F: Lag innmaten // Skriver ALT til skjerm: // Trekker fra innbetaling: // Innbet.varsel til fil: // Skriver til fil: 7

// ******************************** PROGRAM: ****************************** Program::Program(char* t, float p) { // Oppgave 2G: Lag innmaten // Setter ALLE verdier: void Program::endre_prosent() { // Endrer låneprograms %: // Oppgave 2C: Lag innmaten void Program::skriv_til_fil(ostream* ut) { // Oppgave 2F: Lag innmaten // Skriver til fil: // **************************************************************************** // ****************** DEFINISJON AV (GLOBALE) FUNKSJONER: ****************** // **************************************************************************** void skriv_meny() { // Skriver alle mulige menyvalg: cout << "\n\nfølgende KOMMANDOER ER TILGJENGELIGE:" << "\n S - Skriv ALLE data om EN kunde" << "\n I - Innbetaling fra en kunde" << "\n P - endre et Programs låneprosent" << "\n N - Ny kunde/lån" << "\n V - Varsle ALLE om termininnbetaling" << "\n Q - Quit / avslutt"; char les() { // Leser og upcaser brukerens valg/ønske: char ch; cout << "\n\nkommando: "; cin >> ch; cin.ignore(); return (toupper(ch)); // Leser en INT 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; float les(char* t, const float MAX) { // Leser en FLOAT mellom 0.1 og MAX: char text[strlen]; float n; do { cout << '\t' << t << " (0.1-" << MAX << "): "; cin.getline(text, STRLEN); n = atof(text); // Leser som tekst - omgjør: while (n < 0.1 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!= 0. 8

void skriv() { // Oppgave 2A: Lag innmaten void innbetaling() { // Oppgave 2B: Lag innmaten void endre_program() { // Oppgave 2C: Lag innmaten void ny_kunde() { // Oppgave 2D: Lag innmaten void varsling() { // Oppgave 2E: Lag innmaten void skriv_til_fil() { // Oppgave 2F: Lag innmaten void les_fra_fil() { // Oppgave 2G: Lag innmaten // Skriv ALLE data om EN kunde: // EN kunde foretar innbetaling: // Endre et programs låneprosent: // Legge inn en ny kunde/lån: // Terminvarsel til ALLE: // Skriv HELE datastrukturen til fil: // Leser HELE datastrukturen fra fil: 9