Datalogi, grundkurs 1. Lösningsförslag till tentamen

Relevanta dokument
Datalogi, grundkurs 1. Lösningsförslag till tentamen

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Sökning och sortering

Sökning och sortering. Sökning och sortering - definitioner. Sökning i oordnad lista. Sökning med vaktpost i oordnad lista

Kontinuerliga listor. Fält (listor) Kontinuerliga listor... Kontinuerliga listor...

Ordnad lista. Listor... Ordnad lista... Ordnad lista typer

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

Datalogi, grundkurs 1

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Datalogi, grundkurs 1

Deklarationer/definitioner/specifikationer

Funktionell programmering DD1361

Tentamen Grundläggande programmering

Lösningsförslag. TDDC74 Programmering: Abstraktion och modellering. Dugga 3 (provkod TEN1), Tid: kl 14-16, Datum:

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Föreläsning 6: Introduktion av listor

Länkade strukturer. (del 2)

Standardfilerna Input och Output

Standardfilerna Input och Output. Filer... Filer... vanlig utbyggnad för ökad dynamik. Filer... filtyper

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Idag: Par och listor. Scheme. DA2001 (Föreläsning 6) Datalogi 1 Hösten / 29

Idag: Dataabstraktion

Idag: Par och listor. Symboler. Symboler används för att uttrycka icke-numeriska data såsom namn, adress, bilregisternummer, boktitel, osv.

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt

n Detta för att kunna koncentrera oss på n Tal: number? n Symboler: symbol? n Strängar: string? n Tecken: char? n Boolskt: boolean?

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

Abstraktion. procedurabstraktion. DA2001 (Föreläsning 26) Datalogi 1 Hösten / 27

Lära dig analysera större och mer komplicerade problem och formulera lösningar innan du implementerar.

Pascal... Pascal. Pascal... Pascal...

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

Poster. Vi har ofta behov av att behandla klumpar av data som i sig är inhomogena men sett över ett helt register har klumparna lika struktur.

Sista delen av kursen

Programspråkslingvistik. Sista delen av kursen. Ett programspråk

TDIU01 - Programmering i C++, grundkurs

Funktioner, Procedurer och Parametrar. Funktioner, Procedurer och Parametrar... Funktioner, Procedurer och Parametrar procedurspecifikation

