INF1001 Prøveksamen Løsningsforslag

Like dokumenter
Anta at følgende programsetninger utføres. Hva skrives ut på skjermen? Hva skrives ut her (skriv nøyaktig de karakterene som printes, og bare de)?

Oppgave 1.1 (1 poeng) Oppgave 1.2 (2 poeng) Oppgave 1.3 (2 poeng) 1.1

UNIVERSITETET I OSLO

INF1000 Prøveeksamen Oppgave 7 og 9

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

Informasjon Prøveeksamen i IN1000 høsten 2018

INF1000 Eksamen 2014 (modifisert)

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1000 Eksamen 2014 (modifisert)

Eksamensoppgaver 2014

UNIVERSITETET I OSLO

Objektorientert programmering i Python

Etter uke 6 skal du. Introduksjon til objektorientert programmering. Hva skjedde ~1967? INF1001. Grunnkurs i objektorientert programmering

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Finne ut om en løsning er helt riktig og korrigere ved behov

Prøveeksamen IN1000. IN Prøveeksamen. Dato november 2017 Tid 12:30-12:00 Alle trykte og skrevne hjelpemidler er tillatt.

Informasjon Eksamen i IN1000 høsten 2017

Innhold uke 7. Objektorientert programmering i Python: Introduksjon. Lite tilbakeblikk: Programflyt og skop. Lite tilbakeblikk: Funksjoner er uttrykk

UNIVERSITETET I OSLO

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

Finne ut om en løsning er helt riktig og korrigere ved behov

UNIVERSITETET I OSLO

Løsningsforslag Kontinuasjonseksamen i TDT4110 Informasjonsteknologi - grunnkurs

Hvordan løse problemer med programmering?

UNIVERSITETET I OSLO

Forside. 1 Hva skrives ut?

Læringsmål uke 7. Objektorientert programmering i Python: Introduksjon. Innhold uke 7. Lite tilbakeblikk: Programflyt og skop


Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Hvorfor objektorientert programmering? Objektorientert programmering i Python: Introduksjon. Læringsmål uke 7. Undervisning og pensum IN1000

Innhold uke 8. Objekter: Bruk og intern organisering. Beskjeder: Oblig 1 6. Beskjeder: Oblig 7 (og 8)

Hvorfor objektorientert programmering?

IN Seminaroppgaver til uke 11

UNIVERSITETET I OSLO

Løse reelle problemer

Innhold uke 9. Objektorientert programmering i Python. Om ukens pensum. Referanser og objekter Tema: Mer komplekse strukturer

Endret litt som ukeoppgave i INF1010 våren 2004

TDT4110 IT Grunnkurs Høst 2015

UNIVERSITETET I OSLO

Etter uke 9 skal du. Introduksjon til objektorientert programmering. Innhold. Klasser som abstraksjoner

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

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

INF Uke 10. Ukesoppgaver oktober 2012

UNIVERSITETET I OSLO

Øvingsforelesning 5 Python (TDT4110)

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Øvingsforelesning 5 Python (TDT4110)

UNIVERSITETET I OSLO

Innhold. Hva skal evalueres? Fra kurssidene. Kapittel 1: Introduction

Læringsmål uke 7. Introduksjon til objektorientert programmering. Paradigmet objektorientering. Objektreferanser. INF1001 Høst 2016 Uke 7

Objektorientert programmering i Python. Resten av semesteret. Innhold uke 9 Mer komplekse strukturer. Referanser og objekter, inkl Mentimeter spørsmål

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

Seminaroppgaver IN1010, uke 2

Repetisjon Novice Videregående Python PDF

UNIVERSITETET I OSLO

I dag skal vi ved hjelp av ganske enkel Python-kode finne ut om det er mulig å tjene penger på å selge og kjøpe en aksje.

IN1000 Obligatorisk innlevering 7

INF120: Oblig 3. Yngve Mardal Moe

Innhold. IN1000 Høst Hva skal evalueres? Fra kurssidene. Uke 12: Pensumgjennomgang og eksamenstips

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

UNIVERSITETET I OSLO

Klasser og objekter. Tuva Kristine Thoresen 4. november Institutt for Informatikk

AlgDat - Øvingsforelesning 1 Introduksjon til Python, lenkede lister og øving 1

I denne oppgaven skal vi repetere litt Python-syntaks, det er en god blanding av alle tingene du har lært i Python til nå.

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

Forelesning inf Java 5

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Forelesning inf Java 5

Prøveeksamen inf november Arne Maus og Ole Christian Lingjærde

INF1000 Behandling av tekster

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Øvingsforelesning 1 Python (TDT4110)

UNIVERSITETET I OSLO

Introduksjon til objektorientert programmering

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

Et større programeksempel. Hvordan løse et reelt problem med en objektorientert fremgangsmåte

