FÖRELÄSNING 1 PERSONAL TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017 SYFTE EXAMINATION ORGANISATION

Relevanta dokument
TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

BEGREPP HITTILLS FÖRELÄSNING 2 SAMMANSATTA UTTRYCK - SCHEME DATORSPRÅK

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

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

Förra gången: Primitiva data

TDDC74 Programmering, abstraktion och modellering DUGGA 2

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?

TDDC74 Programmering, abstraktion och modellering DUGGA 1

Programmering - abstraktion och modellering

Våra enkla funktioner eller procedurer

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

DD1361 Programmeringsparadigm. Carina Edlund

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

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)

TDDC74 Programmering, abstraktion och modellering. Tentamen

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Tentamen i. TDDC67 Funktionell programmering och Lisp

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

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

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

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

Programmering, grundkurs

Tentamen i. TDDA 69 Data och programstrukturer

TDDC74 Programmering: Abstraktion och modellering Dugga 1, exempeldugga

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

TDDC74 Lab 02 Listor, sammansatta strukturer

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

TDDC74 Lab 04 Muterbara strukturer, omgivningar

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

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

Procedurer och villkor

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

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

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

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

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

TDDC74 Programmering, abstraktion och modellering DUGGA 3

Föreläsning 9 Exempel

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 8 10, 7 april 2016

Klassdeklaration. Metoddeklaration. Parameteröverföring

Programmeringsteknik med C och Matlab

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

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

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

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

TDDC74 Programmering: Abstraktion och modellering Datortenta

Språket Python - Del 1 Grundkurs i programmering med Python

Programmering A. Johan Eliasson

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015

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

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

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

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

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

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

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

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

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

TDDC74 - Lektionsmaterial C

Objektorienterad Programmering (TDDC77)

729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

Algoritmer och datastrukturer H I HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

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.

TDDE44 Programmering, grundkurs

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

Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python)

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Parameteröverföring. Exempel. Exempel. Metodkropp

Föreläsning 2 Programmeringsteknik och C DD1316

Föreläsning 1: Introduktion till kursen

Sätt att skriva ut binärträd

TDDC77 Objektorienterad Programmering

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

Modularitet och tillstånd. Stora system kräver en uppdelning. En lösning: modularitet. Basera programmets struktur på den fysiska systemets struktur:

Programmeringsteknik I

Föreläsning 3: Booleans, if, switch

DD1314 Programmeringsteknik

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

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

Introduktionsmöte Innehåll

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

Deklarationer/definitioner/specifikationer

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Rekursiva algoritmer sortering sökning mönstermatchning

Användarhandledning Version 1.2

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

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

Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp

EDAA01 Programmeringsteknik - fördjupningskurs

Transkript:

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017 Jalal Maleki Institutionen för datavetenskap Linköpings universitet jalal.maleki@liu.se FÖRELÄSNING 1 Introduktion till kursen Schemespråkets grunder Enkla exempel OBS! ändringar i schemat för vissa PERSONAL Jalal Maleki, Anna Grabska Eklund Anders Märak-Leffler, Joel H Nilsson (Y1A) Simon Jönsson, Jens Grundmark (Y1B) Carl Ekman, Sebastian Fridell (Y1C) Jonas Wallgren, Carl Valjus (MAT1 + andra) Andreas Norrstig, William Thelin (MED1) Sven Engström 1 2 3 SYFTE Kursens syfte är att studenterna ska utveckla förmåga att representera och lösa problem med hjälp av konstruktioner i datorspråk. Efter avslutad kurs ska studenterna kunna: redogöra för grundläggande datavetenskapliga begrepp relaterade till programmering och programspråk, särskilt funktionella språk metodiskt lösa programmeringsrelaterade problem i en interaktiv programutvecklingsmiljö representera problem och lösningar till dessa i form av rekursiva och iterativa algoritmer och kunna uppskatta tid- och rymdkomplexiteten för enklare fall konstruera abstraktioner som möjliggör design av program som är lättförståliga, återanvändbara och kan underhållas lättare genomföra ett mindre programmeringsprojekt ORGANISATION Föreläsningar Lektioner Laborationer Projekt Datorduggor Datortentamen EXAMINATION DAT1 Datortentamen / duggor (U,3,4,5) 2 hp LAB1 Laborationer (U, G) 3 hp PRA1 Projekt (U,3,4,5) 3 hp Slutbetyget på kursen baseras i första hand på betyget på DAT1. Men betyg 3 eller 4 i DAT1 kan höjas - se kurshemsidan 4 5 6

