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

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

Procedurer och villkor

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

DD1361 Programmeringsparadigm. Carina Edlund

Föreläsning 9 Exempel

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

Deklarationer/definitioner/specifikationer

I dag: Blockstruktur, omgivningar, problemlösning

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

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

Pythons standardbibliotek

Variabler och konstanter

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

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

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

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.

Förra gången: Primitiva data

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

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

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

Sista delen av kursen

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

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

Sista delen av kursen

Några saker till och lite om snabbare sortering

Exempel på ett litet Ada-program

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

MMA132: Laboration 2 Matriser i MATLAB

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

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

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

Imperativ programmering. Föreläsning 2

Våra enkla funktioner eller procedurer

Funktionell programmering DD1361

Inledande matematik för I1. MVE011 läsperiod Matlab vecka 2 övningsuppgifter

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

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

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Föreläsning 6: Introduktion av listor

Datalogi, grundkurs 1

1 Iteration. 1.1 for-satsen

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

Föreläsning 3. Iteration while-satsen

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

Datalogi, grundkurs 1

Sökning och sortering

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

Iteration while-satsen

Programmering i C, 7,5 hp

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

Tommy Färnqvist, IDA, Linköpings universitet. 2 Rekursion i C Implementation av rekursion Svansrekursion En till övning...

2.4. Teckensträngar och logiska uttryck

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska

Twincat: PLC Control

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?

Användarhandledning Version 1.2

GPT föreläsning 8. Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner

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

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

Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson Plot och rekursion

Mer källkod. Styrstrukturer Val Slingor Operatorer Källkodsexempel med minne. Erik Forslin. Rum 1445, plan 4 på Nada

Idag: Dataabstraktion

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

Tentamen i. TDDC67 Funktionell programmering och Lisp

Deklarativ programmering

Deklarativ programmering

Standardfilerna Input och Output

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

Imperativ och Funktionell Programmering i Python #TDDD73. Fredrik Heintz,

TDIU01 - Programmering i C++, grundkurs

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

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

TENTAMEN TDDB53. Programmering i Ada för MI (provkod TEN2) den 7 april 2010 kl Institutionen för datavetenskap, IDA Olle Willén mars 2010

Lambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA

Visual Basic, en snabbgenomgång

En villkorssats är den konstruktion som finns i C++ för att göra en selektion av två alternativa sekvenser. Formen för if satsen är

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor

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

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Föreläsning 13. Rekursion

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

KOMPLETTERANDE HEMTENTAMEN TDDB53

JavaScript del 3 If, Operatorer och Confirm

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

Föreläsning 5. Rekursion

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

F4. programmeringsteknik och Matlab

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

Föreläsning 11: Rekursion

Planering av ett större program, del 2 - for och listor. Linda Mannila

Planering Programmering grundkurs HI1024 HT TIDAA

Numeriska Metoder och Grundläggande Programmering för P1, VT2014

Grundkurs Programmering

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Transkript:

Repetition Introduktion Repetition i Exemplen fac Orginalet I Scheme använde vi rekursion för all slags repetition. Efterom Scheme är ett funktionellt språk återsänder alla språkkonstruktioner ett värde men i (mellan-)lagras värden i variabler. Man kan alltså ha styrstrukturer som inte kräver rekursion för repetitiva beräkningar. har flera sådana och jag kommer ge exempel på hur de används. Jag använder två olika exempel som vi redan studerat både i Scheme och (define fac (if (= n 0) 1 (* n (fac (- n 1)))))) Svansrekursiv (define fac (define fac-svans (lambda (m res) (if (> m n) res (fac-svans (+ m 1) (* res m))))) (fac-svans 2 1))) DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 1 / 20 DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 2 / 20 Exemplen fac i Exemplen fac motivering Direktkopia av den svansrekursiva Scheme-varianten FUNCTION facsvans(m, res: Integer): Integer; IF m > n THEN facsvans := res ELSE facsvans := facsvans(m + 1, res * m) fac := facsvans(2, 1) Betraktar man en trace på fac-svans eller gör en utskrift från motsvarande -program får man m res 2 1 3 2 4 6 5 24 6 120 Vi ser att resultatet erhålls genom att parametrarna m och res uppdateras för varje anrop och att det som lagrats i parametern res lämnas som resultat då m passerat värdet för n. Det räcker alltså att sätta initalvärden på res och m och uppdatera dem utan extra anrop. I kan man formulera detta direkt utan rekursion. DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 3 / 20 DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 4 / 20

