Fiktiv eksamensbesvarelse IN 211 høsten 2001

Like dokumenter
Løsningsforslag til eksamen i IN 211 høsten 2001

Om oppgaveteksten på noe punkt er uklar eller upresis, kan du gjøre egne presiseringer. Formulér i så fall disse tydelig i oppgavebesvarelsen din.

Løsningsforslag til eksamen i IN 211 høsten 2002

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Anatomien til en kompilator - I

Anatomien til en kompilator - I

Diverse eksamensgaver

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

Runtimesystemer - II. Parameteroverføring Call by value Call by reference Call by value-result Call by name INF 3110/ INF

UNIVERSITETET I OSLO

Med Svarforslag UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet. 3 sider (side 6, 7 og 8, rives ut, fylles ut og leveres)

UNIVERSITETET I OSLO

Plan. funksjoner som funksjonsverdi funksjoner som datastruktur. funksjoner som parametre. Høyere-ordens funksjoner. ufullstendige kall.

Runtimesystemer - II. Funksjoner som parametere. Virtuelle metoder

Runtime-omgivelser Kap 7 - II

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

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

2012 2a. C rc; void main() { rc = new C (); rc.m2(); } } INF 3110/ INF /28/13 1

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015

2 Om statiske variable/konstanter og statiske metoder.

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Plan. funksjoner som funksjonsverdi funksjoner som datastruktur. funksjoner som parametre. Høyere-ordens funksjoner. ufullstendige kall.

UNIVERSITETET I OSLO

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

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Dagens tema. Innføring i ML - del III (Kapittel & ML-kompendiet.) Unntak Abstrakte datatyper i ML Høyere-ordens funksjoner

Dagens tema: Kjøresystemer II

Løsningsforslag til hjemmeeksamen 2 i INF3110/4110

1/28. Forelesning Forelesning / fun f (_,0) = true. 2 f(0,_)=true. 3 f_ =false; 4 val f = fn : int * int -> bool

UNIVERSITETET I OSLO

Dagens tema Innføring i ML - del IV

Semantikk. Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Semantikk. Semantikk. En måte å svare på: gi semantikken til språket!

Syntaksanalyse. Skanner (repetisjon) Parsering top-down bottom-up LL(1)-parsering Recursive descent Forutsetninger. IN 211 Programmeringsspråk

Beskrivelse av programmeringsspråket Simpila INF Kompilatorteknikk Våren 2012

Språktyper og syntaksanalyseteknikker. Dagens temaer. Hvordan lage en deterministisk automat? Fra jernbanediagram til ID-automat

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

Plan. Fortsetter med ML: lister og rekursive typer/funksjoner unntak let-uttrykk moduler og abstrakte datatyper høyere-ordens funksjoner

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

Plan. Fortsetter med ML: lister og rekursive typer/funksjoner unntak let-uttrykk moduler og abstrakte datatyper høyere-ordens funksjoner

UNIVERSITETET I OSLO

MED SVARFORSLAG UNIVERSITETET I OSLO

Semantisk Analyse del I

UNIVERSITETET I OSLO

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

INF1000 Metoder. Marit Nybakken 16. februar 2004

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

UNIVERSITETET I OSLO