KURSHEMSIDAN Vi försöker hålla kurshemsidan aktuell. Använd hemsidan. Det brukar finnas en hel del information där, inte minst (ev) tentafrågor. Svar till en hel del administrativa frågor finns på kurshemsidan. http://www.ida.liu.se/~tddc74 KURSBOKEN SICP De tre första kapitlen ingår i denna kurs. Finns på nätet mitpress.mit.edu/sicp/ KURSBOKENS INNEHÅLL SICP1 Abstraktioner baserad på procedurer SICP2 Abstraktioner baserat på data SICP3 Abstraktioner baserat på objekt 7 8 9 DR.RACKET Systemet vi skall använda för programmering heter DrRacket www.racket-lang.org eller www.drracket.org DrRacket är en så kallad programmeringsmiljö som tillgängliggör olika verktyg för programmeraren PROGRAMMERING Formulera beräkningsprocesser som bearbetar data som får datorn att välja mellan alternativa beräkningar som får datorn att snurra som löser ett angivet problem i ett programspråk Representera/modellera/avbilda PROGRAMMERING OCH MATLAGNING Program liknar matrecept, t ex recept för pannkakor Programmering liknar kockens arbete i receptproduktion Recept utförs av folk Program utförs av dator eller robot När pannkaksrecept utförs noga, får man pannkakor. Det kan också bli pannkakor av det hela :) - vanligtvis kockens fel Program utförs alltid noga. Det kan också leda till fel beteende i dator eller robot - vanligtvis pga fel i programmet 10 11 12

SCHEME: SPRÅKETS ELEMENT UTTRYCK I SCHEME KONSTANTER I SCHEME primitiva uttryck (primitive expressions) sammansättningsregler (means of combination) Primitiva uttryck (konstanter och namn) 1, 3.14, pi, + truth-value: #t, #f integer: 28, +1729, -2 (sanningsvärde) (heltal) abstraktioner (means of abstraction) form eller syntax innebörd eller semantik Sammansatta uttryck (bl a proceduranrop) (* pi 2) Nästlingsmöjlighet: (+ (* 2 3) (- 4 5)) prefixnotation (operator operand operand) jfr med infixnotation (operand operator operand) rational: 3/4, -22/7 floating: 3.1415, -10e10, 2e-3 complex: 3.1+4i, 2-3i (bråk) (flyttal) (komplext tal) 13 14 15 NAMN I SCHEME TOLKNING: READ-EVAL-PRINT SAMMANSATTA UTTRYCK Ett namn är en ändlig följd av tecken som inte skapar en konstant i Scheme Namn får ej innehålla bryttecken som parenteser eller blanktecken Vissa namn är reserverade syntaktiska objekt Namn används för att benämna ett värde eller en procedur + square seriously? @fstops i-am-a-name-in-scheme http://www.google.com/ -1+ 2+2 Read --- läs ett uttryck Evaluate --- tolka uttrycket Print --- skriv ut resultatet >(+ 2 (* 3 4)) 14 >(define x 3) >(+ 2 x) 5 >(define (dubbla n) (* n 2)) >(dubbla 9) 18 Applikation av inbyggda procedurer (inbyggd-fn argument-1 argument-2 argument-n) Applikation av användardefinierade procedurer (användar-fn argument-1 argument-2... argument-n) Undantagsformer (if villkor då-uttrycket annars-uttrycket) (and uttryck-1 uttryck-2 uttryck-n) (or uttryck-1 uttryck-2... uttryck-n) Abstractionsmöjligheter (define namn värde) (lambda parametrar kropp) 16 17 18

