Noter. Indhold. Oktober 2009

Størrelse: px
Starte visningen fra side:

Download "Noter. Indhold. Oktober 2009"

Transkript

1 Noter Oktober 2009 Dette er en samling af noter skrevet til kurset Programmering 2 som supplement til den anvendte lærebog. Java-kildeteksten for de anvendte programeksempler kan nås via WWW: Indhold 1 Klassedesign og invarianter Implementationsinvariant for en kasse Visuel løkkeinvariant ved søgning Visuel løkkeinvariant ved primtalsfaktorisering Rekursive metoder Rekursiv funktion: Fibonacci tal Rekursiv grafik: Fraktaler Gensidig rekursion: Evaluering af udtryk Randomisering og rekursion Generelt om rekursion Rekursive datastrukturer Rekursive træer Visitor Rekursiv liste Sammenligning af gennemløbsteknikker Algoritmer over reelle tal Flydende komma aritmetik Reel aritmetik i Java Reelle algoritmer

2 1 Klassedesign og invarianter Dette kapitel er et supplement til kapitel 3, Guidelines for Class Design i Horstmanns bog Object oriented Design & Patterns. Vi viser eksempel på brug af en speciel form for kontrakter nemlig implementations- og løkkeinvarianter ved implementation af hele klasser og enkelte metoder. En implementationsinvariant kan simplificere implementationen af en klasse og dermed gøre det lettere at indse at den er implementeret korrekt, ligesom en løkkeinvariant kan gøre det lettere at sikre rigtig start og slut af sweep og iterationer. Vi vil kun anvende løkkeinvarianter i en forenklet udgave, som vi kalder visuelle løkkeinvarianter. En sådan illustreres med en figur fremfor i matematisk notation. I kurset Algoritmer og datastrukturer 1 gives en mere grundig introduktion til brugen af invarianter. 1.1 Implementationsinvariant for en kasse Vi ønsker at modellere en papkasse repræsenteret ved de tre sidelængder z y x På papkasser kan man oplagt definere en ordning, således at k 1 k 2,hvisk 1 kan være inde i k 2 idet vi kræver, at siderne holdes parallelle. Vi ser bort fra væggenes tykkelse, så en papkasse kan f.eks. være inde i sig selv. Den offentlige interface skal tilbyde følgende operationer: En konstruktør der givet tre tal laver en kasse med de angivne dimensioner en metode der beregner rumfanget af kassen en metode der beregner om kassen kan være inde i en anden givet kasse 2

