UKEOPPGAVER. for. Objekt-orientert programmering. Våren 2015



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

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

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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

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)

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

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

UKEOPPGAVER. Høsten for. Grunnleggende programmering. Høgskolen i Gjøvik

KONTINUASJONSEKSAMEN

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

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

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

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

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

HØGSKOLEN I SØR-TRØNDELAG

Kontinuasjonseksamen

Oppgavene 1, 2, 4, 5, 6, 9, 12 og 13 passer best til å løses ved en datamaskin.

Kontinuasjonseksamen

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

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

Del 4 Noen spesielle C-elementer

Oppgaver. PROG Grunnleggende programmering

Oblig 4Hybelhus litt mer tips enn i oppgaven

HØGSKOLEN I SØR-TRØNDELAG

HØYSKOLEN I OSLO, AVDELING FOR INGENIØRUTDANNING

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

GJØVIK INGENIØRHØGSKOLE

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

Drosjesentralen. I-120: Obligatorisk oppgave 2, 2000

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

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

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

GJØVIK INGENIØRHØGSKOLE

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

KONTINUASJONSEKSAMEN

HØGSKOLEN I SØR-TRØNDELAG

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Den siste dagen. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Veien videre... Eksamen

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

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

En oppsummering (og litt som står igjen)

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

INF Uke 10. Ukesoppgaver oktober 2012

UNIVERSITETET I OSLO

IN 147 Program og maskinvare

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

KONTINUASJONSEKSAMEN

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

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

Eksamensoppgave i IMT1082 Objekt-orientert programmering

UNIVERSITETET I OSLO

81,9(56,7(7(7,26/2 'HWPDWHPDWLVNQDWXUYLWHQVNDSHOLJHIDNXOWHW

Kontinuasjonseksamen

Kontinuasjonseksamen

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

Kontinuasjonseksamen

Kapittel 1 En oversikt over C-språket

Prosjektoppgave. i «IMT Objekt-orientert programmering» våren 2016

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

KONTINUASJONSEKSAMEN

Utførelse av programmer, metoder og synlighet av variabler i JSP

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

KONTINUASJONSEKSAMEN

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

Oblig 4 (av 4) INF1000, høsten 2009 Værdata, leveres innen 6. nov. kl

Eksamensoppgave i IMT1082 Objekt-orientert programmering

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

Kontinuasjonseksamen

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Programmeringsspråket C Del 3

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:

Informasjon Eksamen i IN1000 og IN1001 høsten a) 1 poeng. 1b) 1 poeng. Tid. Oppgavene. Tillatte hjelpemidler. 30. november kl. 14.

TDT Prosedyre- og objektorientert programmering

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

Programmeringsspråket C Del 2

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

EKSAMENSOPPGAVE. Vil det bli gått oppklaringsrunde i eksamenslokalet? Svar: NEI

Kontinuasjonseksamen

INF1000: noen avsluttende ord

EKSAMENSOPPGAVE. : INF-1400 Objektorientert programmering. Oppgavesettet er på 5 sider inklusiv forside

Programmeringsspråket C Del 3

Kontinuasjonseksamen

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000

lfæ~~~~:::j~~:~l -.~=:~-t::-d I Alle trykte og håndskrevne EKSAMENSOPPGA VE Side l av 5 Eksamenstid:

UNIVERSITETET I OSLO

Transkript:

UKEOPPGAVER for Objekt-orientert programmering Våren 2015 Høgskolen i Gjøvik

Forord Dette kompendie/hefte innholder oppgaveteksten for ulike oppgaver i kurset Objekt-orientert programmering ved Høgskolen i Gjøvik. Disse oppgavene brukes både som en del av ukeoppgavene, som (obligatoriske) øvingsoppgaver, men også som supplerende og frivillige ekstraoppgaver. Opplysninger om kurset er å finne på Internet på URL en: http://www.hig.no/~ooprog Under Øvinger er det angitt hvilke oppgaver i dette heftet som til enhver tid er relevante som ukeoppgaver. (Data)filer som oppgavetekstene henviser til er å finne under UKE_OPPG. Løsningsforslag til alle oppgavene i dette heftet er å finne under UKE_LOSN. Nye/andre oppgavetekster kan bli laget i løpet av kurset. Disse vil i såfall etter hvert bli lagt ut under UKE_OPPG, og kalt OPPG_xx.TXT. Der xx står for en fortløpende nummerering fra og med 53 og oppover. Et eget kompendie vil bli utgitt senere i vår. Dette omhandler eksamensoppgaver og andre store eksamensrelevante oppgaver. Høgskolen i Gjøvik FrodeH 2

Oppgave 27 (kap.8) Lag et program som oppfyller følgende: - Inneholder en klassen Tid. Dens data er time og minutt. Den har to constructorer, en som setter dataene til '0', og en som setter dem til de medsendte verdiene. - Definer tre objekter (t1, t2 og t3), der de to første initieres til to passende tidspunkt. - Lag funksjoner i Tid som gjør at du overloader operatorer med følgende konsekvenser: a) t1 += 47 (det legges 47 minutter til i t1's tid) b) t2 -= 16 (det trekkes 16 minutter fra i t2'2 tid) c) t3 = t1 + t2 (t3 blir inneholdende summen av t1 og t2) d) t3 = t1 - t2 (t3 blir inneholdende differansen på t1 og t2) e) t1 == t2 (kan sammenligne om tidene er identiske) f) t1 < t2 (kan finne ut om t1 er mindre enn/før t2) - Lag et hovedprogram som gjør at en bruker kan teste ut de seks funksjonene, og stadig få skrevet ut hva tidene er. NB! - Husk å øke timer med '1', dersom minutter overstiger 59. - Husk at minuttene bak '=' i a) og b) kan være større enn 59. - Hva bør skje i b) og d), dersom sluttproduktet blir negativt? Oppgave 28 (kap.8) En vektor starter i origo og ender i punktet (x,y). Lag en klasse vektor, med det rette datamedlemmene. På et slikt objekt skal det kunne utføres addisjon, subtraksjon, multiplikasjon og divisjon. Dvs. til klassen skal det lages fire funksjoner som overloader de aktuelle operatorene. Hver av funksjonene skal ta en parameter og returnere et objekt med svaret. Lag dessuten en medlemsfunksjon som skriver ut en vektors endepunkt, og et hovedprogram som viser uttesting av funksjonene. NB! Både ved multiplikasjon og divisjon skal det ganges/deles med et heltall (int). Resultatet av divisjonen skal være et heltallig punkt, ellers skal det komme en melding, og ingen divisjon blir utført. Oppgave 30 (kap.12) Moderniser programmet EKS_21.CPP ved at det ved programstart automatisk leses fra fil (f.eks. MEDALJE.DTA ). Ved hver registrering så overskrives denne filen. Bruk read og write på hele objekter. Husk at ved fillesningen: - skal det hentes data til stadig nye indekser utover i arrayen. - vil det ved første gangs kjøring av programmet ikke finnes en slik fil. Dataene må derfor fylles inn i arrayen vha. funksjonen initier. 3

