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

Relevanta dokument
Datalogi, grundkurs 1

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

Datalogi, grundkurs 1

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

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

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

Idag: Dataabstraktion

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

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

Deklarationer/definitioner/specifikationer

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

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

Datalogi, grundkurs 1 Övningsuppgifter i Scheme. Serafim Dahl, Carina Edlund, m.fl.

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

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

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)

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

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

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

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12

Föreläsning 9 Exempel

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

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

TDDC74 Lab 04 Muterbara strukturer, omgivningar

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

Tentamen i Introduktion till programmering

TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 5 mars 2015

Föreläsning 6: Introduktion av listor

Tentamen Grundläggande programmering

Sista delen av kursen

TDDC74 Programmering: Abstraktion och modellering Dugga 2, Tid: kl 08-10, Datum:

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?

Sista delen av kursen

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

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Idag: Dataabstraktion

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

Standardfilerna Input och Output

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

TDDC74 Programmering: Abstraktion och modellering Datortenta

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

Del A (obligatorisk för alla)

DD1361 Programmeringsparadigm. Carina Edlund

TDDC74 - Lektionsmaterial C

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.

TDDC74 Lab 02 Listor, sammansatta strukturer

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

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

Uppgift 6A - Frekvenstabell

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

Grundläggande datalogi - Övning 1

Några saker till och lite om snabbare sortering

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 08-12

Datalogi, grundkurs 1

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

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

Föreläsning 3-4 Innehåll

Repetition i Pascal. Exemplen fac. Exemplen fac i Pascal. Exemplen fac motivering. Orginalet

Tentamen i. TDDA 69 Data och programstrukturer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

Dugga Datastrukturer (DAT036)

TDDC74 Programmering, abstraktion och modellering. Tentamen

Lösningsförslag till tentamen Datastrukturer, DAT037,

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

FÖRELÄSNING 2, TDDC74, VT2018 BEGREPP PROBLEMLÖSNING MED HJÄLP AV FALLANALYS PROBLEMLÖSNING MED HJÄLP AV REKURSION

I dag: Blockstruktur, omgivningar, problemlösning

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen OOP

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

Procedurer och villkor. Rekursiva procedurer. Exempel: n-fakultet

Procedurer och villkor

Språket Scheme. DAT 060: Introduktion till (funktions)programmering. DrScheme. uttryck. Jacek Malec m. fl. evaluering av uttryck.

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

Föreläsning 7. Träd och binära sökträd

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

Våra enkla funktioner eller procedurer

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

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

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Att skriva till och läsa från terminalfönstret

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

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

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

Lösningsförslag till tentamen

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Transkript:

Datalogi, grundkurs 1 Lösningsförslag till tentamen 10 december 2008

1. a. Man testar med typiska värden, gränsvärden och värden utanför specificerad indatavärdemängd. Helst med alla permutationer av indata. Ska utföras av någon som inte känner till programkoden, därav namnet. b. Man testar med indata som ska se till att all kod exekveras. Bör utföras av någon med full insyn i programkoden (men helst ska det inte vara programeraren). 2. a. Proceduren interval-list är svansrekursiv eftersom man inte opererar på resultatet av det enda rekursiva anropet. Proceduren remove-multiples är inte svansrekursiv eftersom på else-raden opererar cons på resultatet av det andra av de två rekursiva anropen. Proceduren sieve är inte svansrekursiv eftersom man opererar på resultatet av det enda rekursiva anropet. b. (define prime? (lambda (n) (define interval-list (lambda (m n lst) (if (> m n) lst (interval-list (+ 1 m) n (append lst (list m)))))) (define remove-multiples (lambda (n lst new) (cond ((null? lst) (reverse new)) ((= (modulo (car lst) n) 0) (remove-multiples n (cdr lst) new)) (else (remove-multiples n (cdr lst) (cons (car lst) new)))))) (define sieve (lambda (lst new) (if (null? lst) new (sieve (remove-multiples (car lst) (cdr lst) ()) (append new (list (car lst))))))) (= n (car (reverse (sieve (interval-list 2 n ()) ())))))) 1 av 4

Observera att med min lösning får både remove-multiples och sieve en extra parameter i form av en tom lista. c. Jag har valt att skriva ett felmeddelande för allt som inte är heltal större än 1. Då blir procedurkroppen för prime? så här: (if (and (number? n) (exact? n) (> n 1)) (= n (car (reverse (sieve (interval-list 2 n ()) ())))) (display "prime? kräver tal större än 1\n")))) 3. PROGRAM uppg3(fil); VAR fil : TEXT; n, i : Integer; n := 0; Reset(fil); WriteLn( Filen innehåller: ); WHILE NOT EoF(fil) DO IF fil^ IN [ 0.. 9 ] THEN n := Succ(n); Read(fil, i) END ELSE Get(fil) WriteLn(n:1, heltal ); END. 4. a. CONST minindex = 1; maxindex = 100; TYPE index = minindex..maxindex; vector = ARRAY [index] OF Integer; duger bra, men det gör mycket annat också b. PROCEDURE sort(var v: vector; m, n: Integer); VAR i: Integer; didswap: Boolean; didswap := FALSE; FOR i := n downto Succ(m) DO IF v[i] < v[pred(i)] THEN didswap := TRUE; swap(v[i], v[pred(i)]) IF (Succ(m) < n) AND didswap THEN sort(v, Succ(m), n); 2 av 4

c. PROCEDURE sort(var v: vector; m, n: Integer); VAR i: Integer; FOR m := Succ(m) TO n DO FOR i := n DOWNTO m DO IF v[i] < v[pred(i)] THEN swap(v[i], v[pred(i)]); OBS! att jag valt en version utan den efterfrågade förbättringen. Vill jag ha med den måste jag välja lite annorlunda kod. PROCEDURE sort(var v: vector; m, n: Integer); VAR i : Integer; didswap : Boolean; didswap := TRUE; m := Succ(m); WHILE (m < n) AND didswap DO didswap := FALSE; print(v); FOR i := n downto m DO IF v[i] < v[pred(i)] THEN swap(v[i], v[pred(i)]); didswap := TRUE m := Succ(m); END d. PROCEDURE swap(var i,j : Integer); VAR k : Integer; k := i; i := j; j := k; swap deklareras var som helst i programmet eftersom man endast skickar vektorelementen som argument. 5. a. ;; Konstruktor för post (define make-post (lambda (varunr varutyp pris sort kvantitet) (list varunr varutyp pris sort kvantitet))) ;; Selektorer för poster (define get-varunr (car post))) 3 av 4

(define get-varutyp (cadr post))) (define get-pris (caddr post))) (define get-sort (cadddr post))) (define get-kvantitet (caddr (cddr post)))) ;; Konstruktor för att skapa registret (define create-reg (lambda () ())) ;; Lägg till en post (define add-post (lambda (post reg) (cond ((null? reg) (list (post))) ((= (get-varunr post) (get-varunr (get-first reg))) (cons post (get-rest reg))) (else (cons (get-first reg) (add-post post (get-rest reg))))))) ;; Selektorer för reg ;; Hämta första posten (define get-first (lambda (reg) (if (null? reg) () (car reg)))) ;; Hämta resten (allt utom första posten) (define get-rest (lambda (reg) (if (null? reg) () (cdr reg)))) 4 av 4

b. (define calc-value (lambda (reg) (define post-value (* (get-pris post) (get-kvantitet post)))) (define inner (lambda (reg value) (if (null? reg) value (inner (get-rest reg) (+ value (post-value (get-first reg))))))) (inner reg 0))) 5 av 4