13.07.2015 Views

Programmeringsuppgift 2 - itslearning

Programmeringsuppgift 2 - itslearning

Programmeringsuppgift 2 - itslearning

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Malmö högskola 2007/2008Teknik och samhälle<strong>Programmeringsuppgift</strong> 2AvsiktAvsikten med programmeringsuppgiften är att du ska träna på att skriva klasser och attanvända klasser.I uppgiften får du stor hjälp med programstrukturen. Du ska följa den givna strukturen.Samtliga klasser ska placeras i paketet p2.RedovisningRedovisning sker den 19/10 under laborationstid. Kom väl förberedd till redovisningen.Redovisning ska ske genom att:• klassernas källkod (Dice, Bridge och Man) visas för läraren (du behöver inte skriva ut filerna).Du ska kunna redogöra för källkoden i klassena.• koden i utskriften ska vara kommenterad. Kommentarerna ger dig stöd under redovisningen.• programmet körs tillsammans med läraren.Godkänd uppgift signeras av läraren på en av källkodsutskrifterna eller på annat papper. Du ska sparaden signerade utskriften tills kursen är avslutad.DA129A Programmering 1


Malmö högskola 2007/2008Teknik och samhälleUppgiftEn man (Kalle) skall gå över en bäck på en smal spång med följande utseende:Start 0 1 2 3 4 5 6 7 8 9 10Normalt skulle Kalle klara av detta på 10 steg, men då han för tillfället är något omtöcknad kan hansbeteende beskrivas på följande sätt:Från utgångspunkten (se position 0) tar han alltid ett steg ut på spången, till position 1. Ett steg ute påspången (position 1-9) leder framåt med sannolikheten 0.6 och bakåt med sannolikheten 0.3 (seposition 3). Med sannolikheten 0.1 avslutas promenaden genom att han faller i bäcken. Om han underpromenaden återkommer till utgångspunkten fortsätter han promenaden genom att åter ta ett steg ut påspången.StartMål0.1 Alltid 0.3 0.60 1 2 3 4 5 6 7 8 9 10Du ska medverka till att skriva ett program där Kalle gör 10000 promenader och där programmeträknar hur många gånger han faller i bäcken samt hur många gånger han kommer över i 10, 12, 14, ...,28, 30 eller fler steg (det måste alltid bli ett jämnt antal steg).Din uppgift är att skriva den delen av programmet som simulerar en promenad över bron. Sedankommer denna del av programmet att anropas 10000 gånger av andra delar i programmet.SannolikheterSannolikheten 0.1 betyder 1 gång av 10, 0,3 betyder 3 gånger av 10 och 0,6 betyder 6 gånger av 10.Använd den 10-sidiga tärningen. Kasta tärningen. Visar den 1-6 så låt Kalle gå framåt, visar den 7-9så får han gå bakåt och visar den 10 så trillar han i.Exempel på körresultat + statistik:De två första kolumnerna utgör körresultatet.Kolumnerna längst till höger visar det minsta värde resp.det största värde som inträffade vid 100 testkörningar.Avviker dina resultat från dessa måste du kontrollera dinlösning, då utförs nog inte promenaden över spångenenligt regelverket ovan.Styrning av lösningenI programstrukturen på nästa sida har jag styrt uppdesignen. Det innebär att du är tvingad att skriva klassrnaMan, Bridge och Dice så de överensstämmer med:• Uppgiftbeskrivningen ovan• Klassdiagrammen• main-metoden sist i programstrukturenSjälva promenaden kan vara rätt så trixig att få rätt på. Jag har gett ett förslag på hur promenaden kansimuleras (walk + beskrivning av step). Du får givetvis utforma dessa två metoder på annat sätt.Det är tillåtet att införa fler metoder och attribut i klasserna. Detta är dock inte nödvändigt.Mål2


Malmö högskola 2007/2008Teknik och samhälleSå här ser designen av programmet ut. Programmet består av 4 klasser, Bridge, Dice, Man ochController, och en startklass, Program3. Du får inte ändra i Program3 och Controller (färdiga klasser).Controller– man : Man– v : int[]+ calc()+ print()Man– bridge : Bridge– current : int– numSteps : int– dice : Dice– step() : boolean+ walk() : intBridge– first : int– last : int+ getFirst() : int+ getLast() : intDice– sides : int+ throwDice() : int+ getSides() : int+ setSides(int)Förslag till programstruktur:public class Bridge {// se klassdiagram + main-metoden nedan} // Bridgepublic class Dice {// se klassdiagram + main-metoden nedan} // DiceBridge–first : int–last:int+getFirst() :int+getLast() : intDice– sides : int+ throwDice() : int+ getSides() : int+ setSides(int)public class Man {private Bridge bridge;private int current;private int numSteps;private Dice dice;public Man(Bridge bridge, Dice dice) {// fyll i med kod}// spången// nuvarande position// antal tagna steg// generera slumptal// Metoden step ska reglera värdet på current och på// returvärdet. För att generera slumptal kastas tärningen.// Om mannen tar ett steg framåt så öka current (startpos + 1-6 prickar)// Om mannen tar ett steg bakåt så minska current (7-9 prickar)// Om mannen trillar i så returnera false (10 prickar)// Om mannen är kvar på bron så returnera true (startpos + 1-9 prickar)private boolean step() {// enligt uppgiftbeskrivning och beskrivning ovan}// Utför en promenad över bäckenpublic int walk() {current = bridge.getFirst();numSteps = 0;while((current!=bridge.getLast()) && (numSteps!=-1)) {if(step())numSteps++;elsenumSteps = -1;}return numSteps;}} // ManMan– bridge : Bridge– current : int– numSteps : int– dice : Dice– step() : boolean+walk() : int3


Malmö högskola 2007/2008Teknik och samhällepublic class Controller {private Man man;private int[] v; // Lagra resultatet av 10000 promenaderpublic Controller(Man man) {this.man = man;}// Beräkna statistik för 10000 övergångarpublic void calc() {int numberSteps;v = new int[12];for(int i=0; i

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!