3 en metode der beregner den mindste kasse, som både kassen selv og en anden kasse kan være inden i. Dvs. klassen skal have følgende form public class Box { public Box(int w, int h, int d) {... public int volume() {... public boolean fitsin(box b) {... public Box combine(box b) {... Når vi overvejer, hvorledes f.eks. fitsin skal skrives, så ser vi hurtigt en komplikation. Vi er ikke interesseret i papkasser, der står på skrå, men alligevel kan en papkasse vendes på 6 essentielt forskellige måder, så det ser ud som om, vi bliver nødt til at undersøge en hel del tilfælde. Det kan vi dog undgå hvis vi påtvinger klassen Box en implementationsinvariant som instans variablerne skal overholde: /** * IMPLEMENTATION INVARIANT: x <= y <= z */ private int x,y,z; Implementationsinvarianten kan ses som en kontrakt mellem implementørerne af konstruktøren og de forskellige metoder, idet Inden udførelsen af en public metode kan man gå ud fra at invarianten er overholdt. Inden afslutning af konstruktøren eller en af de offentlige metoder skal det sikres at invarianten er overholdt Bemærk også at de tre instansvariabler har visibility modifier private og derfor kun kan ændres af kode inde i klassen. Det er derfor let at se at invarianten altid vil blive overholdt, uanset hvordan klassen benyttes. Vi kommer til følgende implementation public class Box { /** 3

4 * IMPLEMENTATION INVARIANT: x <= y <= z */ private int x,y,z; public Box(int w, int h, int d) { x = w; y = h; z = d; while (x>y y>z) { if (x>y) {int temp = x; x = y; y = temp; if (y>z) {int temp = y; y = z; z = temp; public int volume() { return (x*y*z); public boolean fitsin(box b) { return ( x<=b.x && y<=b.y && z<=b.z ); public Box combine(box b) { return new Box(Math.max(x,b.x), Math.max(y,b.y), Math.max(z,b.z)); I metoderne fitsin og combine udnytter vi, at invarianten gælder. I konstruktøren sorterer vi x, y og z, således at invarianten bliver etableret. Hvis vi ikke opretholdt invarianten, så blev vi nødt til at tage stilling til alle de 6 forskellige måder, man kan orientere en papkasse på. F.eks. ville metoden fitsin blive til public boolean fitsin(box b) { return ( (x<=b.x && y<=b.y && z<=b.z) (x<=b.x && z<=b.y && y<=b.z) (y<=b.x && x<=b.y && z<=b.z) (y<=b.x && z<=b.y && x<=b.z) (z<=b.x && x<=b.y && y<=b.z) (z<=b.x && y<=b.y && x<=b.z) ); 4

5 og operationen combine kunne blive helt uoverskuelig. 1.2 Visuel løkkeinvariant ved søgning Det første eksempel på anvendelse af en løkkeinvariant er en simpel lineær søgning. Der skal implementeres en metode, som givet et array og et tal returnerer tallets position i arrayet, hvis det findes i arrayet og ellers returnerer -1. Metodens signatur er således public int linearsearch(int[] a, int e) {... Implementationen klares let ved et enkelt sweep gennem arrayet. Et typisk øjebliksbillede under dette sweep er følgende: e ikke her 0 i a.length-1 Vi kan samtidig opfatte tegningen som en kontrakt (den visuelle løkkeinvariant) der skal overholdes af den der implementerer metoden, dvs. tegningen kan antages at være korrekt før hvert iterationsskridt det skal sikres at tegningen stadig er korrekt efter hvert skridt, og efter initialiseringen af løkkevariablen i. På baggrund af tegningen er det let at skrive sweep-løkken, så løkkevariablen i initialeres rigtigt og vi anvender det rigtige stopkriterium. Ved start af sweep er det skraverede område tomt og i skal initialiseres til 0. Undervejs må vi kun tælle i op, når det første element i det hvide område ikke er i- dentisk med det element, vi leder efter. Hvis det første element i det hvide område skulle vise sig at være det element, vi leder efter kan søgning umiddelbart standses. Eneste anden grund til at standse er at det hvide område bliver tomt, dvs. søgningen fortsætter så længe i<a.length: public int linearsearch(int[] a, int e) { int i=0; while (i<a.length) { if (a[i]==e) return i; else i++; return -1; 5

6 Hvis man søger i en sorteret liste er binær søgning et effektivt alternativ til lineær søgning. Antag at vi leder efter Johansen i telebogen. Hvis vi slår op ca. midt i telefonbogen og finder en side med Mikkelsen kan vi eliminere den halvdel af telefonbogen der følger efter Mikkelsen fra den videre søgning. Hvis vi dernæst slår op ca. midt i den tilbageværende halvdel af bogen og finder en side med Hedegård kan vi tilsvarende eliminere den del af bogen der kommer før Hedegård. På denne vis fortsætter vi med at slå op ca. midt i den tilbageværende del af telefonbogen indtil vi enten har fundet en side med Johansen eller vi har elimeneret hele bogen og må konkludere at Johansen ikke forekommer. Hvis denne strategi anvendes på søgning i et sorteret heltalsarray kan et typisk øjebliksbillede se ud som følgende: 0 e ikke her e ikke her low high a.length-1 Som for lineær søgning er det forholdsvis let at implementere metoden, når man hele tiden har tanke for at overholde den visuelle løkkeinvariant. public int binarysearch(int[] a, int e) { int low = 0; int high = a.length-1; while (low<=high) { int mid = (low+high)/2; if (a[mid]==e) return mid; else if (a[mid]<e) low = mid+1; else high = mid-1; return -1; For en fornuftig søgning er det væsentlig at det hvide ikke-undersøgte område på tegningen mindskes (så meget som muligt) i hvert skridt. Ved lineær søgning, der består af et enkelt sweep, sikres det ved at tælle løkkevariablen een frem i hvert skridt. Ved binær søgning er progressionen mindre gennemskuelig. Hvis man er uforsigtig kan man lave en implementation, hvor det hvide område i nogle tilfælde ikke mindskes, og dermed får vi en evig løkke, f.eks.: public int loopingbinarysearch(int[] a, int e) { int low = 0; 6

7 int high = a.length-1; while (low<=high) { int mid = (low+high)/2; if (a[mid]==e) return mid; else if (a[mid]<e) low = mid; else high = mid; return -1; Java stiller en polymorf binær søgning til rådighed for brugeren i metoden Collections.binarySearch. 1.3 Visuel løkkeinvariant ved primtalsfaktorisering Først betragtes problemet at afgøre om et tal er et primtal. Primtallene er 2, 3, 5, 7, 11, 13,..., og der gælder at n 2 er et primtal hvis og kun hvis n ikke har en divisor d {2, 3,...,n 1. For at afgøre om n er et primtal, kan man lave et sweep over de mulige divisorer, og for hver divisor checke om den faktisk dividerer n. Vi anvender en løkkevariabel i til at angive hvor langt vi er kommet med sweepet, og som tidligere kan vi tegne et øjebliksbillede no divisors i 1 i... n 1 Baseret herpå kommer man let frem til følgende metode med precondition n 2. public boolean isprime(int n) { int i = 2; while (i<n) { if (n%i==0) return false; else i++; return true; 7

8 Næstefter løses det udvidede problem, hvor man finder den fuldstændige primfaktorisering af n. F.eks ønsker vi at metodekaldet factor(75) returnerer teksten "3*5*5". Man kan søge gennem de mulige divisorer d {2, 3,...,n 1 ved et sweep. Vi ønsker at en divisor der forekommer med multiplicitet > 1 skrives et tilsvarende antal gange. Tages et øjebliksbillede under sweepet, vil vi have udskrevet nogle faktorer, og der vil restere r, den ufaktoriserede del af n. Hvis r kan faktoriseres yderligere, vil den have en divisor d r. Denne indsigt leder til følgende visuelle invariant no divisor of r i 1 i... r Herudfra implementeres en metode, der som precondition har n 2: public String factor(int n) { int r = n; int i = 2; String s = ""; while (i*i<=r) { if (r%i == 0) { s = s + i + "*"; r = r/i; else i++; return s + r; Den angivne metode vil aldrig lede efter divisorer der er større end n. En tilsvarende optimering kan foretages på implementationen af isprime. Med eller uden denne optimering er begge algoritmer alt for langsomme til praktisk brug ved faktorisering (primalitetstest) af tal med f.eks. tredive eller flere cifre. Java tilbyder en randomiseret primalitetstest i metoden BigInteger.isProbablePrime, der er hurtig for mangecifrede tal, men til gengæld kan returnere et fejlagtigt svar. Den eneste kendte effektive (randomiserede) algoritme til at finde primtalsfaktoriseringen af mangecifrede tal 8

9 forudsætter adgang til en kvantecomputer af en størrelse, som det endnu ikke er lykkedes at konstruere. 9

10 2 Rekursive metoder En rekursiv metode indeholder kald af sig selv. Dette begreb er ikke så fremmed, som det måske synes ved første øjekast. Et velkendt eksempel på en rekursivt defineret udregningsmetode udgøres af de sædvanlige regler for differentiation af rationale funktioner (det vil sige funktioner som er summer, produkter eller kvotienter mellem polynomier). Reglerne er som følger; f(x) og g(x) er rationale funktioner og c er en reel konstant 1) c =0 2) (x n ) = nx n 1 3) (cf(x)) = cf (x) 4) (f(x)+g(x)) = f (x)+g (x) 5) (f(x)g(x)) = f(x)g (x)+f (x)g(x) ( ) f(x) 6) = g(x)f (x) f(x)g (x) g(x) g 2 (x) Reglerne 1) og 2) angiver direkte resultatet af at differentiere simple udtryk, mens reglerne 3) 6) angiver, at et sammensat udtryk differentieres ved, at det opbrydes i deludtryk, som hver især differentieres ved (rekursiv) anvendelse af reglerne. I det følgende vises et antal eksempler på rekursive metoder. 2.1 Rekursiv funktion: Fibonacci tal Fibonacci tallene er opkaldt efter matematikeren Leonardo Fibonacci af Pisa, som i 1202 udgav værket Liber Abaci (bogen om beregninger), hvori han blandt andet stillede spørgsmålet Hvor mange kaninpar kan der blive af et nyfødt kaninpar på et år, hvis hvert par føder et nyt par hver måned og et nyfødt par føder første gang efter to måneder? Hvis det antages, at kaniner aldrig dør, er det ikke svært at se, at der spørges efter det 12. element i følgen {F n n 0 defineret ved { 1 n =0, 1, F n = F n 1 + F n 2 n>1. 10

11 Denne definition er rekursiv, da formlen for det n te Fibonacci-tal henviser til mængden af (mindre) Fibonacci-tal. Vi kan skrive en tilsvarende simpel funktion, der udregner det n te element public long fib(int n) { if (n <= 1) return 1; else return fib(n - 1) + fib(n - 2); Et kald af fib(4) vil give anledning til følgende træstruktur af procedurekald fib(3) fib(2) fib(1) fib(1) fib(0) fib(4) fib(2) fib(1) fib(0) 2.2 Rekursiv grafik: Fraktaler En fraktal er en kurve, som intetsteds er glat nok til at kunne approximeres med linjestykker. Et simpelt eksempel på en fraktal er den såkaldte Kochkurve, der opstår som grænseværdien (for n gående mod uendelig) af Kochlinjen af orden n. En Koch-linje af orden n opnås ud fra en Koch-linje af orden n 1 ved at give alle linjestykker i den et trekantet hak. De følgende er Koch-linjer af orden 1, 2 og 4 11

12 Vi kan skrive en meget simpel rekursiv procedure, der tegner en Koch-linje af en given orden. Vi anvender et Crayon objekt c, hvor metoden turn ændrer blyantens tegneretning med et specificeret antal grader og metoden move trækker blyanten den specificerede længde i den aktuelle tegneretning så et linjestykke tegnes. private void kochline(int order, double len) { if (order == 0) c.move(len); else if (order > 0) { kochline(order-1,len/3); c.turn(-60); kochline(order-1,len/3); c.turn(120); kochline(order-1,len/3); c.turn(-60); kochline(order-1,len/3); Bemærk, at vi foretager 4 rekursive kald, og at vi her har et eksempel på en rekursiv procedure, hvor en ikke-rekursiv formulering forekommer at være endog meget besværlig. Følgende program tegner en snefnug-lignende figur bestående af tre Kochlinjer (kildekoden til Crayon-klassen er udeladt men kan findes i eksempelkataloget). import java.awt.*; public class KochLineTest { private static Crayon c; private static void kochline(int order, double len) {... 12

13 public static void main(string[] args) { c = new Crayon(Color.red,1); c.jumpto(50,150); kochline(4,300); c.turn(120); kochline(4,300); c.turn(120); kochline(4,300); c.turn(120); 2.3 Gensidig rekursion: Evaluering af udtryk Det er tilladt at definere to metoder som gensidigt rekursive, f.eks.: public void ned(int n) { while(n%2==0) n = n/2; op(n); public void op(int n) { 13

14 if (n>1) { n = 3*n+1; ned(n); Det er ukendt om kald af metoden ned standser for alle input (aktuelle parametre)! Som et simpelt men realistisk eksempel på gensidig rekursion vil vi betragte evaluering af simple aritmetiske udtryk. F.eks. følgende (3 + 4) 5 (1 (2 (3 (4 5)))) Udregningen af et udtryk kompliceres af at * og / binder tættere end + og - ligesom man kan gruppere deludtryk med parenteser. Men dette indfanges af de følgende syntax diagrammer, som samtidig afgrænser præcis hvilke udtryk vi ønsker at kunne evaluere: <expression> <term> + - <term> <factor> * / <factor> ( <expression> ) <number> Ved at anvende syntaxdiagrammerne vil man se at <expression> kan danne <term>+<term>, hvor denførste<term> via <factor> genererer tallet 3,mens 14

15 den anden <term> først danner <factor>*<factor> og derefter danner de to <factor> henholdsvis tallene 4 og 5. Denne derivation af tekststrengen 3+4*5 kan opskrives i et syntaxtræ. <expression> <term> <term> <factor> <factor> <factor> <number> <number> <number> * 5 Det er her tillige gjort for (3+4)*5. <expression> <term> <factor> <factor> <expression> <number> <term> <term> <factor> <number> <factor> <number> ( ) * 5 På baggrund af syntaxdiagrammerne er der naturligt at skrive 3 gensidigt rekursive metoder getexpressionvalue, gettermvalue, getfactorvalue, der kan beregne værdien af henholdsvis et udtryk, en term og en faktor. 15

16 Da hele udtrykket bliver leveret som en tekst er det praktisk at have en hjælpeklasse ExpressionTokenizer til at levere leksikalske symboler et ad gangen, hvor et leksikalsk symbol er en tekst bestående af cifre, eller en af "+", -", "*", "/", "(", ")". EnExpressionTokenizer har to metoder nexttoken() og peektoken(), som begge returnerer det næste leksikalske symbol. Forskellen mellem de to metoder er at nexttoken() er en mutator der skifter ExpressionTokenizer objektets tilstand et (leksikalsk) symbol frem, mens peektoken() efterlader objektets tilstand uændret. Detaljerne i implementationen af klassen kan findes i eksempelkataloget. De 3 gensidigt rekursive metoder defineres i klassen Evaluator: public class Evaluator { public Evaluator(String anexpression) { tokenizer = new ExpressionTokenizer(anExpression); public int getexpressionvalue() {... public int gettermvalue() {... public int getfactorvalue() {... private ExpressionTokenizer tokenizer; Metoden til beregning af et udtryk indeholder i overensstemmelse med syntaxdigrammet et ubetinget kald af metoden til beregning af termer public int getexpressionvalue() { int value = gettermvalue(); while ("+".equals(tokenizer.peektoken()) "-".equals(tokenizer.peektoken())) { String operator = tokenizer.nexttoken(); int value2 = gettermvalue(); if ("+".equals(operator)) value = value + value2; else value = value - value2; return value; 16

17 Metoden til beregning af en term indeholder i overensstemmelse med syntaxdigrammet et ubetinget kald af metoden til beregning af faktorer public int gettermvalue() { int value = getfactorvalue(); while ("*".equals(tokenizer.peektoken()) "/".equals(tokenizer.peektoken())) { String operator = tokenizer.nexttoken(); int value2 = getfactorvalue(); if ("*".equals(operator)) value = value * value2; else value = value / value2; return value; Metoden til beregning af en faktor har en rekursionsbetingelse der sikrer at et rekursivt kald af metoden til beregning af udtryk kun foretages under visse betingelser, så der er mulighed for at rekursionen kan stoppe public int getfactorvalue() { int value; if ("(".equals(tokenizer.peektoken())) { tokenizer.nexttoken(); value = getexpressionvalue(); tokenizer.nexttoken(); // read ")" else value = Integer.parseInt(tokenizer.nextToken()); return value; 2.4 Randomisering og rekursion Her er nogle eksempler på træer (blomster) der er genereret ved en simpel rekursiv teknik kombineret med randomisering. 17

18 Ved genereringen af et træ opfattes det enten som bestående af en stamme med flere mindre træer (grene) på toppen, eller blot som værende et enkelt blad. 18

19 3 mindre træer (grene) = Træ stamme De foranstående figurer er genereret ved at lade et træ bestå af en stamme med 6 grene (deltræer). Vinklen mellem grenene er 13 grader, og et deltræ tegnes ikke nødvendigvis. Faktisk er sandsynligheden for at et deltræ tegnes kun 40%. På figurerne er den første stamme tegnet med bredde 6 og bredden aftager derpå en for hvert rekursionsskridt. Når bredden når ned på 0 tegnes et blad i stedet for et træ. Dvs. bladet tegnes ikke nødvendigvis men kun med sandsynlighed 30%. Stammer tegnes i en tilfældig farve, der delvist afhænger af bredden. For at gøre udtegningen relativt simpel anvendes en udgave af Crayon klassen, som tillader ændring af farve og bredde på en farveblyant (metoderne setcolor, setwidth). import java.awt.*; public class TreeTest { private static CCrayon c; /** tree draws a random tree n - order of tree len - length of trunk */ public static void tree(int n, int len) {... /** leaf draws maybe(!) a leaf of a random color len - side length of leaf */ private static void leaf(int len) {... private final static int BRANCH_MAX = 6; private final static int BRANCH_ANGLE = 13; private final static double BRANCH_PROB = 0.4; private final static double LEAF_PROB = 0.3; 19

20 public static void main(string[] args) { c = new CCrayon(); c.jumpto(200,400); c.turn(-90); tree(6,40); Den basale rekursive metode til udtegning af et træ ser således ud: private static void tree(int n, int len) { if (n==0) leaf(len/2); else { int bias = (int) (2*Math.random()); if (n+bias >=6) c.setcolor(color.black); else if (n+bias >=4) c.setcolor(color.gray); else c.setcolor(color.green); c.setwidth(2*n); c.move(len); c.turn((branch_angle*(branch_max-1))/2.0); for (int i = 1 ; i<=branch_max ; i = i+1 ) { if (Math.random()<BRANCH_PROB) tree(n-1, len-2); c.turn(-branch_angle); c.turn((branch_angle*(branch_max+1))/2.0); c.turn(180); c.jump(len); c.turn(-180); //return pen to base of tree Og et blad udtegnes med denne metode private static void leaf(int len) { if (Math.random()<LEAF_PROB) { if (Math.random()<0.5) c.setcolor(color.red); else c.setcolor(color.yellow); c.setwidth(2); c.turn(-branch_angle/2.0); c.move(len); c.turn(branch_angle); c.move(len); c.turn(180-branch_angle); c.move(len); c.turn(branch_angle); c.move(len); c.turn(180-branch_angle/2.0); 20

21 Ved at ændre på konstanterne kan man frembringe træer (planter, blomster) med andre karakteristika. 2.5 Generelt om rekursion Ligesom while-sætninger kan kald af rekursive metoder give sætninger, hvis udførelse aldrig terminerer. Det simpleste eksempel er public void loopingrecursivemethod() { loopingrecursivemethod(); Et kald af metoden loopingrecursivemethod fører til et nyt, rekursivt kald af loopingrecursivemethod, der fører til endnu et rekursivt kald af loopingrecursivemethod og så videre. Hvis enhver instans af en rekursiv metode udfører endnu et rekursivt kald, så vil udførelsen naturligvis aldrig stoppe. Det er derfor vigtigt, at enhver rekursiv metode indeholder en rekursionsbetingelse, der på et tidspunkt tillader proceduren at undgå flere rekursive kald. Hvis man kigger tilbage på de forskellige eksempler i dette afsnit vil man se at de alle indeholder en sådan rekursionsbetingelse. Det gælder også de gensidigt rekursive metoder til beregning af udtryk hvor getfactorvalue kan undgå det rekursive kald af getexpressionvalue, der er styret af rekursionsbetingelsen. En rekursiv løsning kan være betydeligt lettere at forstå (og programmere) end en iterativ løsning. F.eks. vil det være kompliceret (omend bestemt muligt) at lave en iterativ algoritme til at tegne Koch kurver. Til gengæld er en rekursiv løsning i nogle tilfælde meget ineffektiv. F.eks. vil den rekursive Fibonacci metode tage meget længere tid at udføre end en tilsvarende iterativ metode (hvorfor?) public long iterativefib(int n) { if (n <= 1) return 1; long fold = 1; long fold2 = 1; long fnew = 1; for (int i = 2; i <= n; i++) { fnew = fold + fold2; fold2 = fold; fold = fnew; return fnew; 21

22 3 Rekursive datastrukturer I kurset er tidligere introduceret rekursive metoder, dvs. algoritmer, hvis beskrivelse er selvrefererende. Tilsvarende kan man tale om rekursive strukturer. Eksempler: En liste består af et enkelt element efterfulgt af en (kortere) liste eller listen er tom. Et filsystem består af et directory indeholdende en række mindre filsystemer eller filsystemet består af en enkelt fil Ved definitionen af en rekursiv metode er der vigtigt at give metoden mulighed for at standse. Tilsvarende er der for både listen og filsystemet lagt en smutvej ud af rekursionen, listen kan være tom og filsystemet kan bestå af en enkelt fil. 3.1 Rekursive træer Filsystemet er et eksempel på en rekursiv træstruktur, og denne note vil anvende rekursive binære udtrykstræer som gennemgående eksempel. Udtrykket (6+((8 2) 1)) kan opfattes som bestående af en operator "+"og to (mindre) udtryk "6"og "((8 2) 1)". operator deludtryk * Man kan faktiske beskrive alle mulige aritmetiske udtryk (over +, ) rekursivt. Enten består udtrykket af en operator og to deludtryk eller også består udtrykket af et tal alene. En sådan rekursiv struktur repræsenteres naturligt ved et interface og implementerende klasser. For udtrykstræernes vedkommende får man 22

23 public interface Tree { public class Leaf implements Tree { private int value; public Leaf(int n) { value = n; public int getvalue() { return value; public class Node implements Tree { private Operator op; private Tree left; private Tree right; public Node(Tree l, Operator o, Tree r) { op = o; left = l; right = r; public Operator getop() { return op; public Tree getleft() { return left; public Tree getright() { return right; hvor Operator er en Enumerated Type som beskrevet i Horstmann side (2.udgave). public enum Operator { PLUS("+"), MINUS("-"), MULT("*"), DIV("/"); 23

24 private String name; private Operator(String name) { this.name = name; public String tostring() { return name; public int apply(int left, int right) { if (this == Operator.PLUS) return left + right; if (this == Operator.MINUS) return left - right; if (this == Operator.MULT) return left * right; /* this == Operator.DIV */ return left / right; Det tidligere nævnte udtryk kan repræsenteres ved Tree t = new Node( new Leaf(6), Operator.PLUS, new Node(new Node( new Leaf(8),Operator.MULT,new Leaf(2)), Operator.MINUS, new Leaf(1))); Næsten alle former for anvendelse af et udtrykstræ involverer et gennemløb af træet. Hvis værdien af udtrykket skal beregnes, må man nødvendigvis kende alle operatorer og alle tal i hele træet. Denne information kan opsamles ved et gennemløb. Et gennemløb kan ske på flere måder, men et rekursivt postorder gennemløb vil opsamle informationen i en rækkefølge der er belejlig for beregning af udtrykkets værdi. Hvis et udtryk er sammensat, vil et postorder gennemløb først gennemløbe de to deludtryk (rekursivt) og til sidst læse operatoren. 3. Anvend operator * 1 1. Evaluer 2. Evaluer

25 evaluate(v): if v is a leaf: return number stored at v else x = evaluate(left subexpression stored at v) y = evaluate(right subexpression stored at v) return x o y (where o is operator stored at v) I Java kan et sådant rekursivt gennemløb repræsenteres på flere måder. På klassisk vis kan man lave en enkelt rekursiv metode, som svarer ret nøje til pseudokoden. public int evaluate(tree w) { int answer; if ( w instanceof Leaf ) answer = ((Leaf)w).getValue(); else { Tree l = ((Node)w).getLeft(); Tree r = ((Node)w).getRight(); Operator o = ((Node)w).getOp(); int left_answer = evaluate(l); int right_answer = evaluate(r); answer = o.apply(left_answer,right_answer); return answer; Java-koden er omstændelig, specielt fordi det er nødvendigt at teste om et Tree objekt faktisk er et blad eller en indre træknude, og derefter lave casts afhængig af testets udfald. Casts er påtvunget af Java-sproget, men instanceof-testet sikrer at den rekursive metode kan standse fremfor at kalde sig selv i en uendelighed, og dette test kan synes uomgængeligt. Men det er en forkert betragtning. Ved at forlægge evalueringen til metoder i de tre klasser kan man undgå casts og test. Interfacet tilføjes en metode getvalue, som klasserne skal implementere. På denne måde kan metodekaldet evaluate(t) erstattes af kaldet t.getvalue() for t af type Tree. 25

26 public interface Tree { public int getvalue() ; public class Leaf implements Tree {... public int getvalue() { return value; public class Node implements Tree {... public int getvalue() { return op.apply(left.getvalue(),right.getvalue()); Den resulterende javakode er simplere, men der er en ny ulempe. Det har været nødvendigt at ændre de oprindelige tre klasser. Hvis man ønsker at gennemløbe et udtrykstræ med et nyt formål, f.eks. udskrift af udtrykket, så vil det være nødvendigt at tilføje klasserne en metode skræddersyet til netop udskrift, og dermed igen ændre de oprindelige klasser. 3.2 Visitor Visitor designmønstret undgår at føje en ekstra metode til alle klasser i hierarkiet for hver type gennemløb. Metoderne samles i stedet i en ny klasse iføl- 26

27 ge en skabelon der er angivet i et TreeVisitor-interface. Derudover skal der en gang for alle tilføjes en enkelt metode accept til hver klasse i hierarkiet. Disse accept-metoder sørger for at lave call-back til de anvendelsesspecifikke metoder samlet i den TreeVisitor-implementerende klasse. For beregning af et udtryks værdi benyttes følgende struktur: De generelle klasser/interface: public interface TreeVisitor<T> { public T visitleaf(leaf l); public T visitnode(node n); public interface Tree { public <T> T accept(treevisitor<t> v) ; public int getvalue() ; public class Leaf implements Tree { 27

28 ... public <T> T accept(treevisitor<t> v) { return v.visitleaf(this); public class Node implements Tree {... public <T> T accept(treevisitor<t> v) { return v.visitnode(this); Den anvendelsesspecifikke klasse: public class EvaluateVisitor implements TreeVisitor<Integer> { public Integer visitleaf(leaf l) { return l.getvalue(); public Integer visitnode(node n) { int l = n.getleft().accept(this); int r = n.getright().accept(this); return n.getop().apply(l,r); F.eks. kan værdien af udtrykket t udskrives med System.out.println(t.accept(new EvaluateVisitor())). For at lave en anden type gennemløb, er det tilstrækkeligt at lave en ny implementation af TreeVisitor. Som eksempel betragtes udskrift af selve udtrykket. Det foregår naturligt ved et rekursivt in-order gennemløb, dvs. først udskrives venstre deludtryk, dernæst operatoren, og til sidst højre deludtryk. text(v): if v is a leaf: return number else return "(" + text( left subexpression) + operator + text( right subexpression ) 28

29 + ")" ( 6 + ((8 * 2) - 1) ) 2. Print * 1 1. Print 3. Print 8 2 Bemærk at udtrykket ikke udskrives direkte, men den relevante tekst beregnes (uden sideeffekter) og returneres. In-order gennemløbet kan i Java specificeres af følgende klasse public class PrintVisitor implements TreeVisitor<String> { public String visitleaf(leaf l) { return new Integer(l.getValue()).toString(); public String visitnode(node n) { return ("(" + n.getleft().accept(this) + n.getop() + n.getright().accept(this) + ")"); Udtrykket t kan udskrives med sætningen System.out.println(t.accept(new PrintVisitor())). I stedet for at skrive udtrykket som tekst, kunne man ønske at tegne det grafisk som et træ 29

30 y l=(1,1) 2 * 1 c=(2,0) r=(6,1) x Ved et in-order gennemløb kan man tegne træet fra venstre mod højre, således at hvert symbol (operator eller tal), der udskrives, tegnes en enhed længere mod højre end det forrige, samtidigt skal roden i et deludtryk tegnes en enhed længere nede end udtrykkets operator. Hvis stregerne, der repræsenterer grenene udelades kan tallene og operatorerne tegnes korrekt af følgende pseudokode: state : a current drawing position (x,y) initially (x,y) = (0,0) drawsymbol(s): increment x and draw s; draw(v): if v is a leaf: drawsymbol( number ); else increment y; draw( left subexpression ); decrement y; drawsymbol( operator ); increment y; draw( right subexpression ); decrement y; For at tilføje gren-stregerne til tegningen er det nødvendigt at gemme koordinaterne for en linjes første endepunkt indtil positionen af linjens andet endepunkt er kendt (og linjen kan tegnes). I den modificerede pseudokode 30

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Finn Nordbjerg 1/9 Indledning I det følgende introduceres et par abstrakte

Læs mere

Kapitel 2 Tal og variable

Kapitel 2 Tal og variable Tal og variable Uden tal ingen matematik - matematik handler om tal og anvendelse af tal. Matematik beskæftiger sig ikke udelukkende med konkrete problemer fra andre fag, og de konkrete tal fra andre fagområder

Læs mere

Rekursion C#-version

Rekursion C#-version Note til Programmeringsteknologi Akademiuddannn i Informationsteknologi Rekursion C#-version Finn Nordbjerg 1 Rekursion Rekursionsbegrebet bygger på, at man beskriver noget ved "sig selv". Fx. kan tallet

Læs mere

Oprids over grundforløbet i matematik

Oprids over grundforløbet i matematik Oprids over grundforløbet i matematik Dette oprids er tænkt som en meget kort gennemgang af de vigtigste hovedpointer vi har gennemgået i grundforløbet i matematik. Det er en kombination af at repetere

Læs mere

Maple. Skærmbilledet. Vi starter med at se lidt nærmere på opstartsbilledet i Maple. Værktøjslinje til indtastningsområdet. Menulinje.

Maple. Skærmbilledet. Vi starter med at se lidt nærmere på opstartsbilledet i Maple. Værktøjslinje til indtastningsområdet. Menulinje. Maple Dette kapitel giver en kort introduktion til hvordan Maple 12 kan benyttes til at løse mange af de opgaver, som man bliver mødt med i matematiktimerne på HHX. Skærmbilledet Vi starter med at se lidt

Læs mere

Induktive og rekursive definitioner

Induktive og rekursive definitioner Induktive og rekursive definitioner Denne note omhandler matematiske objekter, som formelt er opbygget fra et antal basale byggesten, kaldet basistilfælde eller blot basis, ved gentagen brug af et antal

Læs mere

Opgave 1 Regning med rest

Opgave 1 Regning med rest Den digitale signatur - anvendt talteori og kryptologi Opgave 1 Regning med rest Den positive rest, man får, når et helt tal a divideres med et naturligt tal n, betegnes rest(a,n ) Hvis r = rest(a,n) kan

Læs mere

Om binære søgetræer i Java

Om binære søgetræer i Java Om binære søgetræer i Java Mads Rosendahl 7. november 2002 Resumé En fix måde at gemme data på er i en træstruktur. Måden er nyttig hvis man får noget data ind og man gerne vil have at det gemt i en sorteret

Læs mere

Kompendium i faget. Matematik. Tømrerafdelingen. 2. Hovedforløb. Y = ax 2 + bx + c. (x,y) Svendborg Erhvervsskole Tømrerafdelingen Niels Mark Aagaard

Kompendium i faget. Matematik. Tømrerafdelingen. 2. Hovedforløb. Y = ax 2 + bx + c. (x,y) Svendborg Erhvervsskole Tømrerafdelingen Niels Mark Aagaard Kompendium i faget Matematik Tømrerafdelingen 2. Hovedforløb. Y Y = ax 2 + bx + c (x,y) X Svendborg Erhvervsskole Tømrerafdelingen Niels Mark Aagaard Indholdsfortegnelse for H2: Undervisningens indhold...

Læs mere

3. klasse 6. klasse 9. klasse

3. klasse 6. klasse 9. klasse Børne- og Undervisningsudvalget 2012-13 BUU Alm.del Bilag 326 Offentligt Elevplan 3. klasse 6. klasse 9. klasse Matematiske kompetencer Status tal og algebra sikker i, er usikker i de naturlige tals opbygning

Læs mere

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet)

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet) dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet) Efterår 2009 1 Simpel aritmetik på maskinniveau I SCO, appendix A, er det beskrevet, hvordan man adderer ikke-negative heltal

Læs mere

Grundlæggende Matematik

Grundlæggende Matematik Grundlæggende Matematik Hayati Balo, AAMS August 2012 1. Matematiske symboler For at udtrykke de verbale udsagn matematisk korrekt, så det bliver lettere og hurtigere at skrive, indføres en række matematiske

Læs mere

Repræsentation af tal

Repræsentation af tal Repræsentation af tal DM526 Rolf Fagerberg, 2009 Bitmønstre 01101011 0001100101011011... Bitmønstre skal fortolkes for at have en betydning: Tal (heltal, kommatal) Bogstaver Computerinstruktion (program)

Læs mere

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger

Læs mere

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo Philip Bille Nærmeste naboer. Vedligehold en dynamisk mængde S af elementer. Hvert element har en nøgle key[] og satellitdata data[]. operationer. PREDECESSOR(k): returner element med største nøgle k.

Læs mere

Symbolbehandlingskompetencen er central gennem arbejdet med hele kapitlet i elevernes arbejde med tal og regneregler.

Symbolbehandlingskompetencen er central gennem arbejdet med hele kapitlet i elevernes arbejde med tal og regneregler. Det første kapitel i grundbogen til Kolorit i 8. klasse handler om tal og regning. Kapitlet indledes med, at vores titalssystem som positionssystem sættes i en historisk sammenhæng. Gennem arbejdet med

Læs mere

matx.dk Differentialregning Dennis Pipenbring

matx.dk Differentialregning Dennis Pipenbring mat.dk Differentialregning Dennis Pipenbring 0. december 00 Indold Differentialregning 3. Grænseværdi............................. 3. Kontinuitet.............................. 8 Differentialkvotienten

Læs mere

Kapitel 7 Matematiske vækstmodeller

Kapitel 7 Matematiske vækstmodeller Matematiske vækstmodeller I matematik undersøger man ofte variables afhængighed af hinanden. Her ser man, at samme type af sammenhænge tit forekommer inden for en lang række forskellige områder. I kapitel

Læs mere

Evaluering af matematik undervisning

Evaluering af matematik undervisning Evaluering af matematik undervisning Udarbejdet af Khaled Zaher, matematiklærer 6-9 klasse og Boushra Chami, matematiklærer 2-5 klasse Matematiske kompetencer. Fællesmål efter 3.klasse indgå i dialog om

Læs mere

Eleven kan handle med overblik i sammensatte situationer med matematik. Eleven kan anvende rationale tal og variable i beskrivelser og beregninger

Eleven kan handle med overblik i sammensatte situationer med matematik. Eleven kan anvende rationale tal og variable i beskrivelser og beregninger Kompetenceområde Efter klassetrin Efter 6. klassetrin Efter 9. klassetrin Matematiske kompetencer handle hensigtsmæssigt i situationer med handle med overblik i sammensatte situationer med handle med dømmekraft

Læs mere

Kvadratrodsberegning ved hjælp af de fire regningsarter

Kvadratrodsberegning ved hjælp af de fire regningsarter Kvadratrodsberegning ved hjælp af de fire regningsarter Tidligt i historien opstod et behov for at beregne kvadratrødder med stor nøjagtighed. Kvadratrødder optræder i forbindelse med retvinklede trekanter,

Læs mere

Matematik. Trinmål 2. Nordvestskolen 2006 Forord. Trinmål 2 (4. 6. klasse)

Matematik. Trinmål 2. Nordvestskolen 2006 Forord. Trinmål 2 (4. 6. klasse) Matematik Trinmål 2 Nordvestskolen 2006 Forord Forord For at sikre kvaliteten og fagligheden i folkeskolen har Undervisningsministeriet udarbejdet faghæfter til samtlige fag i folkeskolen med bindende

Læs mere

Fibonacci følgen og Det gyldne snit

Fibonacci følgen og Det gyldne snit Fibonacci følgen og Det gyldne snit af John V. Petersen Indhold Fibonacci... 2 Fibonacci følgen og Binets formel... 3... 4... 6... 6 Bevis for Binets formel... 7 Binets formel fortæller os, at...... 9...

Læs mere

Matematik - undervisningsplan

Matematik - undervisningsplan I 4. klasse starter man på andet forløb i matematik, der skal lede frem mod at eleverne kan opfylde fagets trinmål efter 6. klasse. Det er dermed det som undervisningen tilrettelægges ud fra og målsættes

Læs mere

Crash Course i Programmering. HumTek, RUC

Crash Course i Programmering. HumTek, RUC Crash Course i Programmering HumTek, RUC Kursus mål At give en basal introduktion til programmering i sproget Processing At give et overblik over sprogets potentiale At have det sjovt :-) Kursus form Meget

Læs mere

APPENDIX A INTRODUKTION TIL DERIVE

APPENDIX A INTRODUKTION TIL DERIVE APPENDIX A INTRODUKTION TIL DERIVE z x y z=exp( x^2 0.5y^2) CAS er en fællesbetegnelse for matematikprogrammer, som foruden numeriske beregninger også kan regne med symboler og formler. Det betyder: Computer

Læs mere

Selam Friskole Fagplan for Matematik

Selam Friskole Fagplan for Matematik Selam Friskole Fagplan for Matematik Formål Formålet med undervisningen er, at eleverne udvikler matematiske kompetencer og opnår viden og kunnen således, at de bliver i stand til at begå sig hensigtsmæssigt

Læs mere

Matematik. Grundforløbet. Mike Auerbach (2) Q 1. y 2. y 1 (1) x 1 x 2

Matematik. Grundforløbet. Mike Auerbach (2) Q 1. y 2. y 1 (1) x 1 x 2 Matematik Grundforløbet (2) y 2 Q 1 a y 1 P b x 1 x 2 (1) Mike Auerbach Matematik: Grundforløbet 1. udgave, 2014 Disse noter er skrevet til matematikundervisning i grundforløbet på stx og kan frit anvendes

Læs mere

og til summer af stambrøker. Bemærk: De enkelte brøker kan opskrives på flere måder som summer af stambrøker.

og til summer af stambrøker. Bemærk: De enkelte brøker kan opskrives på flere måder som summer af stambrøker. Hvad er en brøk? Når vi taler om brøker i dette projekt, mener vi tal på formen a, hvor a og b er hele tal (og b b 0 ), fx 2,, 3 og 3 7 13 1. Øvelse 1 Hvordan vil du forklare, hvad 7 er? Brøker har været

Læs mere

Her er et spørgsmål, du måske aldrig har overvejet: kan man finde to trekanter med samme areal?

Her er et spørgsmål, du måske aldrig har overvejet: kan man finde to trekanter med samme areal? Her er et spørgsmål, du måske aldrig har overvejet: kan man finde to trekanter med samme areal? Det er ret let at svare på: arealet af en trekant, husker vi fra vor kære folkeskole, findes ved at gange

Læs mere

2 Erik Vestergaard www.matematikfysik.dk

2 Erik Vestergaard www.matematikfysik.dk Erik Vestergaard www.matematikfysik.dk Erik Vestergaard www.matematikfysik.dk 3 Lineære funktioner En vigtig type funktioner at studere er de såkaldte lineære funktioner. Vi skal udlede en række egenskaber

Læs mere

Baggrundsnote om logiske operatorer

Baggrundsnote om logiske operatorer Baggrundsnote om logiske operatorer Man kan regne på udsagn ligesom man kan regne på tal. Regneoperationerne kaldes da logiske operatorer. De tre vigtigste logiske operatorer er NOT, AND og. Den første

Læs mere

Differential- regning

Differential- regning Differential- regning del () f () m l () 6 Karsten Juul Indhold Tretrinsreglen 59 Formler for differentialkvotienter64 Regneregler for differentialkvotienter67 Differentialkvotient af sammensat funktion7

Læs mere

Algebra. Dennis Pipenbring, 10. februar 2012. matx.dk

Algebra. Dennis Pipenbring, 10. februar 2012. matx.dk matx.dk Algebra Dennis Pipenbring, 10. februar 2012 nøgleord andengradsligning, komplekse tal, ligningsløsning, ligningssystemer, nulreglen, reducering Indhold 1 Forord 4 2 Indledning 5 3 De grundlæggende

Læs mere

ALMINDELIGT ANVENDTE FUNKTIONER

ALMINDELIGT ANVENDTE FUNKTIONER ALMINDELIGT ANVENDTE FUNKTIONER I dette kapitel gennemgås de almindelige regnefunktioner, samt en række af de mest nødvendige redigerings- og formateringsfunktioner. De øvrige redigerings- og formateringsfunktioner

Læs mere

matx.dk Enkle modeller

matx.dk Enkle modeller matx.dk Enkle modeller Dennis Pipenbring 28. juni 2011 Indhold 1 Indledning 4 2 Funktionsbegrebet 4 3 Lineære funktioner 8 3.1 Bestemmelse af funktionsværdien................. 9 3.2 Grafen for en lineær

Læs mere

5. KLASSE UNDERVISNINGSPLAN MATEMATIK

5. KLASSE UNDERVISNINGSPLAN MATEMATIK Lærer: SS Forord til faget i klassen Vi vil i matematik arbejde differentieret i hovedemnerne geometri, statistik og sandsynlighed samt tal og algebra. Vi vil i 5. kl. dagligt arbejde med matematisk kommunikation

Læs mere

En forståelsesramme for de reelle tal med kompositioner.

En forståelsesramme for de reelle tal med kompositioner. 1 En forståelsesramme for de reelle tal med kompositioner. af Ulrich Christiansen, sem.lekt. KDAS. Den traditionelle tallinjemodel, hvor tallene svarer til punkter langs tallinjen, dækker fornuftigt (R,

Læs mere

Integralregning Infinitesimalregning

Integralregning Infinitesimalregning Udgave 2.1 Integralregning Infinitesimalregning Noterne gennemgår begreberne integral og stamfunktion, og anskuer dette som et redskab til bestemmelse af arealer under funktioner. Noterne er supplement

Læs mere

Årsplan for matematik på mellemtrinnet 2015-2016 (Lærere: Ebba Frøslev og Esben O. Lauritsen)

Årsplan for matematik på mellemtrinnet 2015-2016 (Lærere: Ebba Frøslev og Esben O. Lauritsen) Årsplan for matematik på mellemtrinnet 2015-2016 (Lærere: Ebba Frøslev og Esben O. Lauritsen) Bog: Vi bruger grundbogssystemet Format, som er et fleksibelt matematiksystem, der tager udgangspunkt i læringsstile.

Læs mere

Broer, skak og netværk Carsten Thomassen: Naturens Verden 10, 1992, s. 388-393.

Broer, skak og netværk Carsten Thomassen: Naturens Verden 10, 1992, s. 388-393. Broer, skak og netværk Side 1 af 6 Broer, skak og netværk Carsten Thomassen: Naturens Verden 10, 1992, s. 388-393. Eksempler på praktiske anvendelser af matematik og nogle uløste problemer Indledning Figur

Læs mere

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Programmering Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Oversigt Undervisningen Hvad er programmering Hvordan er et program organiseret? Programmering og fysik Nobelprisen

Læs mere

ØVEHÆFTE FOR MATEMATIK C FORMLER OG LIGNINGER

ØVEHÆFTE FOR MATEMATIK C FORMLER OG LIGNINGER ØVEHÆFTE FOR MATEMATIK C FORMLER OG LIGNINGER INDHOLDSFORTEGNELSE 0. FORMELSAMLING TIL FORMLER OG LIGNINGER... 2 Tal, regneoperationer og ligninger... 2 Ligning med + - / hvor x optræder 1 gang... 3 IT-programmer

Læs mere

Det er en af de hyppigst forekommende udregninger i den elementære talbehandling at beregne gennemsnit eller middeltal af en række tal.

Det er en af de hyppigst forekommende udregninger i den elementære talbehandling at beregne gennemsnit eller middeltal af en række tal. Tre slags gennemsnit Allan C. Malmberg Det er en af de hyppigst forekommende udregninger i den elementære talbehandling at beregne gennemsnit eller middeltal af en række tal. For mange skoleelever indgår

Læs mere

Komplekse tal. Mikkel Stouby Petersen 27. februar 2013

Komplekse tal. Mikkel Stouby Petersen 27. februar 2013 Komplekse tal Mikkel Stouby Petersen 27. februar 2013 1 Motivationen Historien om de komplekse tal er i virkeligheden historien om at fjerne forhindringerne og gøre det umulige muligt. For at se det, vil

Læs mere

Fagårsplan 10/11 Fag: Matematik Klasse: 7.ABC Lærer: Henrik Stillits. Fagområde/ emne

Fagårsplan 10/11 Fag: Matematik Klasse: 7.ABC Lærer: Henrik Stillits. Fagområde/ emne Fagårsplan 10/11 Fag: Matematik Klasse: 7.ABC Lærer: Henrik Stillits. Fagområde/ emne Matematiske færdigheder Grundlæggende færdigheder - plus, minus, gange, division (hele tal, decimaltal og brøker) Identificer

Læs mere

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser 3/10/96 Seminaret den 26/10 vil omhandle den sidste fase af analysen og de første skridt i kodegenereringen. Det drejer sig om at finde betydningen af programmet, nu hvor leksikalsk og syntaktisk analyse

Læs mere

Mujtaba og Farid Integralregning 06-08-2011

Mujtaba og Farid Integralregning 06-08-2011 Indholdsfortegnelse Integral regning:... 2 Ubestemt integral:... 2 Integrationsprøven:... 3 1) Integration af potensfunktioner:... 3 2) Integration af sum og Differens:... 3 3) Integration ved Multiplikation

Læs mere

Tal. Vi mener, vi kender og kan bruge følgende talmængder: N : de positive hele tal, Z : de hele tal, Q: de rationale tal.

Tal. Vi mener, vi kender og kan bruge følgende talmængder: N : de positive hele tal, Z : de hele tal, Q: de rationale tal. 1 Tal Tal kan forekomme os nærmest at være selvfølgelige, umiddelbare og naturgivne. Men det er kun, fordi vi har vænnet os til dem. Som det vil fremgå af vores timer, har de mange overraskende egenskaber

Læs mere

Numeriske metoder. Af: Alexander Bergendorff, Frederik Lundby Trebbien Rasmussen og Jonas Degn. Side 1 af 15

Numeriske metoder. Af: Alexander Bergendorff, Frederik Lundby Trebbien Rasmussen og Jonas Degn. Side 1 af 15 Numeriske metoder Af: Alexander Bergendorff, Frederik Lundby Trebbien Rasmussen og Jonas Degn Side 1 af 15 Indholdsfortegnelse Matematik forklaring... 3 Lineær regression... 3 Numerisk differentiation...

Læs mere

Invarianter. 1 Paritet. Indhold

Invarianter. 1 Paritet. Indhold Invarianter En invariant er en størrelse der ikke ændrer sig, selv om situationen ændrer sig. I nogle kombinatorikopgaver hvor man skal undersøge hvilke situationer der er mulige, er det ofte en god idé

Læs mere

Binære søgetræer. Nærmeste naboer Binære søgetræer Indsættelse Predecessor og successor Sletning Trægennemløb. Philip Bille

Binære søgetræer. Nærmeste naboer Binære søgetræer Indsættelse Predecessor og successor Sletning Trægennemløb. Philip Bille Binære søgetræer Nærmeste naboer Binære søgetræer Indsættelse Predecessor og successor Sletning Trægennemløb Philip Bille Binære søgetræer Nærmeste naboer Binære søgetræer Indsættelse Predecessor og successor

Læs mere

Matema10k. Matematik for hhx C-niveau. Arbejdsark til kapitlerne i bogen

Matema10k. Matematik for hhx C-niveau. Arbejdsark til kapitlerne i bogen Matema10k Matematik for hhx C-niveau Arbejdsark til kapitlerne i bogen De følgende sider er arbejdsark og opgaver som kan bruges som introduktion til mange af bogens kapitler og underemner. De kan bruges

Læs mere

Årsplan 9. klasse matematik 2013-2014 Uge Emne Faglige mål Trinmål Materialer/ systemer 33 Årsprøven i matematik

Årsplan 9. klasse matematik 2013-2014 Uge Emne Faglige mål Trinmål Materialer/ systemer 33 Årsprøven i matematik Årsplan 9. klasse matematik 2013-2014 33 Årsprøven i matematik Årsprøve og rettevejledledning 34-35 36 og løbe nde Talmængder og regnemetoder Mundtlig matematik 37 Fordybelses uge 38-39 Procent - Gennemgå

Læs mere

FAGLIG REGNING Pharmakon, farmakonomuddannelsen september 2007

FAGLIG REGNING Pharmakon, farmakonomuddannelsen september 2007 FAGLIG REGNING Pharmakon, farmakonomuddannelsen september 2007 Indholdsfortegnelse Side De fire regningsarter... 3 Flerleddede størrelser... 5 Talbehandling... 8 Forholdsregning... 10 Procentregning...

Læs mere

Introduktion Til Konkurrenceprogrammering

Introduktion Til Konkurrenceprogrammering Introduktion Til Konkurrenceprogrammering Søren Dahlgaard og Mathias Bæk Tejs Knudsen {soerend,knudsen}@di.ku.dk Version 0.1 Indhold Indhold i Introduktion 1 1 Palindromer 3 1.1 Introduktion til Python...............

Læs mere

Grundlæggende regneteknik

Grundlæggende regneteknik Grundlæggende regneteknik Anne Ryelund, Mads Friis og Anders Friis 13. november 2014 Indhold Forord Indledning iii iv 1 Regning med brøker 1 1.1 Faktorisering i primtal.............................. 3

Læs mere

Eleverne skal lære at:

Eleverne skal lære at: PK: Årsplan 8.Ga. M, matematik Tid og fagligt område Aktivitet Læringsmål Uge 32 uge 50 Tal og algebra Eleverne skal arbejde med at: kende de reelle tal og anvende dem i praktiske og teoretiske sammenhænge

Læs mere

Årsplan for 7. klasse, matematik

Årsplan for 7. klasse, matematik Årsplan for 7. klasse, matematik I matematik bruger vi bogsystemet Sigma som grundmateriale. I systemet er der, ud over grundbogen, også kopiark og tests tilknyttet de enkelte kapitler. Systemet er udarbejdet

Læs mere

Mathcad Survival Guide

Mathcad Survival Guide Mathcad Survival Guide Mathcad er en blanding mellem et tekstbehandlingsprogram (Word), et regneark (Ecel) og en grafisk CAS-lommeregner. Programmet er velegnet til matematikopgaver, fysikrapporter og

Læs mere

Introduktion til MatLab Matematisk Modellering af Dynamiske Modeller ved Kasper Bjering Jensen, RUC, februar 2010

Introduktion til MatLab Matematisk Modellering af Dynamiske Modeller ved Kasper Bjering Jensen, RUC, februar 2010 Introduktion til MatLab Matematisk Modellering af Dynamiske Modeller ved Kasper Bjering Jensen, RUC, februar 2010 Computere er uvurderlige redskaber for personer der ønsker at arbejde med matematiske modeller

Læs mere

Klassen er sammenlæst, altså 5 og 6 klasse på en og samme tid. Samtidig er klassen pt på ca 11 elever ialt.

Klassen er sammenlæst, altså 5 og 6 klasse på en og samme tid. Samtidig er klassen pt på ca 11 elever ialt. Introduktion til mat i 5/6 klasse Vejle Privatskole 13/14: Klassen er sammenlæst, altså 5 og 6 klasse på en og samme tid. Samtidig er klassen pt på ca 11 elever ialt. Udgangspunktet bliver en blød screening,

Læs mere

Dynamisk programmering

Dynamisk programmering Dynamisk programmering Dynamisk programmering Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Har en hvis lighed med divide-and-conquer: Begge opbygger løsninger til større problemer

Læs mere

Mandags Chancen. En optimal spilstrategi. Erik Vestergaard

Mandags Chancen. En optimal spilstrategi. Erik Vestergaard Mandags Chancen En optimal spilstrategi Erik Vestergaard Spilleregler denne note skal vi studere en optimal spilstrategi i det spil, som i fjernsynet går under navnet Mandags Chancen. Spillets regler er

Læs mere

Når vi forbereder et nyt emne eller område vælger vi de metoder, materialer og evalueringsformer, der egner sig bedst til forløbet.

Når vi forbereder et nyt emne eller område vælger vi de metoder, materialer og evalueringsformer, der egner sig bedst til forløbet. MATEMATIK Delmål for fagene generelt. Al vores undervisning hviler på de i Principper for skole & undervisning beskrevne områder (- metoder, materialevalg, evaluering og elevens personlige alsidige udvikling),

Læs mere

LÆRINGSMÅL PÅ NIF MATEMATIK 2014-15

LÆRINGSMÅL PÅ NIF MATEMATIK 2014-15 LÆRINGSMÅL PÅ NIF MATEMATIK 2014-15 Mål for undervisningen i Matematik på NIF Følgende er baseret på de grønlandske læringsmål, tilføjelser fra de danske læringsmål står med rød skrift. Læringsmål Yngstetrin

Læs mere

T ALKUNNEN. Tilnærmede tal og computertal

T ALKUNNEN. Tilnærmede tal og computertal T ALKUNNEN 6 Allan C Allan C.. Malmberg Tilnærmede tal og computertal INFA Matematik - 2000 1 INFA - IT i skolens matematik Projektledelse: Allan C. Malmberg Inge B. Larsen INFA-Klubben: Leif Glud Holm

Læs mere

Tal og algebra. I kapitlet arbejdes med følgende centrale matematiske begreber: algebra variable. Huskeliste: Tændstikker (til side 146) FRA FAGHÆFTET

Tal og algebra. I kapitlet arbejdes med følgende centrale matematiske begreber: algebra variable. Huskeliste: Tændstikker (til side 146) FRA FAGHÆFTET I kapitlet skal eleverne arbejde med fire forskellige vinkler på algebra de præsenteres på kapitlets første mundtlige opslag. De fire vinkler er algebra som et redskab til at løse matematiske problemer.

Læs mere

t a l e n t c a m p d k Matematiske Metoder Anders Friis Anne Ryelund 25. oktober 2014 Slide 1/42

t a l e n t c a m p d k Matematiske Metoder Anders Friis Anne Ryelund 25. oktober 2014 Slide 1/42 Slide 1/42 Hvad er matematik? 1) Den matematiske metode 2) Hvad vil det sige at bevise noget? 3) Hvor begynder det hele? 4) Hvordan vælger man et sæt aksiomer? Slide 2/42 Indhold 1 2 3 4 Slide 3/42 Mængder

Læs mere

Undervisningsbeskrivelse

Undervisningsbeskrivelse Undervisningsbeskrivelse Termin Maj 2011 Institution Handelsskolen Tradium, Hobro afd. Uddannelse Fag og niveau Lærer(e) Hold Hhx Matematik A Kenneth Berg k708hhxa3 Oversigt over gennemførte undervisningsforløb

Læs mere

Årsplan 8. klasse matematik 2013-2014 Uge Emne Faglige mål Trinmål Materialer/ systemer 33 og løbende

Årsplan 8. klasse matematik 2013-2014 Uge Emne Faglige mål Trinmål Materialer/ systemer 33 og løbende Årsplan 8. klasse matematik 2013-2014 33 løbende 33-34 løbende Løbende Problemregning ( faglig læsning) Mundtlig matematik (forberede oplæg til 6. klasse) - flere forskellige trinmål Ben, formelsamlingen,

Læs mere

Introduktion til Calc Open Office med øvelser

Introduktion til Calc Open Office med øvelser Side 1 af 8 Introduktion til Calc Open Office med øvelser Introduktion til Calc Open Office... 2 Indtastning i celler... 2 Formler... 3 Decimaler... 4 Skrifttype... 5 Skrifteffekter... 6 Justering... 6

Læs mere

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo Philip Bille er. Vedligehold en dynamisk mængde S af elementer. Hvert element har en nøgle x.key og satellitdata x.data. operationer. PREDECESSOR(k): returner element x med største nøgle k. SUCCESSOR(k):

Læs mere

Computerstøttet beregning

Computerstøttet beregning CSB 2009 p. 1/16 Computerstøttet beregning Lektion 1. Introduktion Martin Qvist qvist@math.aau.dk Det Ingeniør-, Natur-, og Sundhedsvidenskabelige Basisår, Aalborg Universitet, 3. februar 2009 people.math.aau.dk/

Læs mere

Undervisningsbeskrivelse

Undervisningsbeskrivelse Undervisningsbeskrivelse Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin December/januar 14/15 Institution VUC Vestegnen Uddannelse Fag og niveau Lærer(e) Hold stx Mat A Karin Hansen

Læs mere

Uge Emne Formål Faglige mål Evaluering

Uge Emne Formål Faglige mål Evaluering Uge Emne Formål Faglige mål Evaluering (Der evalueres løbende på følgende hovedpunkter) 33-36 Regneregler Vedligeholde og udbygge forståelse og færdigheder inden for de fire regningsarter Blive fortrolig

Læs mere

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ DM502 Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ 1 DM502 Bog, ugesedler og noter De første øvelser Let for nogen, svært for andre Kom til øvelserne! Lav opgaverne!

Læs mere

Matematisk induktion

Matematisk induktion Induktionsbeviser MT01.0.07 1 1 Induktionsbeviser Matematisk induktion Sætninger der udtaler sig om hvad der gælder for alle naturlige tal n N, kan undertiden bevises ved matematisk induktion. Idéen bag

Læs mere

Projekt - Visual Basic for Applications N på stribe

Projekt - Visual Basic for Applications N på stribe Projekt - Visual Basic for Applications N på stribe Mikkel Kaas og Troels Henriksen - 03x 3. november 2005 1 Introduktion Spillet tager udgangspunkt i det gamle kendte 4 på stribe, dog med den ændring,

Læs mere

Matricer og lineære ligningssystemer

Matricer og lineære ligningssystemer Matricer og lineære ligningssystemer Grete Ridder Ebbesen Virum Gymnasium Indhold 1 Matricer 11 Grundlæggende begreber 1 Regning med matricer 3 13 Kvadratiske matricer og determinant 9 14 Invers matrix

Læs mere

Introduktion til ActionScript, fortsat

Introduktion til ActionScript, fortsat Introduktion til ActionScript, fortsat Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling

Læs mere

Computerundervisning

Computerundervisning Frederiksberg Seminarium Computerundervisning Koordinatsystemer og Funktioner Lærervejledning 12-02-2009 Udarbejdet af: Pernille Suhr Poulsen Christina Klitlyng Julie Nielsen Indhold Introduktion... 3

Læs mere

Talteori. Teori og problemløsning. Indhold. Talteori - Teori og problemløsning, august 2013, Kirsten Rosenkilde.

Talteori. Teori og problemløsning. Indhold. Talteori - Teori og problemløsning, august 2013, Kirsten Rosenkilde. Indhold 1 Delelighed, primtal og primfaktoropløsning Omskrivning vha. kvadratsætninger 4 3 Antal divisorer 6 4 Største fælles divisor og Euklids algoritme 7 5 Restklasser 9 6 Restklasseregning og kvadratiske

Læs mere

Om brugen af matematiske tegn og objekter i en god matematisk fremstilling

Om brugen af matematiske tegn og objekter i en god matematisk fremstilling Om brugen af matematiske tegn og objekter i en god matematisk fremstilling af Petur Birgir Petersen Et særpræg ved matematik som videnskab er den udstrakte brug af symboler. Det er vigtigt at symbolerne

Læs mere

Noter om Komplekse Vektorrum, Funktionsrum og Differentialligninger LinAlg 2004/05-Version af 16. Dec.

Noter om Komplekse Vektorrum, Funktionsrum og Differentialligninger LinAlg 2004/05-Version af 16. Dec. Noter om Komplekse Vektorrum, Funktionsrum og Differentialligninger LinAlg 2004/05-Version af 16. Dec. 1 Komplekse vektorrum I defininitionen af vektorrum i Afsnit 4.1 i Niels Vigand Pedersen Lineær Algebra

Læs mere

DDD Runde 2, 2015 Facitliste

DDD Runde 2, 2015 Facitliste DDD Runde 2, 2015 Facitliste Søren Dahlgaard og Mathias Bæk Tejs Knudsen Opgaver og løsninger til 2. runde af DDD 2015. 1 4. 19. februar, 2015 linetest DK v1.0 Line Test Sigurd er begyndt i gymnasiet og

Læs mere

Spilstrategier. 1 Vindermængde og tabermængde

Spilstrategier. 1 Vindermængde og tabermængde Spilstrategier De spiltyper vi skal se på her, er primært spil af følgende type: Spil der spilles af to spillere A og B som skiftes til at trække, A starter, og hvis man ikke kan trække har man tabt. Der

Læs mere

Emne Tema Materiale r - - - - - aktiviteter

Emne Tema Materiale r - - - - - aktiviteter Fag: Matematik Hold: 24 Lærer: TON Undervisningsmål Læringsmål 9 klasse 32-34 Introforløb: række tests, som viser eleverne faglighed og læringsstil. Faglige aktiviteter Emne Tema Materiale r IT-inddragelse

Læs mere

Note omkring RSA kryptering. Gert Læssøe Mikkelsen Datalogisk institut Aarhus Universitet

Note omkring RSA kryptering. Gert Læssøe Mikkelsen Datalogisk institut Aarhus Universitet Note omkring RSA kryptering. Gert Læssøe Mikkelsen Datalogisk institut Aarhus Universitet 3. april 2009 1 Kryptering med offentlige nøgler Indtil midt i 1970 erne troede næsten alle, der beskæftigede sig

Læs mere

Poly. - Javapakke til behandling af polynomier

Poly. - Javapakke til behandling af polynomier Poly - Javapakke til behandling af polynomier z 3 x y x 2 3 x -3 Skrevet af Susanne Nykjær Knudsen, John Thystrup Jensen, Jens Lykke Brandt, Troels C. Damgaard, Jacob W. Winther og Mikkel Bundgaard Vejleder:

Læs mere

Programmering i C Intro og grundlæggende C 5. marts 2007

Programmering i C Intro og grundlæggende C 5. marts 2007 Programmering i C Intro og grundlæggende C 5. marts 2007 Mads Pedersen, OZ6HR mads@oz6hr.dk Plan for kurset Ma. 5/3: Ma. 19/3: Ma. 2/4: To. 12/4: Formål, intro, grundlæggende Videre, sprogkonstruktioner

Læs mere

Besvarelses forslag til Tag-hjemeksamen Vinteren 02 03

Besvarelses forslag til Tag-hjemeksamen Vinteren 02 03 IMFUFA Carsten Lunde Petersen Besvarelses forslag til Tag-hjemeksamen Vinteren 02 0 Hvor ikke andet er angivet er henvisninger til W.R.Wade An Introduction to analysis. Opgave a) Idet udtrykket e x2 cos

Læs mere

BOSK F2012, 1. del: Prædikatslogik

BOSK F2012, 1. del: Prædikatslogik ε > 0. δ > 0. x. x a < δ f (x) L < ε February 8, 2012 Prædikater Vi skal lære om prædikatslogik lad os starte med prædikater. Et prædikat er et orakel der svarer ja eller nej. Eller mere præcist: Prædikater

Læs mere

Side 1 af 10. Undervisningsbeskrivelse. Stamoplysninger til brug ved prøver til gymnasiale uddannelser. Termin Maj-juni 2009/10

Side 1 af 10. Undervisningsbeskrivelse. Stamoplysninger til brug ved prøver til gymnasiale uddannelser. Termin Maj-juni 2009/10 Undervisningsbeskrivelse Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin Maj-juni 2009/10 Institution Uddannelse Fag og niveau Lærer(e) Hold Handelsskolen Sjælland Syd, Vordingborg

Læs mere

RSA Kryptosystemet. Kryptologi ved Datalogisk Institut, Aarhus Universitet

RSA Kryptosystemet. Kryptologi ved Datalogisk Institut, Aarhus Universitet RSA Kryptosystemet Kryptologi ved Datalogisk Institut, Aarhus Universitet 1 Kryptering med RSA Her følger først en kort opridsning af RSA kryptosystemet, som vi senere skal bruge til at lave digitale signaturer.

Læs mere

Hovedemne 1: Talsystemet og at gange Læringsmål Nedbrudte læringsmål Forslag til tegn på læring

Hovedemne 1: Talsystemet og at gange Læringsmål Nedbrudte læringsmål Forslag til tegn på læring Hovedemne 1: Talsystemet og at gange kan anvende flercifrede naturlige tal til at beskrive antal og rækkefølge udvikle metoder til multiplikation og division med naturlige tal udføre beregninger med de

Læs mere

Lille Georgs julekalender 07. 1. december. Hvor mange løbere kan der opstilles på et skakbræt uden at de truer hinanden?

Lille Georgs julekalender 07. 1. december. Hvor mange løbere kan der opstilles på et skakbræt uden at de truer hinanden? 1. december Hvor mange løbere kan der opstilles på et skakbræt uden at de truer hinanden? Svar: 14 Forklaring: Der kan godt stå 14, f.eks. sådan: Men kunne der stå flere hvis man stillede dem endnu snedigere

Læs mere

MODUL 8. Differensligninger. Forfattere: Michael ELMEGÅRD & Øistein WIND-WILLASSEN. Modulet er baseret på noter af Peter BEELEN.

MODUL 8. Differensligninger. Forfattere: Michael ELMEGÅRD & Øistein WIND-WILLASSEN. Modulet er baseret på noter af Peter BEELEN. MODUL 8 Differensligninger Forfattere: Michael ELMEGÅRD & Øistein WIND-WILLASSEN Modulet er baseret på noter af Peter BEELEN. 26. august 2014 2 Indhold 1 Introduktion 5 1.1 Rekursioner og differensligninger.........................

Læs mere

1. Opbygning af et regneark

1. Opbygning af et regneark 1. Opbygning af et regneark Et regneark er et skema. Vandrette rækker og lodrette kolonner danner celler, hvori man kan indtaste tal, tekst, datoer og formler. De indtastede tal og data kan bearbejdes

Læs mere