FUNKTION INOM MATEMATIK FUNKTION I SCHEME LAMBDAABSTRAKTION D = {..., -2, -1, 0, 1, 2,...} R = {..., -2, -1, 0, 1, 2,...} Funktion f(x) = x 2 f={..., < -2, 4 >, < -1, 1 >, < 0, 0 >, < 1, 1 >,...} D= {, -2, -1, 0, 1, } R= {, 4, 1, 0, 1, } D R Maskin eller en procedur som utför mappningen av mängden D till mängden R Precis beskrivning (algoritm) för hur en beräkning skall gå till (lambda (n) (* n n)) (lambda (r) (* 2 (* pi r))) (lambda (f) (* (/ 5 9) (- f 32))) (lambda (n) (* n n)) definierar en anonym funktion som kan beräkna kvadraten av sin parameter Det som skapas av detta uttryck brukar vi också kalla för procedurobjekt för att markera att det är en sak parametrar: (n) kropp: (* n n) 19 20 21 PROCEDURAPPLIKATION ((lambda (n) (* n n)) 7) Proceduren med parametern n appliceras till argumentet 7 Vi brukar också säga att proceduren anropas Parameter: n Kropp: (* n n) Argument: 7 Returvärde: 49 PARENTESER Parenteser är till för att definiera strukturen för sammansatta uttryck eller beskrivningar Parenteser möjliggör korrekt tolkning av programmen i Scheme ((lambda (n) (* n n)) 7) UNDANTAGFORMER I SCHEME Konstruktioner som är undantagna från vanlig hantering av funktioner i Scheme, Vad som utgör vanlig hantering beskrivs senare. Några följer: Villkorliga beräkningar if cond Logiska operationer som sätter samman flera villkor and or 22 23 24

IF (if villkor då-uttryck annars-uttryck) (if (< amount 10000) 0.5 1.5)) Om beloppet är mindre än 10000 då skall beräkningen ge resultatet 0.5 annars 1.5 COND (cond (villkor-1 då-uttryck-1) (villkor-2 då-uttryck-2)... (villkor-n då-uttryck-n)) (lambda (amount) (cond ((< amount 0) 0) ((< amount 10000) 0.5) ((< amount 50000) 1.5) ((>= amount 50000) 2.5))) 25 26 27 ELSE (lambda (amount) (cond ((< amount 0) 0) ((< amount 10000) 0.5) ((< amount 50000) 1.5) ((>= amount 50000) 2.5))) (lambda (amount) (cond ((< amount 0) 0) ((< amount 10000) 0.5) ((< amount 50000) 1.5) (else 2.5))) EXEMPEL PÅ LOGISKA OPERATORER (and e 1,, e n ) (or e 1,, e n ) (not e 1 ) (and (> x 2) (< x -2)) (or (> x 2) (< x -2)) (not (< x 3)) ABSTRAKTIONSOPERATORER define lambda Gruppering av procedurer 28 29 30

DEFINE Används för att tilldela namn till konstanter eller procedurobjekt För tillfället kan vi anta att define har tillgång till tabeller där namnen lagras. KOMBINATION AV LOGISKA OPERTORATORER (or (and (> x 2) (< x 6)) (and (> x -6) (< x -2))) (not (or (> x 1) (< x -1))) LAMBDAUTTRYCK (lambda parametrar kropp) Skapar ett objekt som givet ett antal argument (lika många som de angivna parametrarna) kan beräkna ett värde som motsvarar evaluering av kroppen 31 32 33 ABSTRAKTION I SCHEME: ATT NAMNGE SAKER (define ten 10) (define square (lambda (n) (* n n))) (define circle-area (lambda (r) (* pi (square r)))) NAMNGIVNING AV FUNKTIONER Följande två sätt att definiera funktionen area är ekvivalenta: (define area (lambda (r) (* pi (square r)))) (define (area r) (* pi (square r))) EVALUERING AV FUNKTIONSANROP För att evaluera ett anrop som (fn arg1 arg2 argn) Evaluera fn till det entitet den representerar Evaluera argumenten arg1 arg2 argn Ersätt förekomster av parametrar i procedurobjektets kropp med motsvarande argument och evaluera sedan kroppen Detta sätt kallas för det applikativa substitutionsmodellen för beräkning 34 35 36