Leksjon 6. Objekt. Evt. importsetninger. public class Klasse { Konstruktør. Objektmetoder. Innkapsling (private): set-og get-metoder

Informasjon Eksamen i IN1000 høsten 2017

2 Om statiske variable/konstanter og statiske metoder.

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

INF1010, 15. januar time. Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

UNIVERSITETET I OSLO

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

TDT4165 PROGRAMMING LANGUAGES. Exercise 01 Introduksjon til Oz

UNIVERSITETET I OSLO

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

Variable Man kan bruke variable i ML. ML (kap 5 og 6) Nye datatyper INF3110/4110 INF3110/4110 INF3110/4110 INF3110/4110. Variable i ML.

Dagens tema: Sjekking

Introduksjon til objektorientert programmering

Fortsetter med ML: Repetisjon av lister Typer Unntak Moduler og abstrakte datatyper Introduksjon til høyere-ordens funksjoner

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

Runtime-omgivelser Kap 7 - I

Runtimesystemer Kap 7 - I

INF3110 Programmeringsspråk. Velkommen til kurset INF 3110/4110. Programmeringsspråk 1/24

INF 3110/4110. Velkommen til kurset. Programmeringsspråk. Først det praktiske

Informasjon Prøveeksamen i IN1000 høsten 2018

INF1010 våren januar. Objektorientering i Java

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

UNIVERSITETET I OSLO

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

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

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

INF1000 : Forelesning 4

TDT4100 Objektorientert programmering

INF Uke 10. Ukesoppgaver oktober 2012

G høgskolen i oslo. Emne: Algoritmer og datastrukturer. Emnekode: 80131A. Faglig veileder: UlfUttersrud. Gruppe(r) : Dato:

6108 Programmering i Java. Leksjon 5. Tabeller. Roy M. Istad 2015

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

Øvingsforelesning i Matlab TDT4105

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Enkle generiske klasser i Java

UNIVERSITETET I OSLO

Endret litt som ukeoppgave i INF1010 våren 2004

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Løsningsforslag Test 2

Plenumsregning 1. Kapittel 1. Roger Antonsen januar Velkommen til plenumsregning for MAT1030. Repetisjon: Algoritmer og pseudokode

UNIVERSITETET I OSLO

Vanlige datastrukturer. I dette lysarksettet

Transkript:

Fiktiv eksamensbesvarelse IN 211 høsten 2001 Kandidat 1 6. desember 2001 Oppgave 1: Kjøresystemer 1a: Statisk og dynamisk link egne aktiveringsstakken før kallet på P 1b: Parameteroverføring 1. Verdioverføring: 2 blir skrevet ut. Dette er fordi call by value behandler formelle parametre som lokale variable som kun er synlig innenfor sitt eget skop. Name-overføring: P ser da ut som: (i vårt kall) void P(int x, int y, int z) a = a + 1; a = a + a + b; Verdien av a blir da 9. (Siste tilordning i P() gir a = 3 + 3 + 3;) Dermed blir 9 skrevet ut. (Name-overføring bytter ut tekstlig parameteren som vist) 1

2. Anta nå at kallet på P erstattes av kallet P(b,a,a) Referanse-overføring Med referanse-overføring blir adressen til variablene sendt som parameter. Når man f.eks. i P() sier y = y + 1; Så, fordi y nå peker på samme minne-lokasjon som main s a, er det main s a som blir endret. Verdi-resultat Her blir resultatet etter kjøringen av P() kopiert tilbake til kalleren (motsatt av verdi-overføring). Men verdien blir også sendt med inn til P(), så 6 blir skrevet ut. 3. Vi skal svare på hvorfor det er problematisk å tillate kallet P(a + b, a, a) ved referanseoverføring: Her sender vi altså med minnelokasjonene til variablene. Men det finnes ingen variabel som heter (a + b), så man vil få merkelig resultat ved f.eks. at kallet sender referanse til siste variabel b eller noe slikt. Man må kanskje lage en temporær variabel i minne, tilordne denne verdien (a + b), så bruke denne. Uansett vil ikke dette referere til en variabel. verdi-resultat: Resultat-overføring krever at vi etter metodens slutt skal kopiere verdiene (resultatet fra metoden) tilbake til kallerens miljø. Men det finnes ingen variabel som heter (a + b). Dette vil være et problem. Merk: Selve verdioverføringen vil ikke by på problemer. 2

1c: Objekter 3

Oppgave 2: Prolog-grammatikk 2a: Syntaksmengder meta-til-tom startmengde etterfølgermengde statmt NEI name fact NEI name pred NEI name :-. rule NEI name arglist NEI arg [ ) list NEI [ ) ] listelems JA arg ] 2b: Ikke LL(1) Produksjon Utvidet st.mengde. Disjunkt? statmt fact name NEI statmt rule name fact pred. name JA pred name [( arglist )]? name JA rule pred? :- body. name JA arglist arg arg arglist arg, arglist arg NEI arglist list [ listelems ε ] listelems arg arg NEI listelems arg I list arg listelems arg I var arg Den er ikke LL(1) da den ikke har disjunkte utvidede startmengder for de forskjellige produksjonene. 4

Oppgave 3: Regulære uttrykk 3a: Regulært uttrykk beløp beløp2 beløp2 beløp2. beløp3 beløp3 beløp4 beløp4 beløp5 beløp5 beløp6 beløp6. beløp3 3b: Ikke-deterministisk automat. X. 3c: Deterministisk automat. X. X 5