INF Ekstrainnlevering

IN1010 V19, Obligatorisk oppgave 2

Øvingsforelesning 7 i Python (TDT4110)

Obligatorisk oppgave 4 i INF1010, våren 2014: "Leger og resepter" Versjon 1.1

TDT4110 Informasjonsteknologi grunnkurs: Python: Repetisjon. Professor Alf Inge Wang

IN Notat om I/O i Java

UNIVERSITETET I OSLO

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

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Oppgave 1.6 Hva skrives ut? Riktig svar: The total rainfall from June to August was 54.00

TDT4110 IT Grunnkurs Høst 2016

Klasser og objekter. Tuva Kristine Thoresen 21. oktober Institutt for Informatikk

Transkript:

INF1001 Prøveksamen 2016 - Løsningsforslag Oppgave 1.1 Hva er verdien til tall etter at følgende kode er utført? tall = (5*5)-4 tall = tall-1 20 Oppgave 1.2 Anta at følgende programsetninger utføres. Hva skrives ut på skjermen? a = 10 b = 1 i = b while i<a: b = b+i i=i+2 print(b) 26 Oppgave 1.3 Hva skrives ut her? serie = "0" for i in range(5,10): serie = serie + str(i) print("serie=" + serie) serie=056789 1

Oppgave 2.1 Gitt følgende kode. Hva returneres fra funksjonskallet min funksjon(32, 6)? def min_funksjon(n, m): x = 0 i=n while i>=0: x=i i=i-m return x 2 Oppgave 2.2 Anta at følgende program utføres, hva skrives ut? class Student: def init (self, navnet): self._navn = navnet def faanavn(self): return self._navn navnet = "Grete" s = Student ("Ole") p = Student ("Marit") print(p.faanavn() + " og " + s.faanavn()) Marit og Ole Oppgave 3.1 Skriv binærtallet 1000 1011 som et desimaltall 139 Oppgave 3.2 Skriv desimaltallet 39 som et heksadesimalt tall. 27 2

Oppgave 3.3 Skriv summen av de to binærtallene 110 og 100 som et binærtall. 1010 Oppgave 3.4 Skriv det heksadesimale tallet 2E som et desimaltall. 46 Oppgave 4.1 Skriv ferdig metoden under. Metoden tar inn tre heltallsverdier som argumenter, og skal returnere det tallet som verken er størst eller minst av de tre tallene i parameterne a, b og c. Du kan anta at de tre tallene sendt inn som argumenter er ulike. def median(a, b, c): def median(a, b, c): if (a < b and b < c) or (a > b and b > c): return b elif (b < a and a < c) or (b > a and a > c): return a return c 3

Oppgave 5.1 Du skal skrive en funksjon som tar en liste av heltallsverdier som parameter og som returnerer en liste av heltallsverdier. Metoden skal lage en ny liste som er dobbelt så lang som den i parameteren, og kopiere over verdiene i parameterlisten til annenhver plass (fra og med indeks 0) i den nye listen. De øvrige verdiene i den nye listen skal være 0. Til slutt skal funksjonen returnere den nye listen. def dobbelliste(liste): nyliste = [] for i in liste: nyliste.append(i) nyliste.append(0) return nyliste 4

Oppgave 6.1 Følgende kode leser inn fra tekstfil hvor mye henholdsvis Peter og Pål har hatt i ferieutgifter. Koden kjører og gir riktig svar, men det er en del unødvendige gjentakelser. Du skal skrive en modifisert versjon av programmet som skriver ut det samme som det opprinnelige, men med mindre gjentakelser i koden. Dette skal du gjøre ved å skrive og gjøre bruk av en prosedyre (eller funksjon) som kan kalles for å erstatte det som er av felles funksjonalitet i den opprinnelige versjonen av programmet. Merk forøvrig at formålet med oppgaven utelukkende er å vise at man behersker fornuftig introdusering av prosedyrer, så det er ikke nødvendig å vurdere eventuelle andre aspekter ved oppgaven eller koden. fn_peter = "Peter.txt" tot_peter=0 for line in open(fn_peter): utgift_peter = int(line) tot_peter += utgift_peter print("peter har brukt: ", tot_peter) fn_paul = "Paul.txt" tot_paul=0 for line in open(fn_paul): utgift_paul = int(line) tot_paul += utgift_paul print("paul har brukt: ", tot_paul) def les_inn_total(filnavn): total = 0 for line in open(filnavn): utgift = int(line) total += utgift return total fn_peter = "Peter.txt" tot_peter= les_inn_total(fn_peter) print("peter har brukt: ", tot_peter) fn_paul = "Paul.txt" tot_paul=les_inn_total(filnavn) print("paul har brukt: ", tot_paul) 5