UNDANTAGSFORMEN IF Medan alla funktionsanrop evalueras enligt en och samma regel som beskrevs nyss, evalueras undantagsformer (special forms) på annat sätt t ex (if villkor då-uttryck annars-uttrycket) Evaluera villkor, om sant evaluera sedan då-uttrycket annars evaluera annars-uttrycket Resultatet blir antingen värdet på då-uttrycket eller annars-uttrycket SPECIALFORMEN COND (cond (villkor-1 då-uttryck-1) (villkor-2 då-uttryck-2)... (villkor-n då-uttryck-n)) Evaluera villkor-1, om sant, evaluera sedan då-uttryck-1, annars gå till nästa i ordningen Någon av villkoren måste vara sant annars blir det fel Genom att låta villkor-n vara nyckelordet ELSE garanterar vi att då-uttryck-n evalueras i fall de tidigare villkoren varit falska. Så här: (cond (villkor-1 då-uttryck-1) (villkor-2 då-uttryck-2)... (ELSE då-uttryck-n)) SPECIALFORMEN AND (and arg-1 arg-2...) Evaluera argumenten från vänster till höger tills ett falskt värde #f fås, i så fall är and-uttryckets värde #f, annars #t. 37 38 39 SPECIALFORMEN OR (or arg-1 arg-2...) Evaluera argumenten från vänster till höger till ett #t värde fås, i så fall är värdet på or-uttrycket #t, annars #f FÖLJANDE ÄR EKVIVALENTA (cond ((> x 0) x) ((= x 0) 0) ((< x 0) (- x))) (cond ((> x 0) x) ((= x 0) 0) (else (- x))) (if (> x 0) x (if (= x 0) 0 (- x))) PROGRAMEXEMPEL: AVSTÅNDET MELLAN TVÅ PUNKTER (define distance (lambda (x1 y1 x2 y2) ( s q r t ( + ( s q u a r e ( - x 2 x 1 ) ) ( s q u a r e ( - y 2 y 1 ) ) ) ) ) ) (define square (lambda (n) (* n n))) 40 41 42

SUBSTITUTIONSMODELLEN (distance 0 0 3 4) (sqrt (+ (square (- 3 0)) (square (- 4 0)))) (sqrt (+ (square 3) (square 4))))) (sqrt (+ (* 3 3) (* 4 4))) (sqrt (+ 9 16)) (sqrt 25) 5 PROGRAMMERING Formulera beräkningsprocesser som bearbetar data som får datorn att välja mellan alternativa beräkningar som får datorn att snurra som löser ett angivet problem i ett programspråk Representera/modellera/avbilda REKURSION Rekursion är ett sätt att få datorn att snurra Rekursion är ett sätt att bryta ner problem till enklare (mindre) problem Beräkningar definieras i termer av sig själva Ett termineringsfall är alltid nödvändigt Ganska vanligt inom matten, t ex, n! = n(n-1)! när n > 0 0! = 1 43 44 45 BERÄKNINGS AV FAKULTET: 0! = 1, N! = N * (N-1)! (define fact (lambda (n) (if (= n 0) 1 (* n (fact (- n 1)))))) SUBSTITUTIONSMODELLEN Använd substitution för att beräkna (fact 4): (fact 4) (* 4 (fact 3)) (* 4 (* 3 (fact 2))) (* 4 (* 3 (* 2 (fact 1)))) (* 4 (* 3 (* 2 (* 1 (fact 0))))) (* 4 (* 3 (* 2 (* 1 1)))) (* 4 (* 3 (* 2 1))) (* 4 (* 3 2)) (* 4 6) 24 ITERATIV FAKULETETSFUNKTION (define fact-iter (lambda (n result) (if (= n 0) result (fact-iter (- n 1) (* n result)))) I den extra parametern result samlas delresultatet av beräkningen 46 47 48

ITERATIV FAKULTETSFUNKTION - NÅGOT BÄTTRE (define fact (lambda (n) (fact-iter n 1) (define fact-iter (lambda (n result) (if (= n 0) result (fact-iter (- n 1) (* n result)))) Som tidigare har vi en funktion med en parameter. SUBSTITUTIONSMODEL (fact 4) (fact-iter 4 1) (fact-iter (- 4 1) (* 4 1)) (fact-iter 3 4) (fact-iter (- 3 1) (* 3 4)) (fact-iter 2 12) (fact-iter (- 2 1) (* 2 12)) (fact-iter 1 24) (fact-iter (- 1 1) (* 1 24)) (fact-iter 0 24) 24 FIBONACCITALEN (define fib (lambda (n) (cond ((= n 0) 0) ((= n 1) 1) (else (+ (fib (- n 1)) (fib (- n 2))))))) 49 50 51 ITERATIV FIBONACCI (define fibi (lambda (n) (cond ((= n 0) 0) ((= n 1) 1) (else (fiter n 0 1 1))))) (define fib-iter (lambda (n f0 f1 count) (if (= count n) f1 (fib-iter n f1 (+ f0 f1) (+ count 1))))) 52