allt.cl Page 1 of 17 Date: torsdag 7 december 2006

Storlek: px
Starta visningen från sidan:

Download "allt.cl Page 1 of 17 Date: torsdag 7 december 2006"

Transkript

1 allt.cl Page 1 of 17 Slumpspelaren Väljer slumpvis en flytt ur möjliga flyttar. (defun skapa-slump-spelare (namn bricktyp) "lisp-sträng x bricka -> spelare" (skapa-spelare #'slump-gör-flytt namn bricktyp)) (defun slump-gör-flytt (spelplan spelare möjliga) "spelplan x spelare x flyttar -> flytt" (nth-flytt (random (antal-flyttar möjliga)) möjliga)) AI-spelaren (defun skapa-ai-spelare (namn bricktyp) "lisp-sträng x bricka -> spelare" (skapa-spelare #'ai-gör-flytt namn bricktyp)) Låt AI:t (dvs algoritmen giv-bästa-flytt nedanför) ge en flytt. Standarddjup är 3. (defun ai-gör-flytt (spelplan spelare möjliga) "spelplan x spelare -> flytt" (giv-bästa-flytt spelplan (bricktyp spelare) 3)) (defun möjliga-spelplaner (spelplan flyttar bricka) "spelplan x flyttar x bricka -> lisp-lista av spelplan" (mapflyttar flyttar (lambda (flytt) (kopierad-spelplan-med-flytt spelplan bricka flytt)))) Värdera spelplan Möjligheter: 1. Andelen av ens egna brickor/motspelarens brickor. OK! 2. Ta hänsyn till att hörn/kanter är mer värda. OK! 3. Ta hänsyn till vem som har vunnit. Om det är bricka, bra, annars argh.ok! 4. Mer? (defun värdera-specifik-spelplan (spelplan bricka) "spelplan x bricka -> lisp-bråktal" (let* ((mina-brickor (räkna-brickor spelplan bricka)) (fiende-brickor (räkna-brickor spelplan (annan-bricka bricka))) (mina-kanter (antal-kantbrickor spelplan bricka)) (fiende-kanter (antal-kantbrickor spelplan (annan-bricka bricka))) (mina-hörn (antal-hörnbrickor spelplan bricka)) (fiende-hörn (antal-hörnbrickor spelplan (annan-bricka bricka)))) (+ (/ mina-brickor (+ fiende-brickor mina-brickor)) (if (har-någon-vunnit? spelplan) (if (samma-bricka? (vem-leder? spelplan) bricka) ) 0) (if (= (+ fiende-kanter mina-kanter) 0) 0 (* 80 (/ mina-kanter (+ fiende-kanter mina-kanter)))) (if (= (+ fiende-hörn mina-hörn) 0) 0 (* 200 (/ mina-hörn (+ fiende-hörn mina-hörn)))) ))) Värderar spelplan(er) i ett visst djup (räknare) returnerar ett värde för hur bra en viss spelplan är ur hänsyn som tas ovan. (defun värdera-spelplan (spelplan bricka räknare)

2 allt.cl Page 2 of 17 (let ((kan-inte-bricka-a (kan-inte-bricka-lägga? spelplan bricka)) (kan-inte-bricka-b (kan-inte-bricka-lägga? spelplan (annan-bricka bricka)))) (cond ((or (<= räknare 0) (har-någon-vunnit? spelplan) (and kan-inte-bricka-a kan-inte-bricka-b)) (värdera-specifik-spelplan spelplan bricka)) (kan-inte-bricka-b (värdera-spelplan (kopierad-spelplan-med-flytt spelplan bricka (giv-bästa-flytt spelplan bricka (1- räknare))) bricka (1- räknare))) (t (värdera-spelplan (kopierad-spelplan-med-flytt spelplan bricka (giv-bästa-flytt spelplan (annan-bricka bricka) (1- räknare))) (annan-bricka bricka) (1- räknare)))))) Värdera en lista av spelplaner. (defun värdera-massor (spelplaner bricka räknare) (mapcar (lambda (plan) (värdera-spelplan plan bricka räknare)) spelplaner)) Ingång för att utvärde en spelplan. räknare-argumentet bestämmer hur djupt funktionen ska gå när den utvärderar möjliga spelplaner. (defun giv-bästa-flytt (spelplan bricka räknare) (let* ((möjliga (möjliga-flyttar spelplan bricka)) (spelplaner (möjliga-spelplaner spelplan möjliga bricka)) (värderingar (värdera-massor spelplaner bricka räknare))) (format t "värderingar: ~A, räknare: ~A~%" värderingar räknare) ; (format t "FICK DENNA SPELPLAN: ~%") ; (skriv-spelplan spelplan (skapa-flyttar)) ; (format t "GICK IGENOM DESSA SPELPLANER: ~%") ; (mapc (lambda (plan) (skriv-spelplan plan (skapa-flyttar))) spelplaner) (nth (position (reduce #'max värderingar) värderingar) möjliga))) (defun skapa-bricka (namn) "symbol -> bricka" (typkontroll namn #'symbolp) (packa-ihop 'bricka namn)) (defun bricka? (objekt) "lisp-objekt -> sanningsvärde" (eq (typ objekt) 'bricka)) (defun bricka-typ (bricka) "bricka -> symbol" (typkontroll bricka #'bricka?) (packa-upp bricka)) (defun samma-bricka? (b1 b2) "bricka x bricka -> sanningsvärde" (if (eq (bricka-typ b1) (bricka-typ b2)) t nil))

3 allt.cl Page 3 of 17 (defun annan-bricka (bricka) "bricka -> bricka" (typkontroll bricka #'bricka?) (if (bricka-vit? bricka) (skapa-bricka 'svart) (skapa-bricka 'vit))) (defun bricka-svart? (bricka) "bricka -> sanningsvärde" (typkontroll bricka #'bricka?) (eq (bricka-typ bricka) 'svart)) (defun bricka-vit? (bricka) "bricka -> sanningsvärde" (typkontroll bricka #'bricka?) (eq (bricka-typ bricka) 'vit)) (defun ingen-bricka? (bricka) (null bricka)) Samma-bricka? med rutiner för att kontrollera ifall någon bricka inte är en bricka (t ex från en tom plats på spelplanen.) (defun säker-samma-bricka? (bricka1 bricka2) "bricka x bricka -> sanningsvärde" (if (or (ingen-bricka? bricka1) (ingen-bricka? bricka2)) nil (samma-bricka? bricka1 bricka2))) Standardfunktioner för typerna flytt och flyttar. (defun skapa-flytt (punkt) "punkt -> flytt" (typkontroll punkt #'punkt?) (packa-ihop 'flytt punkt)) (defun flytt? (objekt) "Lisp-objekt -> sanningsvärde" (eq (typ objekt) 'flytt)) (defun punkt (flytt) "flytt -> punkt" (typkontroll flytt #'flytt?) (packa-upp flytt)) (defun skapa-flyttar () "-> flyttar" (list)) (defun antal-flyttar (flyttar) "flyttar -> lisp-heltal" (length flyttar)) (defun lägg-ihop-flyttar (&rest flyttarlist) "flyttar x... x flyttar -> flyttar" (apply #'append flyttarlist)) (defun samma-flytt? (fl1 fl2) "flytt x flytt -> sanningsvärde" (samma-punkt? (punkt fl1) (punkt fl2))) (defun mapflyttar (flyttar fn) "flyttar x funktionsreferens -> flyttar" (mapcar fn flyttar)) (defun nth-flytt (nr flyttar) "flyttar -> flytt" (nth nr flyttar)) (defun filtrera-bort-flytt (flyttar flytt) "flyttar x flytt -> flyttar" (remove-if (lambda (e) (equal e flytt)) flyttar))

4 allt.cl Page 4 of 17 (defun lägg-till-flytt (flyttar flytt) "flyttar x flytt -> flyttar" (cons flytt flyttar)) (defun första-flytt (flyttar) "flyttar -> flytt" (first flyttar)) (defun resten-flyttar (flyttar) "flyttar -> flyttar" (rest flyttar)) (defun tom-flyttar? (flyttar) "flyttar -> sanningsvärde" (endp flyttar)) Kollar ifall en flyttar innehåller en viss flytt. (defun flyttar-innehåller? (flyttar flytt) "flyttar x flytt -> sanningsvärde" (member-if (lambda (e) (equal e flytt)) flyttar)) En funktion som rensar ut alla dubletter ur en flyttar. (defun unika-flyttar (lista) "flyttar -> flyttar" (if (endp (rest lista)) lista (reduce (lambda (x y) (if (listp (first x)) (if (find-if (lambda (e) (samma-flytt? e y)) x) x (cons y x)) (if (samma-flytt? x y) (list x) (list x y)))) lista))) (setf alfabet " ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ") Flyttindex är en kvasityp som egentligen bara är ett heltal. (defun flyttindex-från-beteckning (beteckning flyttar) "lisp-sträng x flyttar -> lisp-heltal" (if (equal beteckning "") (random (antal-flyttar flyttar)) (search (format nil "~a" beteckning) alfabet))) På stora planer kan mängder möjliga flyttar bli för lång (för vårt alfabet) den här funktionen begränsar antalet till längden av alfabetet. (defun begränsa-flyttar (flyttar) "flyttar -> flyttar" (if (> (length flyttar) (length alfabet)) (subseq flyttar 0 (length alfabet)) flyttar)) (defun fråga-efter-spelplan () "-> spelplan" (skapa-spelplan-med-brickor (fråga-efter-nummer "Brädets bredd") (fråga-efter-nummer "Brädets höjd"))) (defun fråga-efter-spelare (antal bricktyp) "Lisp-nummer x bricktyp -> spelarlista" (let ((nybricktyp (if (bricka-vit? bricktyp) (skapa-bricka 'svart) (skapa-bricka 'vit)))) (if (= antal 0) (skapa-spelarlista) (lägg-till-spelare (fråga-efter-spelare (- antal 1) nybricktyp) (funcall (fråga-efter-spelartyp (börja-spelar-input nybricktyp)) (fråga-efter-spelarnamn nybricktyp) bricktyp)))))

5 allt.cl Page 5 of 17 (defun fråga-efter-spelarnamn (bricktyp) "bricka -> lisp-sträng" (fråga-efter-sträng "Spelarnamn")) (defun fråga-efter-spelartyp (x) "-> funktion" (let ((funktion (skapnings-funktion-från-spelartypssträng (fråga-efter-sträng "Spelartyp")))) (if funktion funktion (progn (format t "Felaktig spelartyp. Måste vara m[änniska], d[ator] eller s[lump].~%") (fråga-efter-spelartyp x))))) (defun skapnings-funktion-från-spelartypssträng (sträng) "lisp-sträng -> funktionsreferens" (case (char sträng 0) (#\m #'skapa-mänsklig-spelare) (#\d #'skapa-ai-spelare) (#\s #'skapa-slump-spelare))) Deklamera vinnaren. (defun presentera-vinnare (vinnarbricka) "bricka ->" (if (eq vinnarbricka 'oavgjort) (format t "Det blev oavgjort!~%") (format t "~a vann. Grattis!~%" (färgnamn-från-bricka vinnarbricka))))... (defun börja-spelar-input (bricktyp) "bricka ->" (sätt-färger-för-bricka bricktyp) (format t "Spelare ~a:~%" (färgnamn-från-bricka bricktyp)) (återställ-färger)) Skriver ut det kosmetiska för en rad. (defun skriv-radhuvud (storlek) "Lisp-heltal ->" (sätt-standardfärger) (dotimes (i storlek) (format t "+---")) (format t "+") (återställ-färger) (terpri)) Skriv ut en bricka. (defun skriv-bricka (bricka) "bricka ->" (skriv-vertikal-kant) (if bricka (progn (sätt-bakgrund (färg-från-bricka bricka)) (sätt-förgrund (färg-från-bricka bricka))) (sätt-standardfärger)) (skriv-tecken (if (ingen-bricka? bricka) " " (if (bricka-svart? bricka) "X" "O"))) (återställ-färger)) (defun skriv-vertikal-kant () "->" (sätt-standardfärger) (princ " ") (återställ-färger)) (defun skriv-tecken (whatever) "Lisp-objekt ->" (format t " ~a " whatever)) Skriv ut en hel spelplan med de möjliga flyttarna integrerad.

6 allt.cl Page 6 of 17 (defun skriv-spelplan (spelplan möjliga-flyttar) "spelplan x flyttar ->" (setf flytträknare 0) (dotimes (rad (rader spelplan)) (skriv-radhuvud (kolumner spelplan)) (dotimes (kolumn (kolumner spelplan)) (if (flyttar-innehåller? möjliga-flyttar (skapa-flytt (skapa-punkt kolumn rad))) (progn (skriv-vertikal-kant) (sätt-standardfärger) (let ((pos (position-if (lambda (e) (samma-flytt? e (skapa-flytt (skapa-punkt kolumn rad)))) möjliga-flyttar))) (skriv-tecken (char alfabet pos))) (återställ-färger) (setf flytträknare (+ flytträknare 1))) (skriv-bricka (hämta-plats spelplan kolumn rad)) )) (skriv-vertikal-kant) (terpri)) (skriv-radhuvud (kolumner spelplan))) FRÅGOR (defun fråga-efter-sträng (fråga) "Lisp-sträng -> Lisp-sträng" (format t "~a: " fråga) (read-line t)) (defun fråga-efter-nummer (fråga) "Lisp-sträng -> Lisp-heltal" (format t "~a: " fråga) (let ((värde (read t))) (if (numberp värde) värde (progn (format t "Felaktigt tal! Försök igen.~%") (fråga-efter-nummer fråga))))) FÄRG Färg i terminalen enligt ANSI terminal codes-standarden. Ifall använd-färg är satt kommer dessa funktioner köras, annars avbryter de. (defun sätt-bakgrund (färg) "symbol ->" (if (not använd-färg) (return-from sätt-bakgrund)) (format t "~A[~Am" (code-char 27) (cond ((eq färg 'svart) 40) ((eq färg 'röd) 41) ((eq färg 'grön) 42) ((eq färg 'gul) 43) ((eq färg 'blå) 44) ((eq färg 'magenta) 45) ((eq färg 'cyan) 46) ((eq färg 'vit) 47)))) (defun sätt-förgrund (färg) "symbol ->" (if (not använd-färg) (return-from sätt-förgrund)) (format t "~A[~Am" (code-char 27) (cond ((eq färg 'svart) 30)

7 allt.cl Page 7 of 17 ((eq färg 'röd) 31) ((eq färg 'grön) 32) ((eq färg 'gul) 33) ((eq färg 'blå) 34) ((eq färg 'magenta) 35) ((eq färg 'cyan) 36) ((eq färg 'vit) 37)))) Ställ tillbaka terminalen till standardläget. (defun återställ-färger () "->" (if (not använd-färg) (return-from återställ-färger)) (format t "~A[0m" (code-char 27))) (defun färg-från-bricka (bricka) "bricka -> symbol" (if (bricka-svart? bricka) 'svart 'vit)) (defun färgnamn-från-bricka (bricka) "bricka -> symbol" (if (bricka-svart? bricka) "Svart" "Vit")) (defun textfärg-från-bricka (bricka) "bricka -> symbol" (if (bricka-svart? bricka) 'vit 'svart)) (defun sätt-färger-för-bricka (bricka) "bricka ->" (sätt-bakgrund (färg-från-bricka bricka)) (sätt-förgrund (textfärg-från-bricka bricka))) (defun sätt-standardförgrund () "->" (sätt-förgrund 'svart)) (defun sätt-standardbakgrund () "->" (sätt-bakgrund 'grön)) (defun sätt-standardfärger () "->" (sätt-standardförgrund) (sätt-standardbakgrund)) Grundläggande funktioner för typ- och felhantering. (defun packa-ihop (typ objekt) "abstrakt typ x Lisp-objekt -> abstrakt objekt" (cons typ objekt)) (defun packa-upp (objekt) "abstrakt objekt -> Lisp-objekt" (if (consp objekt) (cdr objekt))) (defun typ (objekt) "abstrakt objekt -> almanackstyp" (if (consp objekt) (car objekt))) (defun typkontroll (värde predikat) (if (not (funcall predikat värde)) (error "~&Värdet ~a är av fel typ, predikat är ~a." värde predikat) t)) Snabbladda alla filer. (defun skapa-mänsklig-spelare (namn bricktyp) "Lisp-sträng x bricka -> spelare" (skapa-spelare #'mänskligt-drag namn bricktyp))

8 allt.cl Page 8 of 17 Ber skrivbords/terminal-spelaren om ett drag. (defun mänskligt-drag (spelplan spelare möjliga-flyttar) (let ((index (flyttindex-från-beteckning (string-upcase (kör-eventuell-debug (fråga-efter-sträng "Välj ett drag") spelplan)) möjliga-flyttar))) (if (and index (< index (antal-flyttar möjliga-flyttar))) (nth-flytt index möjliga-flyttar) (progn (format t "Felaktig flytt! Försök igen.~%") (mänskligt-drag spelplan spelare möjliga-flyttar))))) Othello Huvudfunktionen Ifall argumentet inte-färg sätts till t kommer den inte rita spelplanen i färger. (defun othello (&optional inte-färg) "sanningsvärde ->" (setf använd-färg (not inte-färg)) (format t "Othello!~%") (presentera-vinnare (spel-loop (skapa-spelarloop (fråga-efter-spelare 2(fråga-efter-nummer "Antal spelare") (skapa-bricka 'vit))) (fråga-efter-spelplan))) (values)) (defun spel-loop (spelarlista spelplan) "spelarlista x spelplan -> spelare" (let* ((spelare (första-spelare spelarlista)) (möjliga (möjliga-flyttar spelplan (bricktyp spelare)))) (skriv-spelplan spelplan möjliga) (format t "~a: ~a - ~a: ~a~%~%" (färgnamn-från-bricka (skapa-bricka 'svart)) (räkna-brickor spelplan (skapa-bricka 'svart)) (färgnamn-från-bricka (skapa-bricka 'vit)) (räkna-brickor spelplan (skapa-bricka 'vit))) (sätt-bakgrund (färg-från-bricka (bricktyp spelare))) (sätt-förgrund (textfärg-från-bricka (bricktyp spelare))) (if (tom-flyttar? möjliga) (progn (format t "~a kan inte lägga och passar!" (spelarnamn spelare)) (återställ-färger) (terpri)) (progn (format t "Det är ~a tur." (spelare-genetiv-namn spelare)) (återställ-färger) (terpri) (gör-flytt spelare spelplan möjliga))) (if (or (har-någon-vunnit? spelplan) (and (tom-flyttar? möjliga) (tom-flyttar? (möjliga-flyttar spelplan (annan-bricka (bricktyp spelare)))))) (vem-leder? spelplan) (spel-loop (resten-spelare spelarlista) spelplan)))) (defun skapa-punkt (x y) "Lisp-heltal x Lisp-heltal -> punkt" (typkontroll x #'numberp) (typkontroll y #'numberp) (packa-ihop 'punkt (list x y))) (defun punkt? (objekt) "Lisp-objekt -> sanningsvã rde" (eq (typ objekt) 'punkt))

9 allt.cl Page 9 of 17 Funktionerna x och y skall inte användas. (defun x (punkt) (kolumn punkt)) (defun kolumn (punkt) "punkt -> Lisp-heltal" (typkontroll punkt #'punkt?) (first (packa-upp punkt))) (defun y (punkt) (rad punkt)) (defun rad (punkt) "punkt -> Lisp-heltal" (typkontroll punkt #'punkt?) (second (packa-upp punkt))) Testa ifall två punkter är samma. (defun samma-punkt? (punkt1 punkt2) "punkt x punkt -> sanningsvärde" (and (= (kolumn punkt1) (kolumn punkt2)) (= (rad punkt1) (rad punkt2)))) (defun riktning? (objekt) (find objekt (möjliga-riktningar))) (defun möjliga-riktningar () '(över-vänster över över-höger vänster höger under-vänster under under-höger)) Kringfunktioner till typen spelare Validator (defun spelare? (objekt) "Lisp-objekt -> sanningsvärde" (eq 'spelare (typ objekt))) Selector (defun gör-flytt-funktion (spelare) "spelare -> Lisp-funktionsref" (typkontroll spelare #'spelare?) (first (packa-upp spelare))) (defun spelarnamn (spelare) "spelare -> sträng" (typkontroll spelare #'spelare?) (second (packa-upp spelare))) (defun bricktyp (spelare) "spelare -> bricka" (typkontroll spelare #'spelare?) (third (packa-upp spelare))) (defun spelare-genetiv-namn (spelare) "spelare -> Lisp-sträng" (if (or (eq (char (spelarnamn spelare) (- (length (spelarnamn spelare)) 1)) #\S) (eq (char (spelarnamn spelare) (- (length (spelarnamn spelare)) 1)) #\s)) (spelarnamn spelare) (concatenate 'string (spelarnamn spelare) "s"))) Creator (defun skapa-spelare (fref namn bricktyp) "Lisp-funktionsreferens x sträng x bricka -> spelare" (typkontroll fref #'functionp) (typkontroll namn #'stringp) (typkontroll bricktyp #'bricka?) (packa-ihop 'spelare (list fref namn bricktyp))) Hjälpfunktioner Tar en spelare och plockar ut flytt-funktionen och gör sedan

10 allt.cl Page 10 of 17 en flytt på en spelplan. (defun gör-flytt (spelare plan möjliga) "spelare x spelplan -> spelplan" (lägg-flytt plan (funcall (gör-flytt-funktion spelare) plan spelare möjliga) (bricktyp spelare))) En typ som är till för spelloopen. Kan innehålla ett godtyckligt antal spelare. (defun skapa-spelarlista () "-> spelarlista" (packa-ihop 'spelarlista ())) (defun spelarlista? (objekt) "Lisp-objekt -> sanningsvärde" (eq (typ objekt) 'spelarlista)) (defun lägg-till-spelare (spelarlista spelare) "spelarlista x spelare -> spelarlista" (typkontroll spelarlista 'spelarlista?) (packa-ihop 'spelarlista (append (packa-upp spelarlista) (list spelare)))) (defun första-spelare (spelarlista) "spelarlista -> spelare" (first (packa-upp spelarlista))) (defun resten-spelare (spelarlista) "spelarlista -> spelarlista" (packa-ihop 'spelarlista (rest (packa-upp spelarlista)))) Koppla sista elementet i spelarlistan till det första och få en "oändlig" lista. (defun skapa-spelarloop (spelarlista) "spelarlista -> spelarlista" (packa-ihop 'spelarlista (setf (rest (last (packa-upp spelarlista))) (packa-upp spelarlista)))) Validator (defun spelplan? (objekt) "Lisp-objekt -> sanningsvärde" (eq 'spelplan (typ objekt))) (defun tom-plats? (spelplan kolumn rad) (if (null (hämta-plats spelplan kolumn rad)) t nil)) Selector (defun kolumner (spelplan) "spelplan -> heltal" (first (array-dimensions (matris spelplan)))) (defun rader (spelplan) "spelplan -> heltal" (second (array-dimensions (matris spelplan)))) (defun ändra-plats (spelplan kolumn rad värde) "spelplan x heltal x heltal x bricktyp ->" (setf (aref (matris spelplan) kolumn rad) värde) spelplan) (defun hämta-plats (spelplan kolumn rad) "spelplan x heltal x heltal -> bricka" (aref (matris spelplan) kolumn rad)) (defun hämta-plats-punkt (spelplan punkt) "spelplan x punkt -> bricka" (aref (matris spelplan) (kolumn punkt) (rad punkt)))

11 allt.cl Page 11 of 17 hämta-plats med rutiner för att kolla att man inte läser utanför spelplanen, i så fall returnerar den symbolen UTANFÖR. (defun säker-hämta-plats (spelplan punkt) "spelplan x punkt -> bricka" (typkontroll punkt #'punkt?) (let ((kolumn (kolumn punkt)) (rad (rad punkt))) (if (or (> (1+ kolumn) (kolumner spelplan)) (> (1+ rad) (rader spelplan)) (< kolumn 0) (< rad 0)) 'utanför (hämta-plats spelplan kolumn rad)))) (defun utanför? (obj) "lisp-objekt -> sanningsvärde" (equal obj 'utanför)) (defun matris (spelplan) "spelplan -> Lisp-array" (packa-upp spelplan)) Creator (defun skapa-spelplan (kolumner rader) "heltal x heltal -> spelplan" (typkontroll kolumner #'numberp) (typkontroll rader #'numberp) (packa-ihop 'spelplan (make-array (list kolumner rader)))) (defun skapa-spelplan-med-brickor (kolumner rader) (let* ((spelplan (skapa-spelplan kolumner rader)) (basx (floor (1- (/ (kolumner spelplan) 2)))) (basy (floor (1- (/ (rader spelplan) 2))))) (ändra-plats spelplan basx basy (skapa-bricka 'svart)) (ändra-plats spelplan (1+ basx) basy (skapa-bricka 'vit)) (ändra-plats spelplan basx (1+ basy) (skapa-bricka 'vit)) (ändra-plats spelplan (1+ basx) (1+ basy) (skapa-bricka 'svart)) spelplan)) Algoritmer (defun kan-inte-bricka-lägga? (spelplan bricka) (tom-flyttar? (möjliga-flyttar spelplan bricka))) (defun är-spelplan-full? (spelplan) "spelplan -> sanningsvärde" (dotimes (y (rader spelplan)) (dotimes (x (kolumner spelplan)) (if (tom-plats? spelplan x y) (return-from är-spelplan-full? nil)))) t) Finns en viss bricka på spelplanen? (defun finns-bricka? (spelplan bricka) "spelplan x bricka -> sanningsvärde" (dotimes (y (rader spelplan)) (dotimes (x (kolumner spelplan)) (let ((pbricka (hämta-plats spelplan x y))) (if (and (not (tom-plats? spelplan x y)) (samma-bricka? bricka pbricka)) (return-from finns-bricka? t))))) nil) Utvärderar om någon har vunnit eller ej. (defun har-någon-vunnit? (spelplan) "spelplan -> sanningsvärde" (if (är-spelplan-full? spelplan) t (not (and

12 allt.cl Page 12 of 17 (finns-bricka? spelplan (skapa-bricka 'svart)) (finns-bricka? spelplan (skapa-bricka 'vit)))))) (defun räkna-brickor (spelplan bricka) "spelplan x bricka -> lisp-heltal" (let ((tal 0)) (dotimes (y (rader spelplan)) (dotimes (x (kolumner spelplan)) (let ((pbricka (hämta-plats spelplan x y))) (if (and (not (tom-plats? spelplan x y)) (samma-bricka? bricka pbricka)) (setf tal (1+ tal)))))) tal)) Ger tillbaka vilken bricka som leder på en spelplan. (defun vem-leder? (spelplan) "spelplan -> bricka" (let ((vita-brickor (räkna-brickor spelplan (skapa-bricka 'vit))) (svarta-brickor (räkna-brickor spelplan (skapa-bricka 'svart)))) (if (= vita-brickor svarta-brickor) 'oavgjort (if (> vita-brickor svarta-brickor) (skapa-bricka 'vit) (skapa-bricka 'svart))))) (defun punkter-av-bricktyp (spelplan bricktyp) "spelplan x bricka -> lisp-lista av punkt" (let ((punkter (list))) (dotimes (y (rader spelplan)) (dotimes (x (kolumner spelplan)) (let ((pbricka (hämta-plats spelplan x y))) (if (and (not (tom-plats? spelplan x y)) (samma-bricka? pbricka bricktyp)) (setq punkter (cons (skapa-punkt x y) punkter)))))) punkter)) Returnerar en flyttar med motspelare som ligger bredvid punkt som är en bricka. (defun motspelare-bredvid (spelplan bricka punkt) "spelplan x bricka x punkt -> flyttar" (let* ((p-över-vänster (punkt-i-riktning punkt 'över-vänster)) (över-vänster (säker-hämta-plats spelplan p-över-vänster)) (p-över (punkt-i-riktning punkt 'över)) (över (säker-hämta-plats spelplan p-över)) (p-över-höger (punkt-i-riktning punkt 'över-höger)) (över-höger (säker-hämta-plats spelplan p-över-höger)) (p-vänster (punkt-i-riktning punkt 'vänster)) (vänster (säker-hämta-plats spelplan p-vänster)) (p-höger (punkt-i-riktning punkt 'höger)) (höger (säker-hämta-plats spelplan p-höger)) (p-under-vänster (punkt-i-riktning punkt 'under-vänster)) (under-vänster (säker-hämta-plats spelplan p-under-vänster)) (p-under (punkt-i-riktning punkt 'under)) (under (säker-hämta-plats spelplan p-under)) (p-under-höger (punkt-i-riktning punkt 'under-höger)) (under-höger (säker-hämta-plats spelplan p-under-höger))) (lägg-ihop-flyttar (if (and över-vänster (not (utanför? över-vänster)) (not (samma-bricka? bricka över-vänster))) (lägg-till-flytt (skapa-flyttar) (skapa-flytt p-över-vänster)) (skapa-flyttar)) (if (and över (not (utanför? över)) (not (samma-bricka? bricka över))) (lägg-till-flytt (skapa-flyttar) (skapa-flytt p-över)) (skapa-flyttar)) (if (and över-höger (not (utanför? över-höger)) (not (samma-bricka? bricka över-höger))) (lägg-till-flytt (skapa-flyttar) (skapa-flytt p-över-höger)) (skapa-flyttar)) (if (and vänster

13 allt.cl Page 13 of 17 (not (utanför? vänster)) (not (samma-bricka? bricka vänster))) (lägg-till-flytt (skapa-flyttar) (skapa-flytt p-vänster)) (skapa-flyttar)) (if (and höger (not (utanför? höger)) (not (samma-bricka? bricka höger))) (lägg-till-flytt (skapa-flyttar) (skapa-flytt p-höger)) (skapa-flyttar)) (if (and under-vänster (not (utanför? under-vänster)) (not (samma-bricka? bricka under-vänster))) (lägg-till-flytt (skapa-flyttar) (skapa-flytt p-under-vänster)) (skapa-flyttar)) (if (and under (not (utanför? under)) (not (samma-bricka? bricka under))) (lägg-till-flytt (skapa-flyttar) (skapa-flytt p-under)) (skapa-flyttar)) (if (and under-höger (not (utanför? under-höger)) (not (samma-bricka? bricka under-höger))) (lägg-till-flytt (skapa-flyttar) (skapa-flytt p-under-höger)) (skapa-flyttar))))) Vilken punkt ligger RIKTNING från PUNKT? (defun punkt-i-riktning (punkt riktning) "punkt x riktning -> punkt" (typkontroll punkt #'punkt?) (typkontroll riktning #'riktning?) (let* ((kolumn (kolumn punkt)) (rad (rad punkt)) (över-vänster (skapa-punkt (1- kolumn) (1- rad))) (över (skapa-punkt kolumn (1- rad))) (över-höger (skapa-punkt (1+ kolumn) (1- rad))) (vänster (skapa-punkt (1- kolumn) rad)) (höger (skapa-punkt (1+ kolumn) rad)) (under-vänster (skapa-punkt (1- kolumn) (1+ rad))) (under (skapa-punkt kolumn (1+ rad))) (under-höger (skapa-punkt (1+ kolumn) (1+ rad)))) (case riktning (över-vänster över-vänster) (över över) (över-höger över-höger) (vänster vänster) (höger höger) (under-vänster under-vänster) (under under) (under-höger under-höger)))) Vart får man flytta? Villkor: 1. Måste vara bredvid en bricka av motståndarens färg. Som bredvid gills vertikalt, horisontalt och diagonalt. 2. Om så måste det finnas en bricka av ens egen färg efter motståndarens bricka(or). (defun möjlig-flytt? (spelplan flytt bricktyp) "spelplan x flytt x bricka -> sanningsvärde" (let ((punkt (punkt flytt))) (and (null (hämta-plats-punkt spelplan punkt)) (not (tom-flyttar? (motspelare-bredvid spelplan bricktyp punkt))) (finns-bricka-i-någon-riktning? spelplan bricktyp punkt)))) Punkten är ens egen bricka på planen. Bricktyp är ens egen bricktyp. (defun flyttar-runt-punkt (spelplan punkt bricktyp) "spelplan x punkt x bricka -> flyttar" (finns-tom-i-någon-riktning? spelplan bricktyp punkt)) Leta möjliga flyttar som en viss bricka kan lägga på en spelplan. Använder två algoritmer för att vara så effektiv som möjligt. (defun möjliga-flyttar (spelplan bricktyp)

14 allt.cl Page 14 of 17 (let* ((vita (räkna-brickor spelplan (skapa-bricka 'vit))) (svarta (räkna-brickor spelplan (skapa-bricka 'svart))) (kvot (/ (+ vita svarta) (* (kolumner spelplan) (rader spelplan))))) (begränsa-flyttar (unika-flyttar (if (> kvot 0.65) (tom-möjliga-flyttar spelplan bricktyp) (början-möjliga-flyttar spelplan bricktyp)))))) En algoritm för att leta möjliga flyttar som är bäst i början, när inte så många brickor lagts ut. (defun början-möjliga-flyttar (spelplan bricktyp) "spelplan x bricka -> flyttar" (setq flyttar (skapa-flyttar)) (let ((punkter (punkter-av-bricktyp spelplan bricktyp))) (dotimes (i (length punkter)) (let ((möjliga-flyttar (flyttar-runt-punkt spelplan (nth i punkter) bricktyp))) (if (not (tom-flyttar? möjliga-flyttar)) (setq flyttar (lägg-ihop-flyttar flyttar möjliga-flyttar)))))) flyttar) En algoritm för att leta möjliga flyttar som är bäst när det finns få tomma rutor. (defun tom-möjlig-flytt? (spelplan flytt bricktyp) "spelplan x flytt x bricka -> sanningsvärde" (let ((punkt (punkt flytt))) (and (null (hämta-plats-punkt spelplan punkt)) (not (tom-flyttar? (motspelare-bredvid spelplan bricktyp punkt))) (finns-bricka-i-någon-riktning? spelplan bricktyp punkt)))) (defun tom-möjliga-flyttar (spelplan bricktyp) "spelplan -> flyttar" (setq flyttar (skapa-flyttar)) (dotimes (rad (rader spelplan)) (dotimes (kolumn (kolumner spelplan)) (let ((flytt (skapa-flytt (skapa-punkt kolumn rad)))) (if (tom-möjlig-flytt? spelplan flytt bricktyp) (setq flyttar (lägg-till-flytt flyttar flytt)))))) flyttar) AI-relaterat (defun kopiera-spelplan (spelplan) "spelplan -> spelplan" (let* ((array (packa-upp spelplan)) (dims (array-dimensions array))) (packa-ihop 'spelplan (adjust-array (make-array dims :displaced-to array) dims)))) Kopiera en spelplan och lägg en flytt på den. (defun kopierad-spelplan-med-flytt (spelplan bricktyp flytt) "spelplan x bricka x flytt -> spelplan" (lägg-flytt (kopiera-spelplan spelplan) flytt bricktyp)) Utläggning Funktionen finns-bricka-i-riktning kollar om det finns en egen bricka i en viss riktning, med minst en annan bricktyp och inget tomrum mellan. (defun finns-bricka-i-riktning-intern (spelplan bricktyp punkt riktning skippa räknare) "spelplan x bricka x punkt x riktningssymbol x sanningsvärde -> punkt eller nil"

15 allt.cl Page 15 of 17 (let ((bricka (säker-hämta-plats spelplan punkt))) (cond ((and (not skippa) (null bricka)) nil) ((and (utanför? bricka) (not skippa)) nil) ((and (not skippa) (samma-bricka? bricka bricktyp)) (if (> räknare 1) punkt nil)) (t (finns-bricka-i-riktning-intern spelplan bricktyp (punkt-i-riktning punkt riktning) riktning nil (1+ räknare)))))) Finns en viss bricka i en viss riktning? (defun finns-bricka-i-riktning (spelplan bricktyp punkt riktning) (finns-bricka-i-riktning-intern spelplan bricktyp punkt riktning t 0)) (defun finns-bricka-i-någon-riktning-intern (spelplan bricktyp punkt riktningar) (if (endp riktningar) nil (let* ((riktning (first riktningar)) (destpunkt (finns-bricka-i-riktning spelplan bricktyp punkt riktning))) (if destpunkt t (finns-bricka-i-någon-riktning-intern spelplan bricktyp punkt (rest riktningar)))))) (defun finns-bricka-i-någon-riktning? (spelplan bricktyp punkt) (fbinr-intern spelplan bricktyp punkt (möjliga-riktningar))) (defun finns-tom-i-riktning-intern (spelplan bricktyp punkt riktning räknare) "spelplan x bricka x punkt x riktningssymbol x sanningsvärde -> punkt eller nil" (typkontroll spelplan #'spelplan?) (typkontroll bricktyp #'bricka?) (typkontroll punkt #'punkt?) (typkontroll riktning #'riktning?) (let ((bricka (säker-hämta-plats spelplan punkt))) (cond ((utanför? bricka) nil) ((and (> räknare 0) bricka (samma-bricka? bricka bricktyp)) nil) ((and (> räknare 1) (null bricka)) punkt) ((null bricka) nil) (t (finns-tom-i-riktning-intern spelplan bricktyp (punkt-i-riktning punkt riktning) riktning (1+ räknare)))))) Finns det en tom bricka i en viss riktning svarar denna på. (defun finns-tom-i-riktning (spelplan bricktyp punkt riktning) "spelplan x bricka x punkt x riktning -> punkt eller sanningsvärde (nil)" (finns-tom-i-riktning-intern spelplan bricktyp punkt riktning 0)) (defun finns-tom-i-någon-riktning-intern (spelplan bricktyp punkt riktningar) "spelplan x bricka x punkt x lisp-lista av riktning -> sanningsvärde" (if (endp riktningar) (skapa-flyttar) (let* ((riktning (first riktningar)) (destpunkt (finns-tom-i-riktning spelplan bricktyp punkt riktning))) (if destpunkt (lägg-till-flytt (finns-tom-i-någon-riktning-intern spelplan bricktyp punkt (rest riktningar)) (skapa-flytt destpunkt)) (finns-tom-i-någon-riktning-intern spelplan bricktyp punkt (rest riktningar)))))) Bricktypen är ens egen bricktyp och punkten

16 allt.cl Page 16 of 17 är ens egen punkt. Returnerar flyttar. (defun finns-tom-i-någon-riktning? (spelplan bricktyp punkt) "spelplan x bricka x punkt -> flyttar" (finns-tom-i-någon-riktning-intern spelplan bricktyp punkt (möjliga-riktningar))) Lägg-flytt tar en flytt (punkt) och lägger brickor mellan den och alla andra lämpliga. (defun lägg-flytt-intern (spelplan flytt bricktyp riktningar) "spelplan x flytt x bricka x riktning -> spelplan" (if (endp riktningar) nil (let* ((riktning (first riktningar)) (destpunkt (finns-bricka-i-riktning spelplan bricktyp (punkt flytt) riktning))) (if destpunkt (lägg-mellan spelplan bricktyp (punkt flytt) destpunkt) nil) (lägg-flytt-intern spelplan flytt bricktyp (rest riktningar)))) spelplan) (defun lägg-flytt (spelplan flytt bricktyp) (lägg-flytt-intern spelplan flytt bricktyp (möjliga-riktningar))) ; Funktionen ett-i-rätt-riktning returnerar to-from, fast mellan -1 och 1. (defun ett-i-rätt-riktning (from to) (/ (- to from) (if (= (- to from) 0) 1 (abs (- to from))))) Lägger brickor av färg bricktyp mellan två punkter. (defun lägg-mellan (spelplan bricktyp punkt1 punkt2) (let* ( (k1 (kolumn punkt1)) (k2 (kolumn punkt2)) (r1 (rad punkt1)) (r2 (rad punkt2)) (nästap (skapa-punkt (+ k1 (ett-i-rätt-riktning k1 k2)) (+ r1 (ett-i-rätt-riktning r1 r2))))) (progn (ändra-plats spelplan k1 r1 bricktyp) (if (samma-punkt? punkt1 punkt2) t (lägg-mellan spelplan bricktyp nästap punkt2))))) Fus... eh, debug. (defun byt-brickor (spelplan) (dotimes (kolumn (kolumner spelplan)) (dotimes (rad (rader spelplan)) (let ((bricka (hämta-plats spelplan kolumn rad))) (if bricka (ändra-plats spelplan kolumn rad (annan-bricka (hämta-plats spelplan kolumn rad)))))))) (defun kör-eventuell-debug (sträng spelplan) (if (equal sträng "kazul!") (byt-brickor spelplan)) sträng) Räknar antal kantbrickor resp. hörnbrickor som en bricka har på en spelplan: (defun antal-kantbrickor (spelplan bricktyp) "spelplan x bricka -> lisp-heltal" (let ((antal 0)) (dotimes (kolumn (- (kolumner spelplan) 2)) (if (säker-samma-bricka? bricktyp (hämta-plats spelplan (1+ kolumn) 1)) (setf antal (1+ antal)))

17 allt.cl Page 17 of 17 (if (säker-samma-bricka? bricktyp (hämta-plats spelplan (1+ kolumn) (1- (rader spelplan)))) (setf antal (1+ antal)))) (dotimes (rad (- (rader spelplan) 2)) (if (säker-samma-bricka? bricktyp (hämta-plats spelplan 1 (1+ rad))) (setf antal (1+ antal))) (if (säker-samma-bricka? bricktyp (hämta-plats spelplan (1- (kolumner spelplan)) (1+ rad))) (setf antal (1+ antal)))) antal)) (defun antal-hörnbrickor (spelplan bricktyp) "spelplan x bricka -> lisp-heltal" (let ((antal 0)) (if (säker-samma-bricka? bricktyp (hämta-plats spelplan 0 0)) (setf antal (1+ antal))) (if (säker-samma-bricka? bricktyp (hämta-plats spelplan 0 (1- (rader spelplan)))) (setf antal (1+ antal))) (if (säker-samma-bricka? bricktyp (hämta-plats spelplan (1- (kolumner spelplan)) 0)) (setf antal (1+ antal))) (if (säker-samma-bricka? bricktyp (hämta-plats spelplan (1- (kolumner spelplan)) (1- (rader spelplan)))) (setf antal (1+ antal))) antal)) # (setf standard '(SPELPLAN. #2A((NIL NIL NIL NIL NIL NIL NIL NIL) (NIL NIL NIL NIL NIL NIL NIL NIL) (NIL NIL NIL NIL NIL NIL NIL NIL) (NIL NIL NIL (BRICKA. SVART) (BRICKA. VIT) NIL NIL NIL) (NIL NIL NIL (BRICKA. VIT) (BRICKA. SVART) NIL NIL NIL) (NIL NIL NIL NIL NIL NIL NIL NIL) (NIL NIL NIL NIL NIL NIL NIL NIL) (NIL NIL NIL NIL NIL NIL NIL NIL)))) (setf vit (skapa-bricka 'vit)) (setf svart (skapa-bricka 'svart)) (setf test1 '(SPELPLAN. #2A((NIL NIL NIL) (NIL (bricka. svart) NIL) (NIL (BRICKA. svart) (BRICKA. vit))))) (setf test2 '(SPELPLAN. #2A((NIL NIL NIL) (NIL (bricka. svart) NIL) (NIL (bricka. vit) (bricka. svart)) (NIL NIL NIL)))) (setf test3 '(SPELPLAN. #2A((NIL NIL NIL NIL NIL) (NIL (bricka. svart) (bricka. vit) NIL NIL) (NIL NIL NIL NIL NIL) (NIL NIL (bricka. svart) NIL NIL) (NIL NIL (bricka. vit) NIL NIL)))) (skriv-spelplan test3 (skapa-flyttar)) # (proclaim '(optimize (speed 3) (safety 1) (space 0) (debug 0)))

Uppgift 6A - Frekvenstabell

Uppgift 6A - Frekvenstabell Uppgift 6A - Frekvenstabell (defstruct par element antal) (defun unika-element (lista) (reduce #'(lambda (x y) (if (listp x) (if (find y x) x (cons y x)) (if (eq x y) x (list x y)))) lista)) (defun sortera-tabell

Läs mer

Projektdokumentation för Othello

Projektdokumentation för Othello Projektdokumentation för Gustav Fransson Nyvell gusfr229@student.liu.se Tomas Franzén tomfr819@student.liu.se 1. Inledning Vi har gjort ett -spel som går ut på att man turas om att lägga brickor på en

Läs mer

Uppgift 4A - Definition av enkla funktioner

Uppgift 4A - Definition av enkla funktioner Uppgift 4A - Definition av enkla funktioner (defun start-klockslag (tidsperiod) "tidsperiod -> klockslag" (typkontroll tidsperiod #'tidsperiod?) (first (packa-upp tidsperiod))) (defun slut-klockslag (tidsperiod)

Läs mer

Dagens föreläsning Programmering i Lisp Fö 5

Dagens föreläsning Programmering i Lisp Fö 5 Anders Haraldsson 1 Dagens föreläsning Programmering i Lisp Fö 5 - Funktioner - lambda-uttryck (avs 7.1) - funcall och function (avs 7.2) - Högre ordningens funktioner (avs 7.3) - Iteratorer - Egenskaper

Läs mer

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2 Anders Haraldsson 1 Anders Haraldsson 2 Dagens föreläsning Programmering i Lisp Fö 5 - Funktioner - lambda-uttryck (avs 7.1) - funcall och function (avs 7.2) - Högre ordningens funktioner (avs 7.) - Iteratorer

Läs mer

Tentamen i. TDDC67 Funktionell programmering och Lisp

Tentamen i. TDDC67 Funktionell programmering och Lisp 1 Linköpings tekniska högskola Institutionen för datavetenskap Anders Haraldsson Tentamen i TDDC67 Funktionell programmering och Lisp och äldre kurser TDDC57 Programmering, Lisp och funktionell programmering

Läs mer

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

Imperativ programmering. Imperativ programmering konstruktioner i Lisp. Datastrukturer (kap ) arraystruktur poststruktur Imperativ programmering konstruktioner i Lisp Imperativ programmering I den imperativa programmeringen skriver vi program satsvist. Datastrukturer (kap.-.) aystruktur poststruktur Iterativa uttryck (avs.)

Läs mer

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

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning 1 Dagens föreläsning Programmering i Lisp - Block, räckvidd - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning - Felhantering (kap 17) icke-normala återhopp catch

Läs mer

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 1 2 - Block, räckvidd Dagens föreläsning Programmering i Lisp - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning - Felhantering (kap 17) icke-normala återhopp catch

Läs mer

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TDDC74 Programmering, abstraktion och modellering DUGGA 2 AID-nummer: Datum: 2011-02-18 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering DUGGA 2 Fredag 18 feb 2011

Läs mer

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

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler 21-1-2 1 Dagens föreläsning Hur fungerar ett Lisp system intern struktur av symbolen, tal, listan pekare - delade strukturer - eq minneshantering fri lista - sophämtning/garbage collection stack Diverse

Läs mer

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)

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) Programmönster: # Listan som sekvens, Rekursiv process Enkel genomgång av sekvens (element på toppnivån i en lista)) TDDC60 Programmering: abstraktion och modellering Föreläsning 5 Rekursiva och iterativa

Läs mer

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?

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? Tidigare TDDC74 Programming: Abstraktion och modellering Föreläsning 4 Symboler, Par, Listor Representation av par, Grafisk notation för par Representation av listor mha par Typiska listhanteringsprocedurer

Läs mer

Rekursiva algoritmer sortering sökning mönstermatchning

Rekursiva algoritmer sortering sökning mönstermatchning Anders Haraldsson 1 Anders Haraldsson 2 Dagens föreläsning Programmering i Lisp Fö 6-7 Rekursiva strukturer rekursiva definitioner rekursiva funktioner rekursiva bevis: induktion - rekursion strukturell

Läs mer

TDDC74 Lab 02 Listor, sammansatta strukturer

TDDC74 Lab 02 Listor, sammansatta strukturer TDDC74 Lab 02 Listor, sammansatta strukturer 1 Översikt I denna laboration kommer ni att lära er mer om: Mer komplexa rekursiva mönster, procedurer och processer. Hur man kan hantera listor och andra enklare

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel 732G11 Linköpings universitet 2011-02-15 1 2 3 4 Extrapass Extrapass håller på att bokas. Blir 3-4 st. och öppet för alla. Mer info på kursmailen när bokningen är klar. i Java En funktion i Java... public

Läs mer

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

Idag: Par och listor. Scheme. DA2001 (Föreläsning 6) Datalogi 1 Hösten / 29 Idag: Par och listor DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 1 / 29 Idag: Par och listor Hur hanterar man icke-numeriska problem? DA2001 (Föreläsning 6) Datalogi 1 Hösten 2010 1 / 29 Idag: Par och

Läs mer

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

Idag: Par och listor. Symboler. Symboler används för att uttrycka icke-numeriska data såsom namn, adress, bilregisternummer, boktitel, osv. Idag: Par och listor Symboler Hur hanterar man icke-numeriska problem? Hur hanterar man en samling av data? Hur konstruerar man sammansatta datastrukturer? Bra om du har läst följande avsnitt i AS: Pair

Läs mer

TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15

TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15 TENTAMEN I PROGRAMSPRÅK -- DVG C01 140605 kl. 08:15-13:15 Ansvarig Lärare: Donald F. Ross Hjälpmedel: Bilaga A: BNF-definition Betygsgräns: Kurs: Max 60p, Med beröm godkänd 50p, Icke utan beröm godkänd

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Dugga 2, Tid: kl 08-10, Datum: TDDC74 Programmering: Abstraktion och modellering Dugga 2, Tid: kl 08-10, Skriv tydligt så att inte dina lösningar missförstås. Använd väl valda namn på parametrar och indentera din kod. Även om det i

Läs mer

Datalogi, grundkurs 1

Datalogi, grundkurs 1 Datalogi, grundkurs 1 Fiktiv Tentamen Lösningsförslag och kommentarer 1. Lösningsförslaget nedan förutsätter ingenting om filens innehåll och är alltså mer generell än nödvändigt: alfa= ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ

Läs mer

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen AID-nummer: Datum: 2012-01-10 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Tisdag 10 januari

Läs mer

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen AID-nummer: Datum: 2011-08-17 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Onsdag 17 augusti

Läs mer

Dagens föreläsning Programmering i Lisp Fö 7. Sammanfattning funktionell programmering Exempel på funktionella programspråk

Dagens föreläsning Programmering i Lisp Fö 7. Sammanfattning funktionell programmering Exempel på funktionella programspråk 1 Dagens föreläsning Programmering i Lisp Fö 7 Kopplingen funktionella programmering och diskret matematik. Jämför vad ni hittills gjort i denna kurs och i den diskreta matematiken, med referenser in i

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18 TDDC74 Programmering: Abstraktion och modellering Datortenta - 2018-06-07, kl 14-18 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis

Läs mer

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

Lösningsförslag. TDDC74 Programmering: Abstraktion och modellering. Dugga 3 (provkod TEN1), Tid: kl 14-16, Datum: Dugga 3 (provkod TEN1), Tid: kl 14-16, Datum: 2013-03-12 Lösningsförslag Dugga 3 (provkod TEN1), Tid: kl 14-16, Datum: 2013-03- 12 Läs alla frågorna först och bestäm dig för den ordning som passar dig

Läs mer

Genetisk programmering i Othello

Genetisk programmering i Othello LINKÖPINGS UNIVERSITET Första versionen Fördjupningsuppgift i kursen 729G11 2009-10-09 Genetisk programmering i Othello Kerstin Johansson kerjo104@student.liu.se Innehållsförteckning 1. Inledning... 1

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014 TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt. Använd

Läs mer

TDDC74 Programmering, abstraktion och modellering DUGGA 3

TDDC74 Programmering, abstraktion och modellering DUGGA 3 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering DUGGA 3 Torsdag 4 mars 2010 kl 8-10 Namn: Personnummer:

Läs mer

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000

Läs mer

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.

Läs mer

Fyra i rad Javaprojekt inom TDDC32

Fyra i rad Javaprojekt inom TDDC32 Fyra i rad Javaprojekt inom TDDC32 Analys och design-dokument Version 2.0 Datum 2008-05-19 Dokumentnummer 20080303 Sammanfattning Detta är analys och design-dokumentet för programmet Fyra i rad. Fyra i

Läs mer

Abstrakta datatyper. Dagens föreläsning. Abstract data types (ADT)

Abstrakta datatyper. Dagens föreläsning. Abstract data types (ADT) 1 2 Dagens föreläsning TDDC67 Funktionell programmering och Lisp Fö 8 och 9 Dataabstraktion - Abstrakta datatyper - datatypbeskrivning - datatyplikhet - sammansättningar av datatyper med sekvens, tupel,

Läs mer

Dagens föreläsning. TDDC67 Funktionell programmering och Lisp Fö 8 och 9

Dagens föreläsning. TDDC67 Funktionell programmering och Lisp Fö 8 och 9 1 Dagens föreläsning TDDC67 Funktionell programmering och Lisp Fö 8 och 9 Dataabstraktion - Abstrakta datatyper - datatypbeskrivning - datatyplikhet - sammansättningar av datatyper med sekvens, tupel,

Läs mer

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

Datalogi, grundkurs 1. Lösningsförslag till tentamen 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

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 08-12 TDDC74 Programmering: Abstraktion och modellering Datortenta - 2019-05-27, kl 08-12 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis

Läs mer

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

Symbolisk data. quote. (define a 1) (define b 2) (jacek johan david) (list a b) Symbolisk data (1 2 3 4) (a b c d) (jacek johan david) ((jacek "jacek@cs.lth.se") (johan "johang@cs.lth.se") (david "dat99dpe@ludat.lth.se")) ((anna 13) (per 11) (klas 9) (eva 4)) (+ (* 23 4) (/ y x))

Läs mer

Kort Sammanfattning av Schack MAS

Kort Sammanfattning av Schack MAS Kort Sammanfattning av Schack MAS Krister Ljung kljung@kth.se 6th April 2003 1 Bamse 1.1 Agenter 1.1.1 Bamse Bestämmer vilket drag som skall skickas till spelplanen. Har även nio öppningar att spela dom

Läs mer

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

Datalogi, grundkurs 1. Lösningsförslag till tentamen 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;

Läs mer

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 1 2 Dagens föreläsning En konstruktion i Common Lisp som möjliggör att man kan skapa ny Lisp-kod, som i sin tur beräknas. - makrobegreppet - makrofunktioner - special form - makrodefintion - backquote

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 5 mars 2015 TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 5 mars 2015 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt. Använd

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16 TDDC74 Programmering: Abstraktion och modellering Dugga 2, 207-04-06, kl 4-6 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.

Läs mer

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen AID-nummer: Datum: 2011-01-11 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Tisdag 11 januari

Läs mer

TDDC74 - Lektionsmaterial C

TDDC74 - Lektionsmaterial C TDDC74 - Lektionsmaterial C Lektioner innehåller uppgifter av varierande slag. En del är mer diskussionsartade, andra mer experimentella. Ni behöver inte lämna in eller visa upp lösningarna på dessa för

Läs mer

Tentamen i Grundläggande Programvaruutveckling, TDA548

Tentamen i Grundläggande Programvaruutveckling, TDA548 Tentamen i Grundläggande Programvaruutveckling, Joachim von Hacht/Magnus Myreen Datum: 2017-08-14 Tid: 14.00-18.00 Hjälpmedel: Lexikon Engelskt-Valfritt språk. Betygsgränser: U: -23 3: 24-37 4: 38-47 5

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering. Provkod TEN1, Tid: kl 14-18, , Kåra Tentamen Provkod TEN1, Tid: kl 14-18, 2013-06- 07, Kåra Läs alla frågorna först och bestäm dig för den ordning som passar dig bäst. Även om det i uppgi;en står a< du skall skriva en procedur/funk?on, så

Läs mer

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen AID-nummer: Datum: 2011-06-10 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering Tentamen Fredag 10 juni

Läs mer

Programmering II (ID1019) :00-11:00

Programmering II (ID1019) :00-11:00 ID1019 Johan Montelius Programmering II (ID1019) 2015-06-11 08:00-11:00 Instruktioner Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten. Svaren

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12 TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 215, kl 8 12 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.

Läs mer

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

Sökning och sortering. Sökning och sortering - definitioner. Sökning i oordnad lista. Sökning med vaktpost i oordnad lista Sökning och sortering Sökning och sortering - definitioner Att söka efter data man lagrat undan för senare användning är vanligt Egentligen har man ingen annan anledning för att lagra undan data Har man

Läs mer

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

Föreläsning 9 Exempel. Intervallhalveringsmetoden. Intervallhalveringsmetoden... Intervallhalveringsmetoden... Föreläsning 9 Intervallhalveringsmetoden Intervallhalveringsmetoden Newton-Raphsons metod Mer om rekursion Tidskomplexitet Procedurabstraktion Representation Bra om ni läst följande avsnitt i AS: Procedures

Läs mer

Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9

Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9 Quicksort Koffman & Wolfgang kapitel 8, avsnitt 9 1 Quicksort Quicksort väljer ett spcifikt värde (kallat pivot), och delar upp resten av fältet i två delar: alla element som är pivot läggs i vänstra delen

Läs mer

Sökning och sortering

Sökning och sortering Sökning och sortering Att söka efter data man lagrat undan för senare användning är vanligt Egentligen har man ingen annan anledning för att lagra undan data Har man mycket data och många sökningar måste

Läs mer

Utförliga regler för TRAX

Utförliga regler för TRAX Utförliga regler för TRAX Innehållsförteckning Vad är TRAX? Sid 2 Grundregler för TRAX Sid 3 Vad är en tvingad yta? Sid 4 Vad är en vinnande ögla? Sid 6 Vad är en vinnande linje? Sid 7 Grundläggande strategiska

Läs mer

Föreläsning 9 Exempel

Föreläsning 9 Exempel Föreläsning 9 Exempel Intervallhalveringsmetoden DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 1 / 24 Föreläsning 9 Exempel Intervallhalveringsmetoden Newton-Raphsons metod DA2001 (Föreläsning 9) Datalogi

Läs mer

HI1024 Programmering, grundkurs TEN2 2014-03-13

HI1024 Programmering, grundkurs TEN2 2014-03-13 HI1024 Programmering, grundkurs TEN2 2014-03-13 KTH STH Haninge 13.15-18.00 Tillåtna hjälpmedel: En A4 handskriven på ena sidan med egna anteckningar Kursboken C PROGRAMMING A Modern Approach K. N. King

Läs mer

Funktionell programmering DD1361

Funktionell programmering DD1361 Funktionell programmering DD1361 Tupler Två eller fler (men ändligt) antal element. Elementen kan vara av olika typer. Ex: (1,2) :: (Integer, Integer) (( 2, hejsan ), True) ::? Tupel med två element ->

Läs mer

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TDDC74 Programmering, abstraktion och modellering DUGGA 2 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering DUGGA 2 Torsdag 19 feb 2009 8-10 Namn: Personnummer:

Läs mer

Tentamen TEN1 HI1029 2014-05-22

Tentamen TEN1 HI1029 2014-05-22 Tentamen TEN1 HI1029 2014-05-22 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha

Läs mer

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

Signalflödesmodellen. Två (gamla) exempel: Kvadratera alla jämna löv. Strömmar (streams) De sista dagarna objekt med tillstånd modellerades som beräkningsobjekt med tillstånd. Isådana modeller är tiden modelerad (implicit) som en sekvens av tillstånd. För att kunna modellera

Läs mer

Sagaforms spelregler SCHACK, FIA MED KNUFF, BACKGAMMON, DOMINO

Sagaforms spelregler SCHACK, FIA MED KNUFF, BACKGAMMON, DOMINO Sagaforms spelregler SCHACK, FIA MED KNUFF, BACKGAMMON, DOMINO SCHACK Schack matt När en av motståndarens pjäser hotar kungen säger man att den står i schack. Schack matt - I schack vinner den som först

Läs mer

Datalogi, grundkurs 1

Datalogi, grundkurs 1 Datalogi, grundkurs 1 Tentamen 10 december 2008 konverterad till Python Hjälpmedel: Kommer att finnas i skrivsalarna, bl.a. Revised 6 Report on the Algorithmic Language Scheme och två olika s.k. Cheat

Läs mer

Komma igång med Allegro Common Lisp

Komma igång med Allegro Common Lisp Funktionell programmering med Lisp 9 Första gången Komma igång med Allegro Common Lisp Det Lisp-system som vi i kommer att använda för laborationerna heter Allegro Common Lisp. Det är en kommersiell programvara

Läs mer

PROGRAMMERING-JAVA TENTAMINA

PROGRAMMERING-JAVA TENTAMINA PROGRAMMERING-JAVA TENTAMINA Nicolina Månsson 2010-08-16 (Kontaktperson Nicolina Månsson, tel. 0768-530640) Tentamensinstruktioner Poängsättning Hela tentamen omfattar 42 poäng. Poäng för varje uppgift

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19 TDDC74 Programmering: Abstraktion och modellering Dugga 2, 2017-04-06, kl 17-19 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i

Läs mer

TDDC74 Programmering: Abstraktion och modellering Datortenta

TDDC74 Programmering: Abstraktion och modellering Datortenta TDDC74 Programmering: Abstraktion och modellering Datortenta - 2017-08-26 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18 TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.

Läs mer

TDDC74 Lab 04 Muterbara strukturer, omgivningar

TDDC74 Lab 04 Muterbara strukturer, omgivningar TDDC74 Lab 04 Muterbara strukturer, omgivningar 1 Översikt I den här laborationen kommer ni att lära er mer om: Tillstånd, och skillnader mellan ren funktionell programmering och imperativ. Skillnaden

Läs mer

Arrayer (fält)

Arrayer (fält) Arrayer (fält) 1 Vad kommer vi att ta upp om arrayer? Deklarera och initiera arrayen Lägga till i arrayen Ta ut på indexposition Ta reda på arrayens längd Sortera arrayen Söka igenom arrayen Loopa igenom

Läs mer

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

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista Sökning och sortering Sökning i oordnad lista Att söka efter data man lagrat undan för senare användning är vanligt Egentligen har man ingen annan anledning för att lagra undan data Har man mycket data

Läs mer

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Tentamen, EDA501/EDAA20 Programmering M MD W BK L LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen, EDA501/EDAA20 Programmering M MD W BK L 2017 05 31, 8.00 13.00 Anvisningar: Preliminärt ger uppgifterna 9 + 12 + 10 + 9 = 40 poäng.

Läs mer

Institutionen för datavetenskap, DAT060, Laboration 2 2 För denna enkla simulerings skull kommer handen att representeras som ett par tal μ värdet på

Institutionen för datavetenskap, DAT060, Laboration 2 2 För denna enkla simulerings skull kommer handen att representeras som ett par tal μ värdet på DAT 060 Laboration 2 I Malmös kasino Institutionen för datavetenskap 17 juni 2002 Per tänkte dryga ut sitt magra studielån genom att jobba som labbassistent på sommarkursen. Tyvärr fanns det redan tillräckligt

Läs mer

Några saker till och lite om snabbare sortering

Några saker till och lite om snabbare sortering Några saker till och lite om snabbare sortering Generellt om avbrott Generera avbrott Snabb sortering principer Snabb sortering i Scheme och Python QuickSort (dela städat slå ihop) Mergesort (dela slå

Läs mer

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

Börja med att kopiera källkoden till din scheme-katalog (som du skapade i Laboration 1). Laboration 3 Grafiska figurer I den här laborationen skall du konstruera ett schemeprogram som kan rita rektanglar, punkter, cirklar, linjer och bilder som består utav en eller flera av nyss nämnda figurer.

Läs mer

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

Ändringsbar (mutable compound) data. TDDC74 Programmering: abstraktion och modellering. Sätta - samman listor kopiering. Hitta sista cons-cellen TDDC74 Programmering: abstraktion och modellering Ändringsbar (mutable comound) data Att göra strukturförändringar i listor Ändra car- och cdr-ekare SICP 3 (del ) Föreläsning 8 Anders Haraldsson (set-car!

Läs mer

Föreläsningsanteckningar F6

Föreläsningsanteckningar F6 Föreläsningsanteckningar F6 Martin Andersson & Patrik Falkman Kortaste vägen mellan en nod och alla andra noder Detta problem innebär att givet en graf G = (E,V) hitta den kortaste vägen över E från en

Läs mer

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning Dagens Agenda String [] argv String [] argv Arrayer och Strängar fortsättning Booleska operatorer if, for, while satser Introduktion till algoritmer public static void main(string [] argv) argv är variabelnamnet

Läs mer

PROGRAMMERING-Java Omtentamina

PROGRAMMERING-Java Omtentamina PROGRAMMERING-Java Omtentamina Nicolina Månsson 2007-08 13 Tentamensinstruktioner Poängsättning Hela tentamen omfattar 41 poäng. Poäng för varje uppgift står angivet inom parentes före varje uppgift. -

Läs mer

Datalogi, grundkurs 1

Datalogi, grundkurs 1 Datalogi, grundkurs 1 Tentamen 9 dec 2014 Tillåtna hjälpmedel: Revised 6 Report on the Algorithmic Language Scheme och Tre olika s.k. Cheat Sheets för Scheme Sex olika s.k. Cheat Sheets för Python Tänk

Läs mer

Institutionen för datavetenskap

Institutionen för datavetenskap Institutionen för datavetenskap Department of Computer and Information Science Examensarbete Implementation och utökning av en typhärledningsalgoritm för Common Lisp av Simon Ståhlberg LIU-IDA/LITH-EX-G--10/018--SE

Läs mer

Datastrukturer. Föreläsning Innehåll. Program med vektor Exempel. Deklarera vektorer

Datastrukturer. Föreläsning Innehåll. Program med vektor Exempel. Deklarera vektorer Föreläsning 1-12 Innehåll Vektorer Registrering (räkna element av olika slag) Sökning Matriser Klasserna String och StringBuilder Repetition inför delmålskontroll 2 Undervisningsmoment: föreläsning 1-12

Läs mer

Visual Basic, en snabbgenomgång

Visual Basic, en snabbgenomgång Visual Basic, en snabbgenomgång Variabler och Datatyper En variabel är som en behållare. Olika behållare passar bra till olika saker. I Visual Basic(härefter VB) finns olika typer av behållare för olika

Läs mer

Handbok Othello. Clay Pradarits Utvecklare: Mario Weilguni Granskare: Lauri Watts Översättare: Stefan Asserhäll

Handbok Othello. Clay Pradarits Utvecklare: Mario Weilguni Granskare: Lauri Watts Översättare: Stefan Asserhäll Clay Pradarits Utvecklare: Mario Weilguni Granskare: Lauri Watts Översättare: Stefan Asserhäll 2 Innehåll 1 Inledning 5 2 Hur man spelar 6 3 Spelets regler, strategi och tips 7 3.1 Spelets grunder.......................................

Läs mer

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

Språket Scheme. DAT 060: Introduktion till (funktions)programmering. DrScheme. uttryck. Jacek Malec m. fl. evaluering av uttryck. DAT 060: Introduktion till (funktions)programmering. Jacek Malec m. fl. www.cs.lth.se/home/jacek Malec/dat060 Idag: 1. Kursens innehåll 2. Kursens organisation 3. Programmeringsspråket Scheme 4. Introduktion

Läs mer

Sista delen av kursen

Sista delen av kursen Sista delen av kursen handlar om hur program, delprogram och datatyper deklareras och vad det man åstadkommit egentligen betyder. Innehåll Syntaktisk (hur ser det ut) och semantisk (vad betyder det) beskrivning

Läs mer

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

Programspråkslingvistik. Sista delen av kursen. Ett programspråk Sista delen av kursen Programspråkslingvistik handlar om hur program, delprogram och datatyper deklareras och vad det man åstadkommit egentligen betyder. Innehåll Syntaktisk (hur ser det ut) och semantisk

Läs mer

Programmeringsuppgift Game of Life

Programmeringsuppgift Game of Life CTH/GU STUDIO TMV06a - 0/0 Matematiska vetenskaper Programmeringsuppgift Game of Life Analys och Linär Algebra, del A, K/Kf/Bt Inledning En cellulär automat är en dynamisk metod som beskriver hur komplicerade

Läs mer

Kravspecifikation. Sammanfattning. Fyra i rad Javaprojekt inom TDDC32. Version 2.0. Datum Dokumentnummer

Kravspecifikation. Sammanfattning. Fyra i rad Javaprojekt inom TDDC32. Version 2.0. Datum Dokumentnummer Kravspecifikation Fyra i rad Javaprojekt inom TDDC32 Version 2.0 Datum 2008-05-19 Dokumentnummer 20080215 Sammanfattning Detta är en kravspecifikation över det klassiska spelet Fyra-i-rad programmerat

Läs mer

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET UMEÅ UNIVERSITET Datavetenskap 010824 TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET Datum : 010824 Tid : 9-15 Hjälpmedel : Inga Antal uppgifter : 7 Totalpoäng : 40 (halva poängtalet krävs normalt

Läs mer

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

Datalogi, grundkurs 1 Övningsuppgifter i Scheme. Serafim Dahl, Carina Edlund, m.fl. Datalogi, grundkurs 1 Övningsuppgifter i Scheme Serafim Dahl, Carina Edlund, m.fl. Hösten 2004 Datalogi, grundkurs 1, hösten 2002 1 1. Vad blir det för resultat vid beräkningen av följande Scheme-uttryck.

Läs mer

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift ) Uppgift 1 ( Betyg 3 uppgift ) Skriv ett program, Draw_Hexagones, som ritar ut en bikupa enligt körexemplen nedan. Exempel 1: Mata in storlek på bikupan: 1 + / \ + + + + \ / + Exempel 3: Mata in storlek

Läs mer

PROGRAMMERING-Java TENTAMINA

PROGRAMMERING-Java TENTAMINA PROGRAMMERING-Java TENTAMINA Nicolina Månsson 2010-03-17 Tentamensinstruktioner Poängsättning Hela tentamen omfattar 42 poäng. Poäng för varje uppgift står angivet inom parentes före varje uppgift. - För

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner 732G11 Linköpings universitet 2011-01-21 1 2 3 4 5 6 Skapa program Kompilera: Källkod Kompilator bytekod Köra: Bytekod Virtuell maskin Ett riktigt program Hej.java class Hej { public static void main (

Läs mer

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P UME UNIVERSITET Datavetenskap 981212 TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P Datum : 981212 Tid : 9-15 HjŠlpmedel : Inga Antal uppgifter : 9 TotalpoŠng : 60 (halva pošngtalet kršvs normalt fšr

Läs mer

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

Programmering för språkteknologer II, HT2011. Rum Programmering för språkteknologer II, HT2011 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv11/pst2/ Idag - Hashtabeller - Flerdimensionella arrayer (2D) 2 Repetition -

Läs mer

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

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12 TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.

Läs mer

Anteckningar propp SMT2

Anteckningar propp SMT2 Anteckningar propp SMT2 Lars Åström 11 december 2015 Under proppen ska följande gås igenom: Induktion - dominoeffekten Falluppdelning Extremprincipen Invarians Andra knep som används Induktion Vi använder

Läs mer

729G04 Programmering och diskret matematik. Föreläsning 7

729G04 Programmering och diskret matematik. Föreläsning 7 729G04 Programmering och diskret matematik Föreläsning 7 Föreläsningsöversikt Information Interaktion via text Läsa från fil Skriva till fil Spara och läsa abstrakta datatyper från fil Information Felaktigt

Läs mer

Kungar och Skatter. 2. Ta sedan de fyra essen och blanda dem och lägg sedan slumpvis ut ett ess uppvänt i varje hörn (se fig 2).

Kungar och Skatter. 2. Ta sedan de fyra essen och blanda dem och lägg sedan slumpvis ut ett ess uppvänt i varje hörn (se fig 2). Introduktion Spelare: 2-4 Speltid:15min Svårighet:Lätt att lära, svårt att bemästra Komponenter: 52 kort + 1 Joker Kungar och Skatter I Kungar och Skatter spelar varje spelare en kung som beger sig ut

Läs mer

Dagens föreläsning. Modeller för programmeringsspråk. - Olika modeller programspråk Interpretator - kompilator. - Syntax - semantik.

Dagens föreläsning. Modeller för programmeringsspråk. - Olika modeller programspråk Interpretator - kompilator. - Syntax - semantik. 1 Dagens föreläsning Modeller för programmeringsspråk - Olika modeller programspråk Interpretator - kompilator - Olika typer av språk Statiska och dynamiska programspråk - Syntax - semantik. Grammatik

Läs mer