Repetition i while Repetition i while formellt FUNCTION fac(n : Integer) : Integer; VAR m, res : Integer; { variabler för mellanlagring} { ersätter inre funk.param.} m := 2; res := 1; { initialvärden } WHILE m <= n DO { villkoret inverterat } res := res * m; { uppdatera res } { uppdatera m } { slut på slingan } { återsänd resultatet } while (villkors-) uttryck I funktionen fac är satsen en sammansatt sats eftersom jag vill utföra mer än en sak. I WHILE-satsen kollar man om villkoret är uppfyllt innan man gör något. Skulle villkoret inte vara uppfyllt då programmet stöter på WHILE-satsen så utförs ingenting Man måste, som vid rekursion, vara noga med att se till att man kommer till en situation där villkoret inte längre är uppfyllt. Man har ingen kompilatoranalys till hjälp. Man kan tänka sig att man först vill göra något och sedan kolla om man ska göra om. stöder även detta. do sats DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 5 / 20 DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 6 / 20 Repetition i repeat... until Repetition i repeat... until formellt VAR m, res : Integer; m := 1; res := 1; REPEAT res := res * m; UNTIL m > n; repeat sats until ; (villkors-) uttryck Man kan utan sammansatt sats sätta in flera satser mellan REPEAT och UNTIL Man utför alla satser minst en gång Man måste även här vara noga med att slutvillkoret kommer att uppfyllas Eftersom vi vet både start och slutvillkor och dessa är taljämförelser så kan vi ju faktiskt avgöra exakt hur många gånger vi ska utföra modifikationen av variablerna. Det kan vi utnyttja på två sätt: DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 7 / 20 DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 8 / 20

Repetition i for... to/downto Repetition i for... to/downto formellt VAR m, res : Integer; res := 1; FOR m := 2 TO n DO res := res * m; for (variabel-) identifierare := uttryck to downto VAR res : Integer; res := 1; FOR n := n DOWNTO 2 DO res := res * n; uttryck do sats Mindre formellt (och lättare att resonera kring): FOR variabel := startvärde TO / DOWNTO slutvärde DO sats DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 9 / 20 DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 10 / 20 Repetition i for... to/downto formellt Rekursion kontra iteration för- och nackdelar FOR variabel := startvärde TO / DOWNTO slutvärde DO sats I FOR...TO-satsen kontrolleras att startvärdet är mindre än eller lika med slutvärdet, annars utförs ingenting Självklart tvärtom i FOR...DOWNTO-satsen Satsen utförs för varje värde, inklusive start- och slutvärdena Start och slutvärdena ska vara av samma (diskreta typ) Steget är alltid i någon mening 1 Repetition med de nu visade konstruktionerna kallas iteration Vid rekursion behöver man bara tänka på Hur vet man att man är klar? Vad gör man då? Hur tar man ett steg närmare lösningen? Vid iteration måste man tänka på allt samtidigt men Iteration är resurssnålt För att rekursion ska vara resurssnålt måste man använda ett språk som kan eliminera svansrekursion (som Scheme, ML, Haskell eller Miranda) skriva svansrekursiva program (inte alltid enkelt) Vi har nu tre olika loopkonstruktioner: 1. REPEAT... UNTIL villkor; 2. WHILE villkor DO sats; 3. FOR styrvariabel := start TO slut DO s; FOR styrvariabel := start DOWNTO slut DO s; DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 11 / 20 DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 12 / 20

Iteration exempel 2 (fib) i Scheme Iteration exempel 2 (fib) i Scheme... Rekursivt i Scheme: (define fib (if (< n 2) 1 (+ (fib (- n 1)) (fib (- n 2)))))) Svansrekursivt (define fib (define fib-inner (lambda (m f1 f2) (if (> m n) f2 (fib-inner (+ m 1) f2 (+ f1 f2))))) (fib-inner 1 0 1))) Trace av svansrekursiva varianten > (fib 5) (fib-inner 1 0 1) (fib-inner 2 1 1) (fib-inner 3 1 2) (fib-inner 4 2 3) (fib-inner 5 3 5) (fib-inner 6 5 8) 8 8 DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 13 / 20 DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 14 / 20 Iteration exempel 2 (fib) i Iteration exempel 2 (fib) med WHILE FUNCTION inner(m, f1, f2 : Integer) : Integer; IF m > n THEN inner := f2 ELSE inner := inner(m + 1, f2, f1 + f2) fib := inner(1, 0, 1) VAR m, f1, f2, tmp : Integer; m := 1; f1 := 0; f2 := 1; WHILE m <= n DO DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 15 / 20 DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 16 / 20

Iteration exempel 2 (fib) med REPEAT Iteration exempel 2 (fib) med FOR...TO fib := inner(1, 0, 1) m := 1; f1 := 0; f2 := 1; REPEAT UNTIL m > n; VAR m, f1, f2, tmp : Integer; f1 := 0; f2 := 1; FOR m := 1 TO n DO DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 17 / 20 DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 18 / 20 Iteration exempel 2 (fib) med FOR...DOWNTO Iteration exempel 3: iterate i newton-programmet VAR f1, f2, tmp : Integer; f1 := 0; f2 := 1; FOR n := n DOWNTO 1 DO FUNCTION iter(x, eps: Real; FUNCTION next(x:real; FUNCTION f(x:real):real):real; FUNCTION f(x: Real):Real): Real; WHILE abs(x-next(x, f)) >= eps DO x := next(x, f); iter := x DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 19 / 20 DA2001 (Föreläsning 12) Datalogi 1 Hösten 2010 20 / 20