meny2.html – INF3110 - Høst 2003 – Universitetet i Oslo

Ukeoppgaver i INF3110


INF3110/4110 Ukeoppgaver uke 36 (3.-5.9.2003) Oppgave 1 (Oppgave 1.3 fra l�reboka) --------- Skriv et program som viser hvorfor optimaliseringen som er nevnt i kapittel 1.5.3 generelt ikke kan gj�res i C. Kan en slik optimalisering gj�res i Java? Oppgave 2 --------- Hva er et programmeringsspr�k? Diskuter. Oppgave 3 --------- I Simula/Java, hva er statisk kjent (dvs kjent under kompileringen) og hva er dynamisk kjent (dvs kjent f�rst under kj�ringen)? * skopet til vanlige variable (integer/int, real/float, etc) * skopet til prosedyrer/metoder * skopet til pekere * levetiden til vanlige variable * levetiden til klasseobjekter * typen til vanlige variable * typen til pekere med bruk av qua/typekonvertering(�casting�), for eksempel P qua C.x / ((C)P).x * typen til pekere uten bruk av qua/typekonvertering (Svarene blir de samme i Simula og Java.) Oppgave 4 --------- I forbindelse med blokker, skop og bindinger blir eksemplene ofte gitt i det som kalles et �Algol-lignende spr�k�. Dette spr�ket ser slik ut: * Hovedprogrammet er en blokk. * En blokk starter med BEGIN og slutter med END. Den kan inneholde deklarasjoner og setninger. * Deklarasjonene er enten av variable eller av prosedyrer (som er det samme som funksjoner og metoder). VAR x, y; PROCEDURE P; BEGIN ... END P; Siden definisjonen av en prosedyre er en blokk, kan den inneholde nye deklarasjoner (og setninger, selvf�lgelig). Prosedyrer kan ha parametre. * Setninger er indre blokker, tilordning og prosedyrekall; �vrige setninger innf�res ved behov. I det hele tatt er det ikke s� viktig med den konkrete syntaksen; det er blokkene og bindingene som er det essensielle. Gitt f�lgende Algol-aktige program: BEGIN VAR x, y; PROCEDURE P; BEGIN PROCEDURE Q; BEGIN VAR y; PRINT x; END Q; VAR x; x := 2; y := 3; CALL Q; END P; x := 1; CALL P; END Angi skopet til de to x-ene og y-ene n�r det benyttes skop fra deklarasjonsstedet. Angi det samme n�r det brukes skop i hele blokken. Hvilken verdi av x skrives ut i de to tilfellene? Hvilken verdi ville bli skrevet ut hvis x hadde v�rt bundet dynamisk? Oppgave 5 --------- Skriv et program i et Algol-aktig spr�k som oppf�rer seg ulikt om det benyttes forskjellige skopregler. Om det benyttes statisk binding fra deklarasjonsstedet, skal programmet skrive 1; om det brukes statisk binding i hele blokken, skal det skrive 2; om det er dynamisk binding, skal det skrives ut 3. Oppgave 6 --------- I ML kan vi definere typene type L = int list; type LL = int list list; (* alternativt: type LL = L list *) hvor alts� L er lister av tall, mens LL er lister av lister av tall. For eksempel er [[1,2],[3,4,5],[]] av typen LL. 1. Lag en funksjon fun flatut(l:LL):L = ... som tar en liste av lister av tall som parameter, og flater ut denne (dvs funksjonsverdien er en utflatet liste av type L). F.eks. skal flatut([[1,2],[3,4,5],[]]) bli [1,2,3,4,5]. 2. Lag en funksjon fun summer(l:LL):L = ... som summerer de indre listene i l. F.eks. skal summer([[1,2],[3,4,5],[]]) bli [3,12,0]. Summen av en tom liste regnes her som 0. 3. Lag en funksjon fun sumall(l:LL):int = ... som finner summen av alle tall i en liste av lister. F.eks. skal sumall([[1,2],[3,4,5],[]]) bli 15. (Hint: bruk funksjonen fra forrige punkt.) 4. Lag en funksjon fun speil(l:LL):LL = ... som speilvender en liste av lister. Indre lister skal ogs� speilvendes. F.eks. skal speil([[1,2],[3,4,5],[]]) bli [[],[5,4,3],[2,1]]. 5. Lag en funksjon fun sorter(l:L):L = ... som sorterer en liste l (uten indre lister). F.eks. skal sorter([5,4,3]) bli [3,4,5]. 6. Lag en funksjon fun sorterindre(l:LL):LL = ... som sorterer de indre listene i en liste av lister l. F.eks. skal sorterindre([[],[5,4,3],[2,1]]) bli [[],[3,4,5],[1,2]]. Oppgave 7 --------- Skriv en ML-funksjon som setter inn et element sist i en liste. Oppgave 8 --------- Skriv en ML-funksjon som returnerer det siste elementet i en gitt liste. Oppgave 9 --------- Skriv en ML-funksjon fun plukk(n, l) = ... som plukker ut de f�rste n elementene fra listen l. For eksempel skal plukk(3, [2,4,6,8,10]) gi [2,4,6]. Du kan anta at l best�r av minst n elementer. Oppgave 10 ---------- Skriv en ML-funksjon fun fjern(n, l) = ... som fjerner de f�rste n elementene fra listen l. For eksempel skal fjern(3, [2,4,6,8,10]) gi [8,10]. Du kan anta at l best�r av minst n elementer.