Oppgave 4: Bussruter i ML 4a: Funksjonen steder fun steder(nr:int, rh:rutehefte):string list = case rh of nil => [] (i,j) :: rh => if i = nr then j else steder(nr,rh ); 4b: Funksjonen busser Hjelpemetode: fun finnstopp(s:string, l:list):bool = case l of nil => false x :: l => if x = s then true else finnstopp(s,l ); fun busser(st:string, rh:rutehefte):int list = case rh of nil => 0 (i,j) :: rh => if finnstopp(st,j) then [i] :: busser(st,rh ) else busser(st,rh ); 4c: Ny bussrute fun leggil(nr:int, ss:string list, rh:rutehefte):rutehefte = case rh of nil => [(nr,ss)] (i,j) :: rh => if i = nr then (nr,ss) :: leggil(nr,ss,rh ) else (i,j) :: leggil(nr,ss,rh ); 4d: Nedlegging av stoppested Hjelpemetode: fun fjernstopp(s:string, l:string list):string list = case l of nil => [] x :: l => if x = s then fjernstopp(s,l ) else x :: fjernstopp(s,l ); fun fjern(st:string, rh:rutehefte):rutehefte = case rh of nil => [] (i,j) :: rh => (i, fjernstopp(st,j)) :: fjern(st,rh ); 4e: Bytte mellom busser For å løse oppgaven må man vha fun busser finne ut hvilke busser som stopper på sted A og hvilke som stopper på sted B. Deretter må man for hvert element i intlisten (returnert fra busser) finne listen av stoppesteder ved hjelp av fun steder. Ved så å ta ut det første elementet i stoppestedliste A og sml. denne stringen med alle stringene i liste B kan man finne ut om man kan bytte, og dermed komme frem til ønsket mål. 1. hvilke busser stopper på Kjelsås,A int list med bussnr hvilke busser stopper på St.hanshaugen,B int list med bussnr 2. finn alle stoppestedene til busser som stopper på Kjelsås,A list list finn alle stoppestedene til busser som stopper på St.hansh,A list list 3. sammenligne første elementet i A s indre liste med alle elementene i B s liste 6

4f: Implementasjon ved funksjonsrom type rutehefte = int -> string list; exception nodata; val tom : rutehefte = fn(y) => raise nodata; Steder fun steder(nr,rh) = fn(y) => if nr = y then (rh nr handle nodata => []) else rh y; leggil fun leggil(nr,ss,rh) = fn(x,y) = if (nr,ss) = (x,y) then fjern fun fjern(st,rh) = let val x = rh st in if x = " " then raise nodata else fn(y) => if x = y then " " else rh y 2. Når man implementerer vha funksjonsrom mister man muligheten til å lage en metode som finner ønsket informasjon. Dette fordi man ikke kan søke gjennom et funksjonsrom. Dette skyldes at data ikke oppbevares i datastrukturer slik som lister e.l men i funksjonene selv. 7

Busser i Prolog 5a: Oppslag?- stopper(x,helsfyr). 5b: Knutepunkter knute(x) :- stopper(y,x), stopper(z,x), Y \== Z.?- knute(x). nygård, teisen, helsfyr, teisen, helsfyr, nygård Prolog starter på første fakta, plukker ut stedsnavn, og ser om det finnes et som er likt, med et annet nr. Alle stedsnavnene kommer to ganger siden f.eks og stopper(23,nygård), stopper(37,nygård), 23 \== 37 stopper(37,nygård), stopper(23,nygård), 37 \== 23 ikke sees på som samme tilfelle. 5c: Reiserute (X:nr, Y:nr, Z:sted, V:sted) ettbytte(x,y,z,v) :- stopper(x,z), stopper(y,v), stopper(x,w), stopper(y,w), X \== Y. De to første stopper(... ) skal avgjøre om bussene går til stedene som er angitt, og de to neste om de har et felles stoppested. F.eks. vil?- ettbytte(x,y,lysaker,helsfyr). gi X=23 og Y=37.?-ettbytte(37,X,lysaker,helsfyr). vil derimot gi no. For å rette på dette kan man ha enda en ettbytte(x,y,z,v)-regel, hvor de første to stopper er byttet (stopper(x,v), stopper(y,z)). 8