Oppgave 33 (kap.2-8 og 12) Du skal lage et program som håndterer startnumre og passeringstider i et skiløp. Ved at brukeren taster inn startnumre som passerer, så finner programmet ut hvor lang tid hun/han har brukt, og resultatliste oppdateres og holdes sortert. Dermed kan dette programmet brukes på håndholdte enheter ulike steder ute i løype, men også for målpassering. 1) Programmet skal starte med å: - lese inn alle deltagernes navn og nasjonalitet fra filen LOPERE.DTA. Bestem utseendet/formatet selv. - spørre brukeren om hvilket startintervall det er mellom hver løper (ett halvt eller et helt minutt). - spørre brukeren om klokkeslettet for når første kvinne/mann startet. Dette tidspunktet skal ikke være mer enn en time før datamaskinens aktuelle klokke. (Om hvordan avlese datamaskinens klokke: se 'Hint'.) 2) Programmet skal håndtere fire kommandoer: S - Skriv nåværende resultatliste til filen LOPERE.RES. Dette skal være en lesbar fil på ASCII-format, dvs. write skal ikke brukes. O - Får en resultatliste over de som har passert. Denne er sortert på tid, og skriver 20 løpere ad gangen på skjermen. R - Registrerer en ny passering. Programmet spør om startnummer. Passeringstidspunktet regnes for det klokkeslettet som avleses fra datamaskinens klokke i det brukeren taster CR/ENTER. Programmet må sjekke at: - startnummeret ligger mellom 1 og antall deltagende løpere. - løperen virkelig har startet allerede. Dvs. klokka må minst være: <løpets starttidspunkt> + (<løpernr-1> * <intervall>) Deretter lages en sortert liste over løpernes passeringstider. Q - avslutt programmet. Resultatlisten skrives automatisk til filen LOPERE.RES. HINT: - Lagre unna (i globale variable): - antall løpere (linjer) fra filen - tidsintervallet mellom løperne - løpets starttidspunkt - Datamaskinens klokke avleses ved å: 1) Include filen TIMER.H på UKE_OPPG : - Kopier denne til samme directory som oppgavens kildekode - skriv i kildekoden: #include timer.h 2) Lage et objekt av typen Timer f.eks. Timer tp. 3) Tilkalle dette objektets funksjon hent, med parametre som funksjonen oppdaterer til å inneholde datamaskinens nåværende klokkeslett (dvs. referanse-overføring): int time, minutt, sekund; tp.hent(time, minutt, sekund); Nå vil disse tre variablene inneholde aktuelt tidspunkt. 4