Två fall: q Tom sekvens: () q Sekvens av element: (a b c) ; (sum-rec '(2 4 6)) = 12. q Första elementet uppfyller vissa villkor: (2 a b c)

Sista delen av kursen

Abstraktion. Abstraktion... Abstraktion... Abstraktion...

Pascal. Vi har ofta behov av att behandla klumpar av data som i sig är inhomogena men sett över ett helt register har klumparna lika struktur.

Poster... Poster. Poster... Poster...

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

OOP Objekt-orienterad programmering

Några saker till och lite om snabbare sortering

TDDC74 Programmering, abstraktion och modellering. Tentamen

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tentamen i Algoritmer & Datastrukturer i Java

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Symbolisk data. quote. (define a 1) (define b 2) (jacek johan david) (list a b)

Datastrukturer. föreläsning 3. Stacks 1

Ändringsbar (mutable compound) data. TDDC74 Programmering: abstraktion och modellering. Sätta - samman listor kopiering. Hitta sista cons-cellen

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

2D1310 Programmeringsteknik Tentamen (1p) lördag 29 april 2000 kl 14-17

Signalflödesmodellen. Två (gamla) exempel: Kvadratera alla jämna löv.

Imperativ programmering. Imperativ programmering konstruktioner i Lisp. Datastrukturer (kap ) arraystruktur poststruktur

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Arrayer (vektorer) Murach s: kap Elektronikcentrum i Svängsta AB

GOTO och lägen. Några saker till och lite om snabbare sortering. GOTO och lägen (3) GOTO och lägen (2)

Datalogi, grundkurs 1

TDDC74 Programmering, abstraktion och modellering. Tentamen

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

TDDC74 Lab 02 Listor, sammansatta strukturer

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

TDIU01 - Programmering i C++, grundkurs

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

Idag: Dataabstraktion

TDDC74 Programmering: Abstraktion och modellering. Provkod TEN1, Tid: kl 14-18, , Kåra

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Visual Basic, en snabbgenomgång

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Datalogi, grundkurs 1 Övningsuppgifter i Pascal. Serafim Dahl, Carina Edlund, Kjell Lindqvist m.fl.

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

Grundläggande programmering med C# 7,5 högskolepoäng

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Föreläsning 9 Exempel. Intervallhalveringsmetoden. Intervallhalveringsmetoden... Intervallhalveringsmetoden...

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 8 Datastrukturer (DAT037)

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Föreläsning 4 Innehåll

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Lösningsförslag: Instuderingsfrågor, del D

Börja med att kopiera källkoden till din scheme-katalog (som du skapade i Laboration 1).

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Programmering för språkteknologer II, HT2014. Rum

TDDC74 Programmering, abstraktion och modellering. Tentamen

Transkript:

Datalogi, grundkurs 1 Lösningsförslag till tentamen 6 maj 2000

1. För att proceduren sortera ska fungera som tänkt kan den se ut på följande sätt: const min = 1; max = 3; type tal = integer; index = min..max; vector = array [index] of tal; var v:vector; procedure sortera (var v : vector); var tmp:tal; begin while not ((v[1]<=v[2]) and (v[2]<=v[3])) do begin if v[1] > v[2] then begin tmp:=v[1]; v[1]:=v[2]; v[2]:=tmp; if v[2] > v[3] then begin tmp:=v[2]; v[2]:=v[3]; v[3]:=tmp; { sortera } a. (2p) De fel som finns i den ursprungliga koden är: i. I procedurhuvudet: v måste referensanropas om sorteringen ska ge resultat utanför proceduren. ii. I procedurhuvudet: v kan inte typdeklareras som föreslaget p.g.a. att när vi anropar sortera med ett argument, v1 kan v1 INTE vara av samma typ som den formella parametern, v i procedurhuvudet. iii. I båda IF-satserna finns samma typ avproblem: Det måste finnas en temporär variabel som tillfälligtvis lagrar ett värde. iv. Slutligen kan inte en procedur tilldelas ett värde, det är endast funktioner som kan tilldelas ett värde. Att ändra proceduren sortera till en funktion är inte att rekommendera eftersom en tilldelning till funktionen måste göras. Typen vector är en sammansatt typ och kan inte returneras ty det går inte att returnera annat än atomiska värden till en funktion. Den bästa och enklaste lösningen på detta problem är helt enkelt att ta bort raden sortera := v; och låta referensanropa vektorn som ska sorteras, se under punkt i. 1

b. (2p) De sätt vi lärt oss är glassbox, blackbox och tickingbox. i. Glassbox. Man vet hur koden ser ut och väljer testdata så att alla möjliga vägar genomlöps. Provkör därefter programmet med vald testdata för att se att det förväntade resultatet erhålls.. ii. Blackbox. Man ska välja testdata utifrån vetskapen om vad programmet ska göra inte hur koden ser ut. Testdata är en vektor med t.ex. 1) de olika permutationerna av 1, 2 och 3. 2) några eller alla tal lika t.ex. 1, 1 och 2. 3) extrema värden t.ex. MaxInt samt 4) felaktiga värden t.ex. a, hej och 3.14. iii. Tickingbox. Inget test utförs, först när det blir fel åtgärdas det (förhoppningsvis). 2. a. (1p) Operativsystemets uppgifter: organisera det interna arbetet, assistera program, effektivisera användningen av datorns resurser. b. (1p) Med virtuellt minne håller man endast en del av varje program i primärminnet och resten ligger på sekundärminnet och hämtas in vid behov, varvid den nyss aktuella delen av programmet kan flyttas till sekundärminnet om det inte längre får plats i primärminnet. c. (2p) Både stack och kö är en speciell typ avliststruktur. En lista där operationer endast sker i en ände avlistan kallas stack, dvs elementen sätts in och tas bort från samma ände. Detta kallas också LIFO, Last In First Out. Listor där man opererar på elementen i den ordning som de sätts in kallas för köer, dvs elementen sätts in i ena änden och tas bort från den andra änden i listan. Detta kallas också FIFO, First In First Out. d. (3p) En kontinuerlig lista är en liststruktur där posterna i listan ligger i en följd i minnet. (En kontinuerlig lista är indexerbar och motsvaras av ARRAY i Pascal. När en kontinuerlig lista skapas reserveras plats till hela listan i minnet.) En diskontinuerlig lista är en liststruktur där posterna i listan läggs där minnesutrymme finns och läggs in först när ett NEW-kommando ges. (I Pascal byggs en sådan struktur upp med hjälp avpekare och poster.) En diskontinuerlig listas fördelar framför en kontinuerlig listas är: listan har en flexibel längd, lätt att sätta in och ta bort element inuti en lista samt strukturera om i en lista. 2