Oppgave 7 Herr Glum lager en julekalender til barna sine hvert år. Kalenderen inneholder en gave for hver dag i desember, frem til og med julaften 24.12. Det går på omgang mellom barna hvem som får lov å åpne dagens gave når alle har åpnet en gave hver, er det førstemann sin tur igjen. Nå ønsker herr Glum seg et program som kan hjelpe ham med holde rede på hvilke barn som får hvilke gaver, og hvor mye gavene hvert barn får, har kostet. Programmet skal kunne lese inn data om gavene fra en fil som herr Glum oppdaterer etter hvert som han handler inn gaver i tiden før desember. Filen inneholder 24 linjer, en for hver gave: På hver linje står først navnet på gaven (en tekststreng) avsluttet med komma, deretter prisen (et flyttall). Du skal skrive et program i Python som leser inn filen med alle gavene, og deretter hjelper Herr Glum med å holde orden på gavefordelingen. 7.1 Skriv en klasse Gave med to instansvariabler som forteller hva som er i gaven (gavens navn), og hvor mye den har kostet. Klassen skal ha en konstruktør med parametere som angir verdier for instansvariablene. Foruten konstruktøren skal klassens grensesnitt omfatte tre metoder: En som returnerer gavepris; en som returnerer gavenavn; og en metode str som returnerer gavens navn og verdi som en lesbar String. class Gave: def init (self, navn, pris): self._navn = navn self._pris = pris def hentpris(self): return self._pris def hentnavn(self): return self._navn def str (self): return self._navn + " " + str(self._pris) + " kr" 6

7.2 Klassen barn skal ha en datarepresentasjon for barnets navn, alle gavene barnet har åpnet, og totalverdien av gaver barnet har åpnet. Grensesnittet til klassen skal være en konstruktør med barnets navn som parameter, en metode som returnerer barnets navn, em netode som returnerer totalverdien av alle gaver barnet har mottatt, en metode apnegave som legger til en ny gave og oppdaterer totalverdien av gaver barnet har fått, og en metode skrivbarn som skriver ut på terminal barnets navn, en linje for hver av barnets gaver og til slutt totalverdien av barnets gaver. Skriv klassen Barn med alt innhold. class Barn: def init (self, navn): self._navn = navn self._totverdi = 0 self._gaver = [] def hentnavn(self): return self._navn def henttotal(self): return self._totverdi def apnegave(self, gave): self._totverdi += gave.hentpris() self._gaver.append(gave) def skrivbarn(self): print(self._navn + ":") for gave in self._gaver: print(gave) print("total verdi: " + self._totverdi) 7

7.3 Vi skal utvide programmet med en klasse Julekalender med følgende metoder i grensesnittet: En konstruktør med parametere for Navn på alle barna i familien Navn på gavefilen der informasjon om gavene ligger lagret Konstruktøren skal opprette objekter for alle barna i familien og opprette selve julekalenderen med gaver. En metode nydag som åpner en ny gave og oppdaterer datastrukturen (inkludert hvilken dag og hvilket barn) En metode gaveoversikt som skriver en oversikt over barna, deres åpnede gaver og totalpris per barn på skjermen For øvrig har klassen blant annet følgende private innhold: En metode lesgavefil som leser inn gaver med pris fra gavefilen. Filformatet er beskrevet ovenfor. En liste kalender med referanser til en gave for hver dag En liste apnere med referanser til hvert av barna i familien Et heltall nesteapner som holder rede på hvem sin tur det er til å åpne Et heltall dag som holder rede på hvilken dag som skal åpnes neste gang 8

class Julekalender: def init (self, barnenavn, gavefil): self._apnere = [] for navn in barnenavn: self._apnere.append(barn(navn)) self._kalender = [] self._nesteapner = 0 self._dag = 0 self._lesgavefil(gavefil) def _lesgavefil(self, filnavn): file = open(filnavn) for line in file: words = split(",") gave = Gave(words[0], float(words[1])) self._kalender.append(gave) def nydag(self): if self._dag > 23: print("alle gavene er åpnet!") return apner = self._apnere[self._nesteapner] apner.apnegave(self._kalender[self._dag]) self._dag += 1 self._nesteapner += 1 if self._nesteapner >= len(self._apnere): self._nesteapner = 0 def gaveoversikt(self): for apner in self._apnere: apner.skrivbarn() 9

