1 Anvendelser II Filkomprimering 2 Filkomprimering Principper Huffmans algoritme Generering af krydsreferencer Simulering Hændelsesbaseret simulering.

Slides:



Advertisements
Lignende præsentationer
Atomer Et programmeret forløb. En måde at lære på.
Advertisements

Hjemmesidekonstruktion Tjekspørgsmål 1.Hvad er et markup-sprog – hvad bruges det til? 2.Hvad er forskellen mellem et markup-sprog og et scriptsprog? 3.Hvad.
Niveauer af abstrakte maskiner
1 Problemkompleksitet 2 Problemers kompleksitet En ineffektiv algoritme: køretiden vokser eksponentielt med input- størrelsen Et problem, der ikke kan.
Velkommen til Softwarekonstruktion
Bolig selskabernes Landsforening– Almene lejeboliger - Maj/Juni Almene lejeboliger - Danmarkspanelet - Maj/Juni 2010.
1 Frameworks. 2 Plan Frameworks • Kollektioner • Input/output Nyt designmønster: Decorator.
Perspektiverende Datalogi Internetalgoritmer MapReduce Gerth Stølting Brodal.
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Symbolsk maskinsprog.
Datastrukturer Simple-type structs
Statistik.
Grundlæggende programmering Efterår 2001
Representations for Path Finding in Planar Environments.
Hvordan man skriver koden.
01 – Java platform for starters. 2 NOEA2009Java-kursus – Java Platform Introduktion til Java Baggrund Hvad er Java? Faciliteter i Java.
Begreber og Redskaber 8. Plan for idag Sortering fortsat Comparable Søgning –Lineær søgning –Binær søgning.
1 Dagens gang Repeter systemvalg Gennemgang af klasser og strukturer (kap. 3+4 OOA+D) Tavle opgave Gruppe opgave til næste gang.
1 UNION-FIND. 2 inddata: en følge af heltalspar (p, q); betydning: p er “forbundet med” q uddata: intet, hvis p og q er forbundet, ellers (p, q) Eksempel.
FEN IntroJava AAU1 Opsamling: afvikling af Java-programmer Input fra keyboard og fil Fra en prompt Fra BlueJ Fra NetBeans.
1 Powerpointserie om In-line færdiggørelse ved Heatsettrykning Avisrotation Magasindybtryk Den Grafiske Højskole.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Begreber og Redskaber 2 BRP.
Datastrukturer og Collections Rasmus D. Lehrmann DM
ETU 2008 | Elevtilfredshedsundersøgelse Erhvervsskolen Nordsjælland HTX (Teknisk Gymnasium) - Hillerød Baseret på 313 besvarelser.
1 Anvendelser II Filkomprimering 2 Filkomprimering Principper Huffmans algoritme Generering af krydsreferencer Simulering Hændelsesbaseret simulering.
MMP Model og Metode til Programudvikling – MMP 1 Kursusindhold: Modellering af postkontor Objekt Orienteret Programudvikling - OO* Unified Modelling.
1 Søgning I. 2 Plan Sekventiel søgning Binær søgning Binære søgetræer Balancerede binære søgetræer træer.
1 Sortering I elementære metoder. 2 Plan Terminologi Elementære metoder til sortering -sortering ved udvælgelse -sortering ved indsættelse -Shellsort.
Anvendelser I Leg og spil.
Begreber og Redskaber 2. Plan for idag Noget om bestanddelene i et programmeringssprog Syntaksbeskrivelse af java Næste gang: –Binære tal –Repræsentation.
Forelæsning 3.1 Collections Javas for-each løkke
Matematik B 1.
Claus Brabrand, ITU, Denmark Mar 10, 2009EFFECTIVE JAVA Effective Java Presentation Workshop Claus Brabrand [ ] ( “FÅP”: First-year Project.
1 Tråde 2 Plan Trådbegrebet Synkronisering Koordinering Eksempel: et flertrådet spil.
Grunde til at jeg elsker dig
1 Implementering af fundamentale datastrukturer. 2 Plan Stakke og køer Array-repræsentation Liste-repræsentation Hægtede lister Træer Terminologi Traversering.
1 Søgetræer. 2 Binære søgetræer Definition Operationer Balancerede binære søgetræer AVL-træer Rød-sort-træer (AA-træer) B-træer Plan.
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
Mønstre En lille introduktion. Singleton Tilgå et objekt igennem klassereference i stedet for objektreference.  Overflødiggør referencer til objektet.
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
1 Sortering. 2 Plan Elementære metoder til sortering -sortering ved indsættelse -Shellsort Sorteringsmetoder baseret på rekursion –quicksort –flettesortering.
Objekter og klasser Rasmus D. Lehrmann DM
Grafalgoritmer II.
1 Sortering. 2 Sortering ved fletning (merge-sort) 7 2 | 9 4  | 2  2 79 | 4   72  29  94  4.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper: arrays, stakke, køer,
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
1 Kursusafslutning. 2 Plan Opgaveseminar Kursusevaluering.
Procestræ under afvikling af cp init login shell cp cp src dest.
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
1 Implementering af fundamentale datastrukturer. 2 Stakke og køer Array-repræsentation Liste-repræsentation Hægtede lister Træer Terminologi Traversering.
FEN IntroJava AAU1 Endnu mere om Klasser og Objekter Mange til mange relationer Student-Course v3.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
Anvendelser I Leg og spil.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Længste plateau En klassisk problemstilling (Gries, 1981) - og her i Java!!! Denne opgave drejer sig om at bestemme længden af det længste plateau i en.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før.
Forelæsning 7.1 – repetition
Identitet vs lighed. Spørgsmål Hvad udskriver run metoden? 1.”Ens!” 2.”Forskellige!” 3.Ved ikke public class Driver{ public static void run(){ String.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Containerklasser – klassifikation og brug.  Michael E. Caspersen, 2003IOOPContainerklasser.2 Mange objekter Containerklasser –antag at man skal repræsentere.
Præsentationens transcript:

1 Anvendelser II Filkomprimering

2 Filkomprimering Principper Huffmans algoritme Generering af krydsreferencer Simulering Hændelsesbaseret simulering Procesbaseret simulering Plan

3 Filkomprimering Komprimering reducerer størrelsen af en fil for at spare plads ved lagring for at spare tid ved transmission Mange filer har et lavt informationsindhold. Komprimering benyttes til tekst:nogle bogstaver er hyppigere end andre grafik:store ensartede områder lyd:gentagne mønstre

4 Run-length encoding Komprimering ved tælling af gentagelser. Komprimering af tekst: Strengen AAAABBBAABBBBBCCCCCCCDABCBAAABBBBCCCD omkodes til 4A3BAA5B8CDABCB3A4B3CD Med escape-tegn (her ’ \ ’): \4A\3BAA\5B\8CDABCB\3A\4B\3CD Run-length encoding er normalt ikke særlig effektiv for tekstfiler.

5 Run-length encoding Komprimering af (sort-hvid raster) grafik: Besparelse: 19* *6 bit = 116 bit svarende til 23%

6 Fixed-length encoding Strengen ABRACADABRA (11 tegn) fylder 11 * 8 bit = 88 bit i byte-kode 11 * 5 bit = 55 biti 5-bit-kode 11 * 3 bit = 33 biti 3-bit-kode (kun 5 forskellige bogstaver) D forekommer kun 1 gang, mens A forekommer 5 gange. Vi kan forsøge at benytte korte koder for bogstaver, der forekommer hyppigt.

7 Variable-length encoding Hvis A = 0, B = 1, R = 01, C = 10 og D = 11, kan ABRACADABRA kodes som (kun 15 bit) Problemet skyldes, at nogle koder er præfiks for andre. For eksempel er A præfiks for R. Men denne kode kan kun afkodes (dekomprimeres), hvis der anvendes skilletegn (f.eks. et blanktegn).

8 Præfikskoder En præfikskode for tegnene A, B, C, D og R : A = 11, B = 00, C = 010, D = 10 og R = 011. Strengen ABRACADABRA kodes som (25 bit) En kode, hvor ingen tegnkode er præfiks for nogen anden tegnkode, kaldes en præfikskode. Strengen kan kun afkodes på én måde. Men den valgte præfikskode er ikke den optimale. Denne kan bestemmes ved hjælp af Huffmans algoritme.

9 Tries Koden repræsenteres ved et træ, et såkaldt trie (udtales traj). A BRCD Tegnene er placeret i træets blade. En venstre gren svarer til 0. En højre gren svarer til 1. Kode: A = 0, B = 100, C = 110, D = 111 og R = 101. Strengen ABRACADABRA kodes som (23 bit)

10 Huffmans algoritme (D. A. Huffman, 1952) Beregn frekvenserne for de tegn, der indgår i meddelelsen (eller benyt en foruddefineret frekvenstabel). Tegn Frekvens A 5 B 2 C 1 D 1 R 2 Byg et trie ved successivt af kombinere de to mindste frekvenser.

11 Huffmans algoritme A 5 B 2 R 2 C 1 D Start med et træ for hvert tegn. Sålænge der er mere end ét træ: sammensæt de 2 “billigste” træer til 1 træ ved at tilføje en ny knude som rod. Træet er optimalt (minimerer ∑ dybde i *frevens i ) - men ikke unikt

12 Implementering af Huffmans algoritme class HuffmanTree { HuffmanTree(Node root) { this.root = root; } Node root; } class Node {...} class Character extends Node {...} Repræsentation af træ:

13 class Node implements Comparable { Node(int w) { weight = w; } Node(int w, Node l, Node r) { weight = w; left = l; right = r; } public int compareTo(Object rhs) { Node n = (Node) rhs; return weight < n.weight ? -1 : weight == n.weight ? 0 : -1; } int weight; Node left, right; } weight angiver summen af bladenes frekvenser i det træ, der har knuden som rod.

14 class Character extends Node { Character(char c, int w) { super(w); character = c; } char character; } Character-objekter udgør træets blade

15 HuffmanTree buildHuffmanTree(ArrayList list) { PriorityQueue pq = new BinaryHeap(); Iterator itr = list.iterator(); while (itr.hasNext()) pq.insert((Character) itr.next()); while (pq.size() >= 2) { Node t1 = (Node) pq.deleteMin(); Node t2 = (Node) pq.deleteMin(); pq.insert(new Node(t1.weight + t2.weight, t1, t2)); } return new HuffmanTree((Node) pq.deleteMin()); }

16 Problemer for Huffmans algoritme Kodetræet skal medsendes (typisk 255 bytes) Beregningsmæssigt dyr To gennemløb af filen (frekvensbestemmelse + kodning) Typisk 25% pladsreduktion, men ikke optimal

17 LZW-komprimering (Lempel, Ziv og Welch, 1977) Opbyg successivt en ordbog i form af et trie. Eksempel: ABRACADABRA 0 A 1 B 2 R 3 C 4 D 5 B 6 A 7 Fixed-length encoding Kodning: ABR1C1D63A

18 Generering af krydsreferencer Udvikling af et program, der indlæser et Java-program og udskriver alle programmets navne i sorteret orden sammen med de linjenumre, hvori de forekommer. Navne, der kun forekommer i kommentarer, tekststrenge og tegnkonstanter, skal ikke medtages.

19 Eksempel /* Trivial application that displays a string */ public class TrivialApplication { public static void main(String[] args) { System.out.println("Hello World!"); } input:output: String: 3 System: 4 TrivialApplication: 2 args: 3 class: 2 main: 3 out: 4 println: 4 public: 2, 3 static: 3 void:

20 Datastrukturer og algoritme Opbyg et binært søgetræ indeholdende de fundne navne. Hver knude indholder et navn og en kø af de linjenumre, hvori navnet forekommer. Udskriv til slut søgetræets indhold i sorteret orden. TreeMap theIdentifiers; ArrayList lines;

21 public void generateCrossReference() { TreeMap theIdentifiers = new TreeMap(); String id; while ((id = getNextID()) != "") { ArrayList lines = theIdentifiers.get(id); if (lines == null) { lines = new ArrayList(); theIdentifiers.put(id, lines); } lines.add(new Integer(currentLine)); } //... print the cross reference... } Opbygning af binært søgetræ

22 Eksempel på binært søgetræ key: "TrivialApplication" lines: 2 key: "main" lines: 2 key: "public" lines: 2 3 key: "static" lines: 3 key: "void" lines: 3 key: "println" lines: 4 key: "out" lines: 4 key: "class" lines: 2 key: "System" lines: 4 key: "args" lines: 3 key: "String" lines: 3

23 Simulering

24 Definitioner Simulering Simulering: Eksperimenter med modeller på en datamaskine Model Model: Repræsentation af et system System System: Et valgt udsnit af virkeligheden

25 Matematiske modeller Sproglige modeller Mundtlige og skriftlige beskrivelser Grafiske modeller Billeder, tegninger Skematiske modeller Diagrammer Ikke-matematiske modeller Symbolske modeller

26 Matematiske modeller Statisk: Repræsentation af et system i en given fast tilstand Dynamisk: Repræsentation af et systems adfærd over tid Analytisk: En model, hvor relevante spørgsmål alene kan besvares ud fra matematiske ræsonnementer Ikke-analytisk: En model, hvor relevante spørgsmål om modellen er matematisk uhåndterbare

27 Simulering (mulig indsnævring) Simulering er eksperimenter med dynamiske, ikke-analytiske modeller på en datamaskine

28 En god model er en model, der opfylder det formål, man har med den. Modeller er hverken falske eller sande, men kan være mere eller mindre hensigtsmæssige i forhold til deres formål. Første skridt i en modelleringsproces er en klargøring af, hvad man vil bruge modellen til. Abstraktion og aggregering benyttes som teknikker til at opnå “håndterbare” modeller. Modellering er formålsbestemt

29 Modellerings- og simuleringsprocessen teoretisk modelvalidering Model 2. Model- konstruktion Program program- verifikation 3. Model- kodning 1. System- identifikation System empirisk modelvalidering 4. Simulering Teori bekræftelse på teori

30 Kontinuerte: Modellens tilstand beskrives ved variable, som varierer kontinuert (“blødt” og uden spring). Modellen er typisk beskrevet ved differentialligninger Dynamiske modeltyper t f(t)

31 Diskrete: Modellens tilstand beskrives ved variable, som ændres i spring (forårsaget af hændelser). Eksempel: Et køsystem (kundebetjeningen i en bank, en lægekonsultation). f(t) t

32 Kombineret kontinuert og diskret: Modellens tilstand kan beskrives ved variable, som både varierer kontinuert og ændres i spring. Eksempel: et køleskab (varmeudvekslingen med omgivelserne er kontinuert, termostaten forårsager diskrete hændelser) f(t) t

33 Modelleringsperspektiver Kontinuert, diskret, eller kombineret kontinuert/diskret er egenskaber ved en model, ikke ved et system Eksempel: Trafikken på en vej Makroperspektiv: kontinuert strøm Mikroperspektiv: hændelser (f.eks. start og stop)

34 Begrundelser for at anvende simulering Systemet eksisterer ikke Eksperimenter med det virkelige system er for kostbare, for tidskrævende eller for farlige Eksperimenter med det virkelige system er praktisk umulige at foretage (havstrømme, solsystemet) Formål Beslutningstagen Indsigt

35 Begrænsninger ved simulering Kan være kostbar både i maskin- og menneskeressourcer Validering er vanskelig Indsamling af data samt analyse og fortolkning af resultater kræver sædvanligvis et godt kendskab til statistik

36 Waiting line Car washer Served car Tearoom Car washer Simulering af et bilvaskeri (car wash)

37 Systembeskrivelse (1) Bilerne ankommer til vaskeriet med gennemsnitligt 11 minutters mellemrum. (2) Der er ansat 2 bilvaskere. (3) Når en bil ankommer, bliver den vasket, hvis der er en ledig bilvasker. Ellers venter den i en kø. (4) Så længe der er biler, der venter, bliver de vasket efter tur. (5) En vask tager 10 minutter. (6) Når en bilvasker bliver ledig, venter han i testuen, indtil der ankommer en bil. (7) Vaskeriet har åbent 8 timer om dagen. (8) Biler, der ankommer før lukketid, bliver vasket.

38 Formål med simulering (er bestemmende for model) Formålet er at undersøge, hvor meget bilernes ventetid kan nedbringes ved at ansætte endnu en bilvasker. Modeltype En diskret hændelsesmodel.

39 Simuleringsparadigmer (1) Hændelsesbaseret (Eks. “Bil ankommer”, “Vask afsluttes”) (2) Aktivitetsbaseret (Eks. “En bil vaskes”) (3) Procesbaseret (Eks. “En bil”, “En bilvasker”)

40 Identifikation af hændelser (1) En bil ankommer( CarArrival ) (2) En bilvask påbegyndes( StartCarWashing ) (3) En bilvask afsluttes( StopCarWashing )

41 Pakken simulation.event public abstract class Event { protected abstract void actions(); public final void schedule(double evTime); public final void cancel(); public final static double time(); public final static void runSimulation(double period); public final static void stopSimulation(); } Hændelserne og deres tilknyttede handlinger beskrives i underklasser af klassen Event.

42 import simulation.event.*; import simset.*; import random.*; public class CarWashSimulation extends Simulation { int noOfCarWashers, noOfCustomers; double openPeriod = 8 * 60, throughTime; Head tearoom = new Head(), waitingLine = new Head(); Random random = new Random(7913); CarWashSimulation(int n) { noOfCarWashers = n;... } class CarWasher extends Link {} class Car extends Link { double entryTime = time(); } class CarArrival extends Event {...} class StartCarWashing extends Event {...} class StopCarWashing extends Event {...} public static void main(String args[]) { new CarWashSimulation(2); }

43 Konstruktøren i CarWashSimulation CarWashSimulation(int n) { noOfCarWashers = n; for (int i = 1; i <= noOfCarWashers; i++) new CarWasher().into(tearoom); new CarArrival().schedule(0); runSimulation(openPeriod ); report(); }

44 CarArrival class CarArrival extends Event { public void actions() { if (time() <= openPeriod) { new Car().into(waitingLine); if (!tearoom.empty()) new StartCarWashing().schedule(time()); new CarArrival().schedule(time() + random.negexp(1/11.0)); }

45 StartCarWashing class StartCarWashing extends Event { public void actions() { CarWasher theCarWasher = (CarWasher) tearoom.first(); theCarWasher.out(); Car theCar = (Car) waitingLine.first(); theCar.out(); new StopCarWashing(theCarWasher, theCar). schedule(time() + 10); }

46 StopCarWashing class StopCarWashing extends Event { CarWasher theCarWasher; Car theCar; StopCarWashing(CarWasher cw, Car c) { theCarWasher = cw; theCar = c; } public void actions() { theCarWasher.into(tearoom); if (!waitingLine.empty()) new StartCarWashing().schedule(time()); noOfCustomers++; throughTime += time() - theCar.entryTime; }

47 Metoden report void report() { System.out.println(noOfCarWashers + " car washer simulation"); System.out.println("No.of cars through the system = " + noOfCustomers); java.text.NumberFormat fmt = java.text.NumberFormat.getNumberInstance(); fmt.setMaximumFractionDigits(2); System.out.println("Av.elapsed time = " + fmt.format(throughTime / noOfCustomers)); }

48 2 car washer simulation No.of cars through the system = 43 Av.elapsed time = car washer simulation No.of cars through the system = 43 Av.elapsed time = Kørselsresultater

49 Planlagte hændelser opbevares i en cirkulær tovejs-liste, SQS, der er sorteret i stigende orden efter hændelsernes indtræffelsestidspunt. Implementering af pakken simulation.event SQS suc pred

50 public abstract class Event { protected abstract void actions();... private final static Event SQS = new Event() { { pred = suc = this; } protected void actions() {} }; private static double time = 0; private double eventTime; private Event pred, suc; }

51 public void schedule(final double evTime) { if (evTime < time) throw new RuntimeException ("attempt to schedule event in the past"); cancel(); eventTime = evTime; Event ev = SQS.pred; while (ev.eventTime > eventTime) ev = ev.pred; pred = ev; suc = ev.suc; ev.suc = suc.pred = this; } suc pred ev

52 public void cancel() { if (suc != null) { suc.pred = pred; pred.suc = suc; suc = pred = null; } suc pred

53 public static void runSimulation(double period) { time = 0; while (SQS.suc != SQS) { Event ev = SQS.suc; time = ev.eventTime; if (time > period) break; ev.cancel(); ev.actions(); } stopSimulation(); } public static void stopSimulation() { while (SQS.suc != SQS) SQS.suc.cancel(); }

54 Repræsentation af hændelseslisten (SQS) Hændelseslisten kan organiseres, således at indsættelse bliver mere effektiv. For eksempel ved brug af en binær hob.

55 Procesbaseret simulering En proces er systemkomponent, der udfører en sekvens af handlinger i simuleret tid. Hver handling sker i tilknytning til en hændelse. hændelse proces vent i kø bliv vasket aktivitet hændelse aktivitet tid

56 Identifikation af processerne (1) Bil( Car ) (2) Bilvasker( CarWasher ) (3) Bilgenerator( CarGenerator )

57 Processer og deres tilknyttede handlinger beskrives i underklasser af klassen Process. Pakken javaSimulation public abstract class Process extends Link { protected abstract void actions(); public static double time(); public static void activate(Process p); public static void hold(double t); public static void passivate(); public static void wait(Head q); }

58 import javaSimulation.*; import javaSimulation.Process; public class CarWashSimulation extends Process { int noOfCarWashers, noOfCustomers; double openPeriod = 8*60, throughTime; Head tearoom = new Head(), waitingLine = new Head(); Random random = new Random(7913); CarWashSimulation(int n) { noOfCarWashers = n; } public void actions() {...} class Car extends Process {...} class CarWasher extends Process {...} class CarGenerator extends Process {...} public static void main(String args[]) { activate(new CarWashSimulation(2)); }

59 public void actions() { for (int i = 1; i <= noOfCarWashers; i++) new CarWasher().into(tearoom); activate(new CarGenerator()); hold(openPeriod ); report(); } Hovedprocessens aktioner

60 class CarGenerator extends Process { public void actions() { while (time() <= openPeriod) { activate(new Car()); hold(random.negexp(1/11.0)); } class CarGenerator

61 class Car extends Process { public void actions() { double entryTime = time(); into(waitingLine); if (!tearoom.empty()) activate((CarWasher) tearoom.first()); passivate(); noOfCustomers++; throughTime += time() - entryTime; } class Car

62 class CarWasher extends Process { public void actions() { while (true) { out(); while (!waitingLine.empty()) { Car served = (Car) waitingLine.first(); served.out(); hold(10); activate(served); } wait(tearoom); } class CarWasher

63 Læs kapitel 14 Løs følgende opgaver Opgave 27: 12.1 (2 point) Opgave 28: Se de næste sider (4 point, ikke-obligatorisk) Opgave 29: Se de næste sider (4 point, ikke-obligatorisk) Afleveringsfrist: tirsdag den 20. november Ugeseddel 8 6. november november

64 Opgave 28: Simulering (4 point, ikke-obligatorisk) Pakken simulation.event, der kan hentes fra kursets hjemmeside, tilbyder faciliteter til hændelsesbaseret simulering. Benyt pakken til at simulere den modembank, der er beskrevet i kapitel 13 i lærebogen.

65 Opgave 29: Møntproblemet (4 point, ikke-obligatorisk) En 20-krone, en 10-krone, en 1-krone og en 25-øre er lagt på et bræt med 5 felter, som vist nedenfor. Opgaven går ud på at placere mønterne i omvendt rækkefølge i de 4 felter længst til højre på brættet, ved anvendelse af færrest muligt antal træk. I hvert træk flyttes en mønt et felt til højre eller venstre. Mønterne kan stables, men i et træk må kun den øverste mønt i en stabel flyttes, og en mønt må aldrig placeres ovenpå en mønt, der er mindre. Løs denne opgave ved hjælp af et Java-program