- For å holde orden både på startnumre og en sortert liste, så må enten løperobjektene inneholde startnumre og objektene flyttes om i arrayen slik at de holdes sortert (jfr. EKS_21.CPP), eller at det brukes en hjelpearray som i hver skuff inneholder nummeret på den løperen som ligger på den plassen som indeksen indikerer (dette kalles indirekte indeksering ). - Se evnt. også OPPG_27.CPP, oppg.3 i kap.6 og oppg.3 i kap.8 og deres løsningsforslag bak i læreboka. Vi forutsetter at løpet ikke går over flere dager, eller at noen løpere først kommer i mål det påfølgende døgnet etter starttidspunktet. Oppgave 34 (kap.9) Lag et program som oppretter objekter for ulike typer dyr som lever i luft og vann, og som leser inn alle nødvendige data om hvert av dem. (For å ikke programmere oss helt ihjel, så skal det lages kun et lite subsett av den store dyreverdenen som finnes.) Programmet skal bygge på følgende struktur, og utføre følgende: - Vi har baseklassen dyr med bl.a. attributtet navn. To avledede klasser fra denne er dyr i luft og dyr i vann (vi skal ikke lage for dyr på land ). Fra dyr i luft så kan vi igjen avlede klassene insekt og fugl. Fra dyr i vann så avleder vi klassene fisk og skalldyr. - Lag attributter/data (ett holder) inni hver av de seks avledede klassene. Alle dataene (i de totalt syv klassene) skal være private ikke protected. - Lag en constructor (uten parametre) inni hver av klassene, der den enkelte sørger for at alle data til klassen selv blir lest inn, og at alle data om de ovenforliggende klassene i arvehierarkiet også blir lest inn. - Lag også en constructor til klassen fisk som tar fiskenavnet som parameter. La constructorene fortsatt lese det som trengs for fisk og dyr i vann, og send fiskenavnet som parameter oppover i arvehierarkiet slik at dyr slipper å lese inn navnet. - Lag et hovedprogram brukeren får spørsmål om hvilken dyreart hun/han vil registrere (insekt, fugl, fisk og skalldyr), og som deretter sørger for at alle nødvendige verdier leses inn. Programmet looper til brukeren velger å avslutte det. Dersom brukeren velger fisk, så skal programmet spørre etter et navn. Dersom brukeren kun svarer ENTER, så blir constructoren uten parameter tilkalt, ellers kalles den med parameter. Hint: Objekter kan bl.a. opprettes under run-time ved at de lages (og lever) mellom to krøllparanteser. - Lag en funksjon inni hver av de syv klassene som skriver ut alle data inni klassen. Denne kalles med en gang brukeren er ferdig med å taste inn de verdiene hun/han blir bedt om. 5

Oppgave 35 (kap.2-9 & 12) Lag et program som: - leser innholdet av de binære filene 'BIL_OLXX.RES' og 'KUN_OLXX.RES'. (Lag disse ved å gjøre EKS_25.CPP på din maskin. Husk at programmet leser fra filene: BIL_OLXX.DTA og KUN_OLXX.DTA på EKSEMPEL.) - lager leselig (ASCII-fil) med fakturaer for alle kundene. For hver kunde skal det skrives: navn, alle bestillinger, hvilke billetter hun/han har fått (evt. også hvem egentlig bestilte), total pris pr.arrangement og totalsummen for alle billettene. NB: Ta utgangspunkt i koden for EKS_25.CPP. Stryk/fjern all unødvendig/overflødig kode/funksjoner som ikke brukes. Legg til kode som løser det ovenfor beskrevne. Oppgave 36 (kap.2-9 & 12) Studer og lær av programmet OPPG_36.CPP og ARR_OLXX.DTA. (Begge ligger på UKE_OPPG.) Oppgave 37 (kap.10) Lag et program som: - Inneholder fem enkeltvariable av typen 'int' (ikke array/tabell). - Initialiserer variablene til f.eks. 111, 222, 333, 444, 555. - Lag en peker til 'int', og initialiser denne til å peke på den midtre int-variabelen. - Lag en løkke som: - Tillater brukeren i taste 'i' eller 'd' for å øke (increment: ptr++) eller minske (decrement: ptr--) int-pekeren som er definert. Brukeren avslutter ved f.eks. å trykke!. - Skriver ut nåværende adresse om pekeren inneholder og verdien av det den peker til (gjerne både int en og den tilsvarende char en). Dersom du ikke legger inn en sjekk på om brukeren øker/minsker seg forbi de fem variablene, så kan du se hvaslags søppel som ligger i andre hukommelsesceller. Prøv dette! Husk også at automatiske data lagres nedover (på stakken), mens globale data lagres oppover (på heapen). Ekstra: Skriv om programmet, slik at det opererer på en array/tabell, og ikke med fem enkeltvariable. 6