7.4 Vi skal nå utvide klassen Julekalender med historikk fra tidligere år. I første omgang er hensikten å redusere sjansen for at et barn får samme gave flere år på rad. Du kan anta at samme type gave alltid vil ha samme navn, slik at det er lett å sammenligne. For å representere alle gaver som har vært gitt tidligere, utvider vi klassen Julekalender med en dictionary historikk der nøkkel er barnets navn, og verdien er en liste med gaver dette barnet har fått. Du kan anta at følgende setninger er lagt til konstruktøren i klassen Julekalender (du trenger ikke endre dette i besvarelsen din): self._historikk = {} self._leshistorikk("historikk.txt") Metoden leshistorikk leser data fra en fil der hver linje representerer et barn og har formatet barnenavn gavenavn gavenavn gavenavn gavenavn... Du skal nå utvide klassen Julekalender med metoden skrivhistorikk): leshistorikk (ikke # leser data fra fil til instansvariabelen _historikk def _leshistorikk(self, histfilnavn) : # skriver ut oppdatert historikk (inkludert årets gaver) på fil def _skrivhistorikk (self, histfilnavn) : def _leshistorikk(self, histfilnavn): file = open(histfilnavn) for line in file: words = line.split() navn = words[0] self._historikk[navn] = [] for gavenavn in words[1:]: self._historikk[navn].append(gavenavn) 10

7.5 Metoden avvergetlike i klassen Julekalender kalles for å avverge at et barn får en gave det har fått i tidligere år. Den kalles hver dag før metoden apnegave. Dersom gaven og barnet som står for tur sammenfaller med noe som er gitt tidligere år, byttes gaven som står for tur med en gave for en senere dag. Hvis metoden ikke klarer å hindre at et barn får en gave det har fått før, skal den returnere False. Dersom barnet ikke har fått gaven som står for tur tidligere, eller du klarer å avverge det ved å bytte, skal metoden returnere True. Skriv metoden avvergetlike i klassen Julekalender # Prøver å avverge at et barn får en gave det har fått tidligere # Returnerer true om den lykkes, false om den ikke lykkes def avvergetlike (self) : def avergetlike(self): gavefradag = self._dag barnnavn = self._apnere[self._nesteapner] while gavefradag < 24: gavenavn = self._kalender[gavefradag] if gavenavn not in self._historikk[barnnavn]: midlertidig = self._kalender[self._dag] self._kalender[self._dag] = self._kalender[gavefradag] self._kalender[gavefradag] = midlertidig return True gavefradag += 1 return False 11

Oppgave 8.1 I spillet Yatzy får man poeng for ulike kombinasjoner av verdier på fem terninger. En av kombinasjonene som gir poeng kalles hus og krever at tre at terningene viser en verdi (er like) og at de to resterende terningene viser en annen (lik) verdi. Altså at man blant de fem terningene har tre like og to like. Det beste huset man kan ha er tre seksere og to femmere. Skriv en funksjon bestehus(t) som tar inn en liste av heltalls-verdier som parameter, og returnerer True dersom listen t bestar av tre verdier 6 og to verdier 5 (i vilkarlig rekkefølge). Ellers skal funksjonen returnere False. Du kan anta at du alltid får inn en liste av lengde 5, der hver verdi er større eller lik 1 og mindre eller lik 6. Altså skal f.eks. følgende assert-statement ikke feile: assert bestehus([5,6,6,5,6]) == True def bestehus(t): femmere = 0 seksere = 0 for i in t: if i == 5: femmere += 1 elif i == 6: seksere += 1 return seksere == 3 and femmere == 2 Oppgave 8.2 Skriv en metode hus(t) med samme parameter og returverdi som i Oppgave 8.1, men der metoden returnerer True for alle terningkombinasjoner som er hus (ikke bare hus av tre seksere og to femmere). def hus(t): kast = [0, 0, 0, 0, 0, 0] for i in t: kast[i-1] += 1 if 2 in kast and 3 in kast: return True return False 12

Oppgave 9.1 Er dette en personopplysning? Begrunn med henvisning til Personopplysningsloven. Mann, født 1990. Mangler fast bopæl. Straffedømt for narkotikabruk. Nei. Dette kan ikke knyttes til en enkeltperson og er derfor ikke en personopplysning i hht. 2.1. Oppgave 9.2 Nevn tre sentrale hensyn til informasjonssikkerhet som ifølge Personopplysningsloven skal ivaretas ved behandling av personopplysninger. Konfidensialitet, integritet og tilgjengelighet. Se 13. Oppgave 9.3 Som ledd i arbeidet mot forsikringssvindel har norske forsikringsselskaper fått konsesjon for lagring av følgende opplysninger om sine skadeoppgjør i et felles, sentralt skaderegister: Forsikringstakers fødselsnummer, saksnummer, bransjekode, selskap, skadetype, dato, saksbehandlers initialer og skadeland. Konsesjonen omfatter ikke tillatelse til registrering av sensitive personopplysninger. Diskuter om noen av opplysningene konsesjonen omfatter kan komme til å omfatte sensitive personopplysninger slik at spesiell varsomhet bør utvises ved registrering av disse i det felles registeret. Skadetype vil kunne omfatte sensitive personopplysninger da det kan gi opplysninger om helseforhold. Se 2.8. 13