3. a. (3p) Konstruktor sätter samman komponenter till ett objekt. Selektor väljer ut en komponent från ett objekt. Predikat utför något slags test, resultatet är ett sanningsvärde. Följande kan vara bra att ha: Konstruktorer: (define (makeaktie namn datum start) (list namn datum start)) (define (makeport) (list)) Selektorer: (define (picknamn aktiepost) (car aktiepost)) (define (pickdatum aktiepost) (cadr aktiepost)) (define (pickstart aktiepost) (caddr aktiepost)) (define (firstaktie port) (car port)) (define (restaktier port) (cdr port)) Predikat: (define (empty? port) (null? port)) b. (2p) (define (insert aktiepost port) (cons aktiepost port)) c. (4p) (define (searchaktienamn port) (cond ((empty? port) port) ((eq? aktienamn (picknamn (firstaktie port))) (insert (firstaktie port) (searchaktienamn (restaktier port)))) (else (searchaktienamn (restaktier port))))) 3

4. a. (2p) Typdeklarationen för min kö är: CONST min = 1; max = 50; TYPE string = PACKED ARRAY [min..max] OF Char; personptr = ^person; person = RECORD namn : string; persnummer : integer; size : integer; next : personptr; queueptr = ^queue; queue = RECORD first,last : personptr; Jag väljer en diskontinuerlig lista eftersom jag inte vet hur många element som kommer att finnas i kön. Kön har ett huvud vilket underlättar behandlingen av kön. b. (3+3p) PROCEDURE enqueue (p:personptr; q : queueptr); BEGIN IF full(q) THEN WriteLn( Kön är full, kan ej lägga till ett element ) ELSE IF empty(q) THEN BEGIN q^.first:=p; q^.last:=p; END ELSE BEGIN q^.last^.next:=p; q^.last:=p; { enqueue } FUNCTION dequeue (q : queueptr):personptr; VAR tmp: personptr; BEGIN dequeue:=nil; IF NOT empty(q) THEN BEGIN tmp:=q^.first; q^.first:=q^.first^.next; tmp^.next:=nil; dequeue:=tmp; { dequeue } c. (2p) De funktioner som behövs till ovanstående är full och empty. FUNCTION empty (q :queueptr) : Boolean; Previllkor: Kön q har skapats Postvillkor: Om kön, q är tom returneras true annars false. FUNCTION full (q : queueptr): Boolean; Previllkor: Kön q har skapats Postvillkor: Om kön, q är full returneras true annars false. 4

5. (6p) program removedate(personal); Var personal, tmp : TEXT; begin reset(personal); rewrite(tmp); while not eof(personal) do if eoln(personal) then begin writeln(tmp); get(personal); end else if personal^ in [ 0.. 9 ] then get(personal) else begin write(tmp,personal^); get(personal); reset(tmp); rewrite(personal); while not eof(tmp) do if eoln(tmp) then begin writeln(personal); get(tmp); end else begin write(personal,tmp^); get(tmp); end. 6. a. (2p) Den angivna proceduren är inte svansrekursiv eftersom cons börjar operera på sina argument först efter det att de rekursiva anropen är klara. b. (4p) (define (derivera poly) (define (inner poly potens res) (if (null? poly) res (inner (cdr poly) (+ potens 1) (append res (list (* potens (car poly))))))) (if (null? poly) () (inner (cdr poly) 1 ()))) 5