Oppgave 38 (kap.10) Bruk pekere (+i) og ingen '[' eller '] inni funksjonene i a) og b). a) Lag en funksjon: void init_arr(int* arr, int LEN, int verdi) der: - arr er en peker til en int array. - LEN er antall elementer i arrayen (inkludert nr.0) - verdi er tallet som funksjonen skal legge inn i hvert element/ skuff i arrayen. b) Lag også en funksjon: void skriv_arr(int* arr, int LEN) som går gjennom hele arr og skriver ut hvert enkelt element. c) Lag et lite hovedprogram som tester ut de to funksjonene. Oppgave 39 (kap.10) Se teksten for oppgave nr.21 (histogram) fra i høst og dets løsningsforslag. Omskriv dette programmet slik at det bruker pekere og ikke arrayer. Oppgave 40 (kap.10) Ikke bruk de tilsvarende ferdiglagde funksjonene fra CSTRING i denne oppgaven. Vi forutsetter at det stedet i hovedprogrammet som kaller funksjonene, selv holder orden på at det er plass til sluttresultatet i den strengen det påhektes/kopieres til. Lag funksjoner: int strlen(const char* s); som returnerer lengden på strengen s. char* strcpy(char* s, const char* t); som kopierer strengen t inn i s. Og som også returnerer med en peker til resultat-strengen (s). char* strcat(char* s, const char* t); som kopierer strengen t inn på enden av s, slik at sluttresultatet blir en sammenhekting (konkatenering) av de to strengene. Returner også med en peker til resultatstrengen (s). int strcmp(const char* s, const char* t); som sammenligner strengene s og t, og som returnerer: 0 dersom s == t < 0 dersom s < t > 0 dersom s > t Lag et lite hovedprogram som tester funksjonene ovenfor. 7

Oppgave 41 (kap.10) Lag et program som består av en array med pekere til kunde-objekter. Programmet skal registrere nye kunder til brukeren taster 'N' til flere, eller at arrayen sprenges. For hver nye kunde (som hektes til slutt i arrayen så langt) skal programmet spørre om antall kontoer vedkommende skal ha. På grunnlag av dette opprettes et nytt kundeobjekt, der constructoren mottar antall kontoer for vedkommende, og allokerer så selv plass til en float-array med den eksakt ønskede lengde. Programmet spør så om beløpet pr.konto hos kunden, og dette registreres deretter i arrayen inni det aktuelle kunde-objektet. Når brukeren har tastet 'N' til flere, så går programmet gjennom alle kundene og skrives ut dataene om alle kontoer for vedkommendes. Oppgave 42 (kap.12) Lag et program (EXE-fil) som søker i en eller flere filer etter en aktuell tekst. Programmet kalles med følgende syntaks: <programnavn> <søketekst> <filnavn> der <filnavn> kan inneholde wildcards ('?' og/eller '*'). Programmet skal skrive ut alle filnavne som den leter igjennom, og angi om den fant teksten i filen (eller ei). Hint: - strstr i CSTRING leter etter en substreng i en streng. - I Borland C++ (4.5) har vi bl.a at: findfirst, findnext og ffblk i DIR.H hjelper til med å hente en og en aktuell fil når wildcards er brukt. (Se eksempel i utviklingsmiljøet på disse funksjonene. Dette får du frem ved å f.eks. skrive findfirst, still markøren inni teksten, og trykke CTRL+F1.) Oppgave 43 (kap.10) a) Les nøye EKS_30.CPP. Tegn gjerne opp noen konkrete lister, og studer pekerne i tilfellene LIFO, FIFO og Sortert. b) Skriv om EKS_30.CPP slik at listen blir innholde et dummy hode, og at funksjonene håndterer den nye situasjonen. 8

Oppgave 53 (kap.12) Lag et program som leser fra filen BLINDERN.DTA og finner ut hvilken desemberdato det har vært kaldest (jfr. TAN-kolonnen) og hva denne temperaturen er. Er det flere datoer med denne minimumstemperaturen, skal den første angis. Det er ikke tillatt å ta vekk tilsynelatende «ekstra» linjer i starten og slutten av filen. Hver linje har en max. lengde på 160 tegn. Utvidelse/ekstra: 1. Brukeren angir hvilken måned det skal letes i (0 betyr alle måneder). 2. Brukeren angir om det skal letes etter min. eller max. temperaturen. 9