Eksamen. Objekt-orientert programmering

Like dokumenter
Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

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

Eksamensoppgave i IMT1082 Objekt-orientert programmering

Eksamensoppgave i IMT1082 Objekt-orientert programmering

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. 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

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

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

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

Kontinuasjonseksamen

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

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

Kontinuasjonseksamen

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

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 Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

Kontinuasjonseksamensoppgave i IMT1031(F) Grunnleggende programmering

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

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

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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

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

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

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

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

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

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

GJØVIK INGENIØRHØGSKOLE

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.

Eksamen. Objekt-orientert programmering

KONTINUASJONSEKSAMEN

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

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

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

KONTINUASJONSEKSAMEN

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

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

KONTINUASJONSEKSAMEN

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

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

Kontinuasjonseksamen

GJØVIK INGENIØRHØGSKOLE

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

Kontinuasjonseksamen

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

HØGSKOLEN I SØR-TRØNDELAG

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

UNIVERSITETET I OSLO

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

KONTINUASJONSEKSAMEN

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

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

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

HØGSKOLEN I SØR-TRØNDELAG

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:

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

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

HØYSKOLEN I OSLO, AVDELING FOR INGENIØRUTDANNING

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

Kapittel 1 En oversikt over C-språket

Transkript:

Eksamen EMNENAVN: EMNENUMMER: Objekt-orientert programmering IMT1082 EKSAMENSDATO: 19. mai 2016 TID: 09:00 13:00 EMNEANSVARLIG: Frode Haug ANTALL SIDER UTLEVERT: TILLATTE HJELPEMIDLER: 8 (inkludert denne forside) Alle trykte og skrevne. (kalkulator er ikke tillatt) Kontroller at alle oppgavearkene er til stede. Innføring med penn som gir gjennomslag på tre stk ark. Pass på så du ikke skriver på mer enn ett innføringsark om gangen (det blir uleselige gjennomslag når flere ark ligger oppå hverandre). Ved innlevering skilles hvit og gul besvarelse og legges i hvert sitt omslag. Oppgavetekst, kladd og blåkopi beholder kandidaten. Husk kandidatnummer på alle ark.

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: Grevinne Borgs vei 95 Lille Prostinne gate 14 Lille Prostinne gate 41 MHS EHS 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 <string> 3 using namespace std; 4 class Hus { 5 private: 6 char adr[40]; 7 int nr; 8 public: 9 Hus(char* a, int n) { strcpy(adr, a); nr = nr; 10 void display() { cout << adr << ' ' << nr << '\n'; 11 void operator = (int n) { nr = n; 12 bool operator < (Hus & h) { return( nr < h.nr); 13 void operator += (int n) { nr += (2 * n); 14 ; 15 int main() { 16 Hus* husene[1]; 17 husene[0] = new Hus("Grevinne Borgs vei", 95); 18 husene[1] = new Hus("Lille Prostinne gate", 14); 19 for (int i = 0; i < 2; i++) husene[i].display(); 20 *husene[1] = 41; 21 (*husene[1]).display(); 22 cout << ((*husene[1] < *husene[0])? "M" : "E") << "HS\n"; 23 *husene[1] =+ 27; 24 cout << ((*husene[1] < *husene[0])? "M" : "E") << "HS\n"; 25 return 0; 26 2

b) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> using namespace std; char txt1[] = "BRANNMANNSKAPET-REDDET-BRANNBILEN"; char txt2[] = "JURISTER-ARBEIDER-I-DE-FORENTE-NASJONER"; void funk(char* t) { while (*t!= '-') cout << *t++; char funk(char* t1, char* t2) { while (*t1 == *t2) { t1++; t2++; ; return *t1; void funk(char* t, int n) { for (int i = 0; i < 33; i += n) cout << *t++; void funk(char* t, char c1, char c2) { while (*t!= c1) { if (*t!= c2) cout << *t; t++; char* funk(char* t1, char* t2, int n) { return ( ( *(t1 + n) < *(t2 + n) )? t1 + 30 : t2 + 36 ); int main() { funk(txt2 + 11); cout << '\n'; cout << funk(txt1, txt1 + 23) << '\n'; funk(txt1 + 16, 8); cout << '\n'; funk(txt1 + 4, 'E', 'N'); cout << '\n'; cout << funk(txt1, txt2, 22) << '\n'; return 0; c) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> #include <cstring> using namespace std; class A { protected: char nvn[20]; public: A(char* t) { strcpy(nvn, t); virtual void display() { cout << nvn; bool operator == (char* t) { return (!strcmp(nvn, t)); ; class B : public A { private: char sted[20]; int pnr; public: B(char* t1, char* t2, int n): A(t1) { strcpy(sted, t2); pnr = n; void display() { A::display(); cout << ", " << pnr << ' ' << sted << '\n'; bool operator == (char* t) { return (!strcmp(sted, t)); char funk() { return (((nvn[3] < sted[1])? 'I' : 'M')); ; int main() { A* peker; B objekt1("frode", "Hamar", 2315), objekt2("anette", "Oslo", 170); objekt2.display(); peker = &objekt1; peker->display(); cout << (objekt1 == "Hamar") << '\n'; cout << (*peker == "Hamar") << '\n'; cout << objekt2.funk() << '\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 constene, klassene med datamedlemmer og (ferdiglagde) funksjoner, global variabel, main(), de tre ferdiglagde les( )-funksjonene. Bruk alt dette svært aktivt. En butikk har flere ekstrahjelpere (deltidsansatte) som av og til arbeider med spesielle oppgaver som de fast ansatte til daglig ikke ordner med. Dette kan være slikt som flatpakking av pappesker, telle varer, ordne i hyller, fjerne gamle varer, rydde på lageret, osv. Programmet som skal lages holder orden på hvilke datoer det skal komme en ekstrahjelp, og hvilke oppgaver som da skal utføres. Datastrukturen Datastrukturen består (se vedlegget) av en liste med Dato-objekter. Inni hvert slikt objekt er det bl.a. en liste med Oppgave-objekter. Klassene, deres arv, alle data-medlemmer og alle prototyper for medlemsfunksjoner er så godt som komplett og fullstendig deklarert/definert i vedlegget. Din oppgave blir å skrive innmaten til funksjoner inni og utenfor klassene. Oppgaven a) Skriv innmaten til funksjonene void nydato() og Dato::Dato(int dato) Den første funksjonen leser først en lovlig dato. Finnes denne allerede (vi tillater ikke duplikate datoer), kommer det en melding. I motsatt fall opprettes en ny dato, og dennes constructor leser navnet på ekstrahjelpen som skal arbeide denne datoen, samt oppretter en aktuell tom liste. b) Skriv innmaten til funksjonen void skrivdato() og de to klassenes display() Den første funksjonen kommer med en melding om det ikke finnes noen datoer innlagt. I motsatt skrives hele listen med datoer. Dato::display() skriver sine to single data. Finnes det ingen oppgaver, kommer det en melding. Ellers skrives alle oppgavene. For hver av dem skrives, vha. Oppgave::display(), dets tre stk. datamedlemmer. Er ferdig lik true skrives «FERDIG», ellers skrives ingenting. c) Skriv innmaten til funksjonene void nyoppgave(), void Dato::nyOppgave() og Oppgave::Oppgave(char* t) Den første funksjonen leser først en lovlig dato. Er det ikke mulig å finne denne i listen, kommer det en melding. I motsatt fall registreres (vha. den andre funksjonen) en ny oppgave på vedkommende dato. Den andre funksjonen leser oppgavens beskrivelse og sørger for å få laget og lagt inn en ny Oppgave. Constructoren leser en lovlig tid oppgaven ca. vil ta, og initierer ferdig til false. d) Angi innmaten til funksjonen void settferdig() og skriv innmaten til funksjonen void Dato::settFerdig() Den første funksjonen er identisk til den første i 2c, bare at Dato::settFerdig() kalles i stedet. Angi hva i koden i 2c som blir annerledes. Den andre funksjonen kommer med en melding om det ikke finnes noen oppgaver på vedkommende dato. I motsatt fall gås det gjennom alle oppgavene. Dersom en oppgave ikke er ferdig (bruk ferdiglaget funksjon), skrives oppgaven ut på skjermen. Brukeren spørres (bruk ferdiglaget funksjon) om hun/han vil endre dens status. Er svaret J, settes oppgaven til ferdig utført (bruk ferdiglaget funksjon). 4

e) Skriv innmaten til funksjonene void datoerferdig() og bool Dato::altFerdig() Den første funksjonen spør først om brukeren virkelig ønsker å kjøre denne kommandoen. Er svaret J blir resten av koden utført. Det gås gjennom alle datoene. Er alle oppgavene på en gitt dato ferdige (jfr. den andre funksjonen), skrives alle dets data ut på skjermen, og den blir deretter slettet fra hukommelsen. Til slutt skrives antall datoer som har blitt slettet/fjernet. Den andre funksjonen går gjennom oppgavene på vedkommende dato, og returnerer true eller false til om alle er ferdig utført (her kan også ferdiglaget funksjon brukes). f) Skriv innmaten til funksjonen void annetformat(int dato) Funksjonen mottar en dato (int) på formatet ÅÅÅÅMMDD. Den skriver dette ut som: DD/MM-ÅÅÅÅ F.eks. vil 20160422 bli skrevet som 22/4-2016 Endre/legg til kode i Dato::display() slik at: Datoen (number) blir skrevet på formen DD/MM-ÅÅÅÅ Totalt antall minutter alle oppgavene til sammen tar også blir skrevet ut, etter at alle oppgavene er skrevet. Skriv også hva dette tilsvarer i timer (som en float). g) Skriv innmaten til funksjonen void lesfrafil() og den andre constructoren i begge klassene Filen EXTRAHJELP.DTA har følgende format: <Antall datoer> <ÅÅÅÅMMDD for dato nr.n> <Ekstrahjelpens navn for dato nr.n> <Antall oppgaver på dato nr.n> <Beskrivelse av oppgave nr.x på dato nr.n> <0/1 oppgave nr.x er (ikke) ferdig> <15-600 ca.antall minutter på oppgave nr.x> Lag funksjonene som til sammen sørger for at alle data blir lest inn fra en fil med dette formatet. Annet (klargjørende): Du skal bruke ListTool2A ifm. løsningen av denne oppgaven. Du skal ikke bruke string-klassen (læreboka side 302-310), kode fra STL, templates eller andre større hjelpebiblioteker. Men, de vanligste includer brukt i hele 1.klasse er tilgjengelig. Duplikate datoer finnes ikke. Dvs. det er aldri to ekstrahjelpere i butikken samme dato. Blir en oppgave ikke ferdig, så kan den allikevel markeres som ferdig (slik at datoen kan slettes), etter at den er lagt inn på en annen og senere dato, men da antagelig med mindre estimert tidsbruk. Dette er noe brukeren av dataprogrammet manuelt må passe på og kan oppdatere vha. kommandoene. At totalsummen i minutter for en datos oppgaver ikke blir urimelig høy, er også noe brukeren manuelt må passe på selv. 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 som deltidsansatt ekstrahjelp eller ei! FrodeH 5

Vedlegg: Halvferdig programkode // INCLUDE: #include <iostream> #include <fstream> #include <cstring> #include <cctype> #include "ListTool2A.h" using namespace std; // cin, cout // ifstream // strcpy, strlen // toupper // CONST: const int STRLEN = 80; // Max. lengde for en tekststreng. const int MINDATO = 20160422; // Tidligste dato for en oppgave. const int MAXDATO = 20291231; // Siste dato for en oppgave. const int MINTID = 15; // Min.tid en oppgave tar (15 minutter). const int MAXTID = 600; // Max.tid en oppgave tar (600 min = 10 timer). // KLASSER: class Dato : public NumElement { private: char* personnavn; List* oppgavene; public: Dato(int dato); Dato(int dato, ifstream & inn); ; // number = dato (ÅÅÅÅMMDD) // Ekstrahjelpens navn. // Liste med oppgaver på datoen. // Oppgave 2A // Oppgave 2G // Ferdiglaget: ~Dato() { delete [] personnavn; delete oppgavene; void display(); // Oppgave 2B og 2F void nyoppgave(); // Oppgave 2C void settferdig(); // Oppgave 2D bool altferdig(); // Oppgave 2E class Oppgave : public TextElement { private: int tid; bool ferdig; // text = oppgavebeskrivelse // Ca. tid oppgaven tar (i minutter). // Oppgaven utført/ferdig eller ei. public: Oppgave(char* t); // Oppgave 2C Oppgave(char* t, ifstream & inn); // Oppgave 2G void display(); // Oppgave 2B int henttid() { return tid; // bool erferdig() { return ferdig; // Ferdiglaget void settferdig() { ferdig = true; // ; // DEKLARASJON AV FUNKSJONER: void skrivmeny(); // char les(); // Ferdiglaget int les(const char* t, const int MIN, const int MAX); // void les(const char* t, char* s, const int LEN); // void nydato(); // Oppgave 2A void skrivdato(); // Oppgave 2B void nyoppgave(); // Oppgave 2C void settferdig(); // Oppgave 2D void datoerferdig(); // Oppgave 2E void annetformat(int dato); // Oppgave 2F void lesfrafil(); // Oppgave 2G List* datoene; // GLOBAL VARIABEL: // Liste med alle datoene (numerisk sortert). 6

int main() { // HOVEDPROGRAM: char valg; // Brukerens valg/kommando. datoene = new List(Sorted); lesfrafil(); // Oppgave 2G skrivmeny(); cout << "\n\n\nkommando: "; valg = les(); while (valg!= 'Q') { switch (valg) { case 'D': nydato(); break; // Oppgave 2A case 'S': skrivdato(); break; // Oppgave 2B case 'O': nyoppgave(); break; // Oppgave 2C case 'F': settferdig(); break; // Oppgave 2D case 'R': datoerferdig(); break; // Oppgave 2E default: skrivmeny(); break; cout << "\n\n\nkommando: "; valg = les(); cout << "\n\n"; return 0; // ************************************************************************* // ****************** DEFINISJON AV MEDLEMS-FUNKSJONER: ****************** // ************************************************************************* Dato::Dato(int dato) : NumElement(dato) { // Oppgave 2A: Lag innmaten // Leser data: // Leser fra fil: Dato::Dato(int dato, ifstream & inn) : NumElement(dato) { // Oppgave 2G: Lag innmaten void Dato::display() { // Oppgave 2B og 2F: Lag innmaten // ALT om datoen skrives til skjermen: void Dato::nyOppgave() { // Oppgave 2C: Lag innmaten void Dato::settFerdig() { // Oppgave 2D: Lag innmaten bool Dato::altFerdig() { // Oppgave 2E: Lag innmaten // Legger inn EN ny oppgave: // Setter/markerer ønskede oppgaver som ferdige: // Returnerer om alle datoene er ferdige eller ei: Oppgave::Oppgave(char* t) : TextElement(t) { // Leser data: // Oppgave 2C: Lag innmaten // Leser fra fil: Oppgave::Oppgave(char* t, ifstream & inn) : TextElement(t) { // Oppgave 2G: Lag innmaten void Oppgave::display() { // Oppgave 2B: Lag innmaten 7 // Skriver alle egne data:

// **************************************************************************** // ****************** DEFINISJON AV (GLOBALE) FUNKSJONER: ****************** // **************************************************************************** void skrivmeny() { // Skriver alle mulige menyvalg: cout << "\n\nfø LGENDE KOMMANDOER ER TILGJENGELIGE:" << "\n D - ny Dato" << "\n S - Skriv dato" << "\n O - ny Oppgave" << "\n F - sett Ferdig" << "\n R - Rens/slett ferdige datoer" << "\n Q - Quit / avslutt"; char les() { // Leser og upcaser ett tegn: char ch; cin >> ch; cin.ignore(); return (toupper(ch)); // Leser et heltall mellom MIN og MAX: int les(const char* t, const int MIN, const int MAX) { int n; do { cout << '\t' << t << " (" << MIN << '-' << MAX << "): "; cin >> n; cin.ignore(); while (n < MIN n > MAX); return n; // Leser inn en 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 nydato() { // Oppgave 2A: Lag innmaten void skrivdato() { // Oppgave 2B: Lag innmaten void nyoppgave() { // Oppgave 2C: Lag innmaten void settferdig() { // Oppgave 2D: Angi innmaten // Legger (om mulig) inn enn ny dato: // Skriver ALLE data om ALLE datoer: // Legger (om mulig) inn en ny oppgave: // Setter (om mulig en datos oppgaver som ferdig: // Sletter/fjerner datoer med void datoerferdig() { // alle oppgaver ferdige/utført: // Oppgave 2E: Lag innmaten // Omformer ÅÅÅÅMMDD til DD/MM-ÅÅÅÅ void annetformat(int dato) { // Oppgave 2F: Lag innmaten void lesfrafil() { // Oppgave 2G: Lag innmaten // Leser alle datoer og oppgaver fra fil: 8