TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5 Laboration 4 Lådplanering Exempel på layout, ett GUI-baserat program Frågor 1
Laboration 5 - 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 i en textfil 2
Laboration 5 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 5 - 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 staplade lådor 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
Laboration 5 - 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 5 - 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 Att 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 delvis overksamma! 6
Laborationsrapport innefattande: Laboration 5 - Examination Kortfattad beskrivning av valda datastrukturer 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 (Klassdiagram bifogas för bonus-delen) 7
Det finns en bonus-uppgiftsdel För G: Ett textuellt gränssnitt Laboration 5 - Examination Slutgiltiga lösningen förfinar sitt svar tills det blir tillräckligt bra Rapport För G++: Ett grafiskt gränssnitt Väl vald datastruktur, snyggt uppdelat program Väl skriven rapport som visar på god förståelse av algoritmanalys 8
Krav för bonus: Laboration 5 - Examination Uppgiften ska ha fått godkänd muntlig redovisning senast på deadline för labb 4. Källkoden samt rapport ska ha skickats in senast efterföljande arbetsdag. Avklarad med maximalt en komplettering, inlämnad senast en vecka efter retur. Ett bonus på lab 3 & 4 medför (del)uppgift(er) på tentamen värd sammanlagt sex poäng automatiskt godkända! Ungefär 25% upp till betyg 3 Mer tid till resten av uppgifterna 9
Laboration 5 - Intermission Nu, lite praktiskt! 10
Laboration 5 - Scanner Används för avkodning och inläsning av indata. Finns ett gäng konstruktorer, använd den som matchar vad du vill göra, t.ex: Scanner sc = new Scanner(someStream) Scanner sc = new Scanner(s) Scanner sc = new Scanner(new File(filename)); Där somestream är namnet på en indataström, s är en variabel av typen String och filename är en sträng som innehåller namnet på en textfil. Scanner kan dela upp texten i s.k. tokens. Tokens avgränsas normalt av blanka tecken. Intressanta metoder: sc.nextint(); // Läser in nästa token och omvandlar till int sc.next(); // Läser in nästa token och tolkar som en String. 11
Uppgift Gotta catch em all Uppgift: Skriv ett grafiskt program för att ladda in och visa Pokémon-bilder för din yngre kusin. Gör det hela livligt så att barnen kan få sin underhållning vid nästa släktträff. Logga gärna vilken Pokémon som är populärast, så mormor vet vilket motiv hon ska välja på tröjan till nästa födelsedag.. 12