TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5 Laboration 4 Lådplanering Exempel på grafik, ett avancerat program Frågor 1 Laboration 4 - Introduktion Syfte: Öva på självständig problemlösning Problem: Ett antal lådor ska flyttas, helst på ett optimalt sätt. För att flytta en viss låda krävs ett visst antal personer Man kan endast flytta lådorna som står överst Information om hur lådorna är placerade samt antal personer som krävs för att flytta dem är sparat på en fil 2 1
Laboration 4 Optimering Optimering: Inte självklart hur lådorna ska flyttas... Varje låda tar lika lång tid att flytta Kan ev. flytta mer än en låda per tidsenhet Minimera tiden det tar att flytta alla lådor för ett visst antal arbetare Minimera lönekostnaden. Flera personer kan flytta snabbare men inte säkert att den totala kostnaden blir lägre 3 Laboration 4 - Lådkonfigurationsfil Lådkonfigurationsfil 9 Antalet lådor. a 2 Låda a kräver 2 personer för att flyttas. b 5 c 3 d 1 e 3 f 1 g 3 h 2 i 5 9 Antalet lådor som står på. a b Låda a står på låda b b g b e e f f h e i c e c d d 4 2
Laboration 4 - Krav Programmet skall kunna läsa in nya lådkonfigurationer från fil. Användaren skall kunna välja vilken fil som skall användas vid varje körning. Gränssnittet kan vara grafiskt eller textbaserat. En tydlig presentation av lösningen krävs. I vilken ordning flyttas lådorna? Hur mycket kostar det? Hur lång tid tar det? Läs laborationsbeskrivningen noggrant! 5 Laboration 4 - Uppgifter Uppgift 1: Skapa och implementera en algoritm som ger en möjlig ordning att plocka ner lådorna. Pröva på givna och egna konfigurationer Information om antal personer som krävs används inte. Uppgift 2: Minimera tiden, givet ett antal arbetare. X personer -> Flera lådor kan ev. flyttas samtidigt. Hitta den bortplockningssekvens som ger minimal tid Uppgift 3: Minimera totala lönekostnaden Flytta en låda tar 15 min, arbetare kostar 100 kr/timme Krävs det tio arbetare vid en tidpunkt kommer dessa kräva betalt under hela flytten även om de är overksamma! 6 3
Laborationsrapport innefattande: Laboration 4 - Examination Kortfattad beskrivning av valda datastrukturer (klassdiagram) samt en motivering av era val. Diskussion av hur lämpliga era val visade sig vara. Beskrivning av de algoritmer ni använt för att lösa respektive uppgift samt dess tidskomplexitet. Jämförelse med andra idéer ni haft. Hur nära optimal lösning? Rapporten bör omfatta 1-2 A4 sidor 7 Laboration 4 - Examination Uppgiften bedöms med G VG För G: Ett textuellt gränssnitt En intelligent heuristik Snyggt uppdelat program Rapport För VG: Helt grafiskt gränssnitt Visar tillhörande bild i de fall det finns 8 4
Krav för VG: Laboration 4 - Examination Uppgiften ska ha fått godkänd muntlig redovisning senast på fredag 1/3. Källkoden samt rapport ska ha skickats in senast hård deadline på onsdag 3/3. Avklarad med maximalt en komplettering, inlämnad senast en vecka efter retur. Ett VG på lab 3 & 4 medför en (del)uppgift på tentamen värd tre poäng automatiskt godkänd! ungefär 25% upp till betyg 3 mer tid till resten av uppgifterna 9 Laboration 4 - Intermission Nu, lite praktiskt! 10 5
Tips - Användbara komponenter JLabel Visar enkla textsträngar i GUI, men med.. ImageIcon Kan stoppas in i en JLabels konstruktor för att visa en bild i GUI! ImageIcon icon = new ImageIcon( /home/stude123/minbild.gif ); JLabel label = new Jlabel(icon); // visa bilden! getcontentpane().add(label); 11 Tips - Användbara komponenter JTextArea Ett fler-radigt textfält, men kan bli för stort att visa allt av.. JScrollPane Kan dekorera en annan komponent med scroll-lister! JTextArea textarea = new JTextArea(); // linda in textarean i scroll-lister JScrollPane scrollpane = new JScrollPane(textArea); // lägg till scrollpanen istället! getcontentpane().add(scrollpane); 12 6
Tips - Användbara komponenter JFileChooser Visar öppna/spara fil dialog enkelt! JFileChooser chooser = new JFileChooser(); // visa dialogen int result = chooser.showopendialog(null); // kolla så att användaren klickade ok, inte avbryt if(result == JFileChooser.APPROVE_OPTION) { // hämta ut filen användaren valde System.out.println( Du öppnade filen: " + chooser.getselectedfile().getname()); } 13 Tips - Användbara komponenter JRadioButton Visar en checkbox som, om man har flera, bara en kan vara vald av, åt gången. // skapa alla knappar JRadioButton radio1 = new JRadioButton( Första ); JRadioButton radio2 = new JRadioButton( Andra ); JRadioButton radio3 = new JRadioButton( Tredje ); // lägg till dom i en grupp, inom vilken bara en av // dom kan vara vald åt gången ButtonGroup group = new ButtonGroup(); group.add(radio1); group.add(radio2); group.add(radio3); getcontentpane().add(radio1); // osv för alla knappar 14 7
Uppgift Ett väl strukturerat program Uppgift: Du har fått kod för en simulering kallad Game of life (hur nu den fungerar). Simuleringen är uppbyggd av flera klasser: en grupp klasser som utför simuleringens beräkningar och en JComponent som kan rita upp den. 15 Uppgift Ett väl strukturerat program 1. Skriv ett fullständigt program som kör och visar upp simuleringen. 2. Lägg till tre knappar Start Stop Step som ger motsvarande kommandon till simuleringen. 3. Lägg till en slider, speed, som bestämmer hastigheten på simuleringen Krav: Det ska gå att ENKELT och SNABBT lägga till någon annan simulering, som körs samtidigt i samma program. 16 8
Uppgiften är redan nästan löst En JFrame med begärda knappar har skapats Lösning... En klass som kan stanna och stoppa en simulering har skapats Ett interface har skapats: alla simuleringar måste implementera detta En controller behövs ska starta upp systemet och hantera händelser från vyn 17 9