Programexempel: tärningsspel



Relevanta dokument
Programexempel: tärningsspel. Programexempel: tärningsspel Kasta tärning tills etta. Klassen Die Specifikation. Slumptalsgenerator Klassen Random

Algoritmexempel. Föreläsning 5-7 Innehåll. Summering Mönster. Summering Exempel: alternerande harmoniska serien

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Föreläsning 3-4 Innehåll

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Föreläsning 7-8 Innehåll

Objekt som argument. Föreläsning 7-8 Innehåll. Hur komma åt den andra kvadratens attribut? Anropa metod på objektet självt

Tentamen i Programmering grundkurs och Programmering C

NATIONELLA MATEMATIKTÄVLING

Programmera en NXT Robot

Rekursion: varför? Problem delas upp i mindre bitar algoritm för att lösa problemet erhålls från problemformuleringen

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

Föreläsning 1 & 2 INTRODUKTION

DOP-matematik Copyright Tord Persson. Bråktal Läs av vilka tal på tallinjen, som pilarna pekar på. Uppgift nr

Föreläsning 5: Rekursion

OOP Objekt-orienterad programmering

Matematikboken. alfa. Lennart Undvall Christina Melin Jenny Ollén

Mål Blå kurs Röd kurs

Grundläggande programmering med C# 7,5 högskolepoäng

OOP Objekt-orienterad programmering

FRÅN A TILL Ö LäraMera Ab / och Allemansdata Ab / FRÅN A TILL Ö

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Vad är det och hur definierar vi en Biblioteksfunktioner (math) Top-down-programmering lokala globala variabler Arrays som in-parametrar

( ostream ) << ( annan datatyp ) : ostream

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Lathund, procent med bråk, åk 8

Tentamen, EDAA20/EDA501 Programmering

Snabbslumpade uppgifter från flera moment.

Du ska nu skapa ett litet program som skriver ut Hello World.

"if"-satsen. Inledande programmering med C# (1DV402)

SANNOLIKHET. Sannolikhet är: Hur stor chans (eller risk) att något inträffar.

konstanterna a och b så att ekvationssystemet x 2y = 1 2x + ay = b 2 a b

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Tentamen OOP

Att koda en magnetremsa i plastkortskrivare med inbyggd magnetkodare.

Klasser och objekt i C#

Avsikt På ett lekfullt sätt färdighetsträna, utveckla elevers känsla för hur vårt talsystem är uppbyggt samt hitta mönster som uppkommer.

Redovisning av inlämningsuppgifter

Individuellt Mjukvaruutvecklingsprojekt

Datorövning 2 Statistik med Excel (Office 2007, svenska)

Till exempel en array av heltal(int) skapas på följande sätt:

Utveckla arbetsmiljö och verksamhet genom samverkan

Modul 6: Integraler och tillämpningar

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Datastrukturer. Föreläsning Innehåll. Program med vektor Exempel. Deklarera vektorer

Gissa det hemliga talet

Manual fö r kursspecifika ansö kningsförmula r Fölkhö gsköla.nu

Chapter 4: Writing Classes/ Att skriva egna klasser.

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

ELEV- HANDLEDNING (Ansökan via webben)

Presentationsövningar

VÄRDERINGSÖVNINGAR. Vad är Svenskt?

Arbetsbeskrivning, att förbereda för studenternas registrering kommande termin. 1. Studenter antagna på fristående kurs 2

Chapter 3: Using Classes and Objects

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Syftet med en personlig handlingsplan

Vi skall skriva uppsats

Föreläsning 1-2 innehåll

HT 2011 FK2004 Tenta Lärare delen 4 problem 6 poäng / problem

Objektorienterad programmering D2

2. Betrakta följande program, där fyra heltal läses från tangentbordet och några (ointressanta) beräkningar görs:

Handbok Blinken. Danny Allen Översättare: Stefan Asserhäll

Datorövning 2 Statistik med Excel (Office 2003, engelska)

Exempel på tentamensuppgifter i LMA100, del 1

TENTAMEN OOP

Lathund till Annonsportalen

Objekt-orientering. Java är ett objekt-orienterat programmeringsspråk

Möbiustransformationer.

Programmering A. Johan Eliasson

Java M1 V2 L2 K2 TM W. Tentamen i Programmering , kl LUNDS TEKNISKA HÖGSKOLA Institutionen för datavetenskap.

Idag: Dataabstraktion

SF1620 Matematik och modeller

Kapitel 6. f(x) = sin x. Figur 6.1: Funktionen sin x. 1 Oinas-Kukkonen m.fl. Kurs 6 kapitel 1

Efter att du har installerat ExyPlus Office med tillhörande kartpaket börjar du med att göra följande inställningar:

Har vi lösningen för en bättre hemtjänst? Självklart.

Föreläsning 8: Räkning. Duvhålsprincipen. Kombinatorik

Får nyanlända samma chans i den svenska skolan?

Sannolikhet och Odds

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

Subtraktion - Analys och bedömning av elevarbeten

Detta kan du förvänta dig av kommunens service. Lokala värdighetsgarantier inom socialtjänstens omsorg om äldre

Virkade tofflor. Storlek & By: Pratamedrut. pratamedrut.se/blog/virkade tofflor 1

Planering av ett större program - Funktioner, moduler, if och Boolean. Linda Mannila

PROGRAMMERING A VB6 UTVECKLINGSVERKTYGET VISUAL BASIC

Handledning för digitala verktyg Talsyntes och rättstavningsprogram. Vital, StavaRex och SpellRight

Laborationspecifikation

Så kan du arbeta med medarbetarenkäten. Guide för chefer i Göteborgs Stad

Idag. Hur vet vi att vår databas är tillräckligt bra?

2D1310, 2D1311 Programmeringsteknik Tentamen (1p) 3 maj 2001, kl

Boken om Teknik. Boken om Teknik är en grundbok i Teknik för åk 4 6.

Algebra, polynom & andragradsekvationer en pampig rubrik på ett annars relativt obetydligt dokument

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Visualisering av golfboende

Tentamen, EDAA20/EDA501 Programmering

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Ha det kul med att förmedla och utveckla ett knepigt område!

Transkript:

Programexempel: tärningsspel Skriv ett program som låter en användare spela detta tärningsspel: Spelaren gör första tärningsslaget och får samma poäng som tärningen visar. Sedan fortsätter spelet enligt följande regler: Om tärningen visar något annat än en etta adderas antal prickar tärningen visar till spelaren poäng. Om spelaren slår en etta sätts poängsumman till 0 och spelet avbryts. Spelaren kan inför varje tärningsslag välja att avbryta spelet och nöja sig med den poäng som uppnåtts. EDAA20 (F5-7 programmering) HT 2015 25 / 48

Programexempel: tärningsspel Kasta tärning tills etta Vi börjar med att lösa det enklare delproblemet att kasta en tärning tills den visar en etta. Därefter utökar vi programmet stegvis. Algoritm: kasta tärningen int sum = antal prickar så länge summan ej är lika med 0 kasta tärningen om tärningen visar en etta sum = 0 annars sum = sum + antal prickar EDAA20 (F5-7 programmering) HT 2015 26 / 48

Klassen Die Specifikation Vi behöver en klass som beskriver en tärning. Den ska ha metoder för att kasta tärningen och för att läsa av antal prickar: /** Skapar en tärning. */ public Die(); /** Kastar tärningen. */ public void roll(); /** Tar reda på resultatet av det senaste kastet. */ public int getresult(); EDAA20 (F5-7 programmering) HT 2015 27 / 48

Slumptalsgenerator Klassen Random Inuti klassen Die behöver vi dra slumpmässiga tal mellan 1 och 6. Slumptal får man med hjälp av standardklassen java.util.random. /** En slumptalsgenerator med slumptalsfröet seed. */ Random(long seed); /** En slumptalsgenerator med ett slumpmässigt slumptalsfrö. */ Random(); /** Slumpmässigt heltal i intervallet [0,n). */ int nextint(int n); /** Slumpmässigt reellt tal i intervallet [0,1.0). */ double nextdouble(); EDAA20 (F5-7 programmering) HT 2015 28 / 48

Övning Dra slumptal inom ett heltalsintervall Lägg till programkoder för att dra ett slumptal i intervallet [0,5] och ett slumptal i intervallet [1,6]. Random rand = new Random(); EDAA20 (F5-7 programmering) HT 2015 29 / 48

Slumptal Exempel: krona eller klave Random rand = new Random(); if (rand.nextdouble() < 0.5) { System.out.println("krona"); else { System.out.println("klave"); EDAA20 (F5-7 programmering) HT 2015 30 / 48

Slumptal Exempel: tippa 1, x eller 2 Sannolikhet för 1 ska vara 55% - - x - - 15% - - 2 - - 30% Random rand = new Random(); double nbr= rand.nextdouble(); char res; if (nbr < 0.55) { res = 1 ; else if (nbr < 0.7) { res = x ; else { res = 2 ; EDAA20 (F5-7 programmering) HT 2015 31 / 48

Tärning Klassen Die public class Die { private static Random rand = new Random(); private int pips; // antal prickar som visas /** Skapar en tärning. */ public Die() { roll(); // så att pips får ett värde 1..6 /** Kastar tärningen. */ public void roll() { pips = 1 + rand.nextint(6); /** Tar reda på resultatet av det senaste kastet. */ public int getresult() { return pips; EDAA20 (F5-7 programmering) HT 2015 32 / 48

Klassen Die kommentarer Slumptalsgeneratorn rand är ett statiskt attribut. Det betyder att rand hör till själva klassen Die och inte till något enskilt tärningsobjekt. Alla tärningsobjekt man skapar delar på samma slumptalsgenerator. Man får då en bättre fördelning av slumptalen jämfört med om varje tärning har sin egen slumptalsföljd. Ett anrop av nextint(6) ger ett heltal mellan 0 och 5. För att få ett slumptal mellan 1 och 6 får vi göra så här: pips = rand.nextint(6) + 1; För att tärningen ska få ett vettigt startvärde anropas metoden roll inuti konstruktorn. EDAA20 (F5-7 programmering) HT 2015 33 / 48

Anropa metod på objektet självt För att tärningen ska få ett vettigt startvärde anropas metoden roll inuti konstruktorn: /** Skapar en tärning. */ public Die() { roll(); Normalt anger man med punktnotation vilket objekt en metod ska utföras på. Det behövs inte i det här fallet. Metoden roll är deklarerad i den här klassen och utförs på det aktuella objektet. Man kan också anropa metoden så här: this.roll(); EDAA20 (F5-7 programmering) HT 2015 34 / 48

Programexempel: tärningsspel Kasta tills tärningen visar en etta Die d = new Die(); d.roll(); int sum = d.getresult(); System.out.println("Poäng: " + sum); while (sum!= 0) { d.roll(); if (d.getresult() == 1) { sum = 0; else { sum = sum + d.getresult(); System.out.println("Poäng: " + sum); EDAA20 (F5-7 programmering) HT 2015 35 / 48

Summering Mönster Uppgift: Beräkna summan av ett antal termer. Lösning: Deklarera och nollställ en variabel som håller reda på det aktuella värdet av summan. Gå sedan igenom termerna en efter en och addera varje term till summan. Algoritmen i pseudokod: sum = 0; för alla termer { term = "nästa term" sum = sum + term; EDAA20 (F5-7 programmering) HT 2015 36 / 48

Programexempel: tärningsspel Låt spelaren välja när det är dags att avbryta Lägg till programkod som låter användaren av programmet avgöra när det är dags att sluta slå tärningen. Algoritm: kasta tärningen int sum = antal prickar fråga om användaren vill fortsätta så länge sum är skild från 0 och användaren vill fortsätta kasta tärningen om tärningen visar en etta sum = 0 annars sum = sum + antal prickar fråga om användaren vill fortsätta EDAA20 (F5-7 programmering) HT 2015 37 / 48

Programexempel: tärningsspel Låt spelaren välja när det är dags att avbryta Die d = new Die(); d.roll(); int sum = d.getresult(); Scanner scan = new Scanner(System.in); System.out.println("Poäng: " + sum); System.out.println("Vill du fortsätta (ja/nej)"); String answer = scan.next(); while (sum!= 0 && answer.equals("ja")) { d.roll(); if (d.getresult() == 1) { sum = 0; else { sum = sum + d.getresult(); System.out.println("Poäng: " + sum); System.out.println("Vill du fortsätta (ja/nej)?"); answer = scan.next(); System.out.println("Du fick " + sum + " poäng."); EDAA20 (F5-7 programmering) HT 2015 38 / 48

Programexempel: tärningsspel Alternativ avbryt med break Die d = new Die(); d.roll(); int sum = d.getresult(); Scanner scan = new Scanner(System.in); while (sum!= 0) { System.out.println("Poäng: " + sum); System.out.println("Vill du fortsätta (ja/nej)?"); String answer = scan.next(); if (!answer.equals("ja")) { break; d.roll(); if (d.getresult() == 1) { sum = 0; break; else { sum = sum + d.getresult(); EDAA20 (F5-7 programmering) HT 2015 39 / 48

Programexempel: tärningspel Antal tärningsslag, max antal poäng Hur mycket poäng kan det vara rimligt att förvänta sig (maximalt och i genomsnitt)? Låt programmet simulera ett stort antal spelomgångar och skriv ut den största poängumman som uppnåddes samt den genomsnittliga poängsumman. Utgå från programmet som kastar tärningen tills det blir en etta. Ändra stegvis koden på följande sätt: Låt programmet skriva ut antal poäng som uppnåtts innan kastet med den avslutande ettan. Tag bort alla övriga utskrifter. Låt programmet upprepa antal spelomgångar ett stort antal gånger. Istället för att skriva ut en poängsumma per spelomgång ska nu programmet ändras så att det skriver ut den största poängsumman som uppnåddes. Lägg till kod för att beräkna och skriva ut den genomsnittliga poängsumman. EDAA20 (F5-7 programmering) HT 2015 40 / 48

Beräkna maximum Mönster Uppgift: Beräkna det största talet i en följd av tal. Lösning: Deklarera en variabel max som ska hålla reda på det hittills största värdet. Låt max få ett litet startvärde. Gå sedan igenom talen och jämför med max. Uppdatera max ifall det aktuella talet är större. Algoritmen i pseudokod: max = "litet värde"; för alla värden { value = "nästa värde"; if (value > max) { max = value; EDAA20 (F5-7 programmering) HT 2015 41 / 48

Konstanter för minsta och största tal Konstanter för minsta respektive största värde ett int-tal kan ha: int i1 = Integer.MIN_VALUE; // -2147483648 int i2 = Integer.MAX_VALUE; // 2147483647 double d1 = Double.MIN_VALUE; // 4.9E-324 (OBS! >0) double d2 = Double.MAX_VALUE; // 1.8E308 double d3 = -Double.MAX_VALUE // -1.8E308 Med E menas gånger 10 upphöjt till EDAA20 (F5-7 programmering) HT 2015 42 / 48

Beräkna minimum Mönster Uppgift: Beräkna det minsta talet i en följd av tal. Lösning: Deklarera en variabel min som ska hålla reda på det hittills minsta värdet. Låt min få ett stort startvärde. Gå sedan igenom talen och jämför med min. Uppdatera min ifall det aktuella talet är mindre. Algoritmen i pseudokod: min = "stort värde"; för alla värden { value = "nästa värde"; if (value < min) { min = value; EDAA20 (F5-7 programmering) HT 2015 43 / 48

Beräkna maximum Övning Beräkna och skriv ut det största talet av ett antal heltal som läses in från tangentbordet. Fyll i den kod som saknas. Scanner scan = new Scanner(System.in); int max = Integer.MIN_VALUE; while (scan.hasnext()) { int nbr = scan.nextint(); EDAA20 (F5-7 programmering) HT 2015 44 / 48

Programexempel: tärningspel Antal tärningsslag, max antal poäng, forts Det färdiga programmet finns på kursens hemsida. För att beräkna den genomsnittliga poängsumman ska man dividera totala poängsumman med antal spelomgångar. Tänk på att Java vid division ger resultatet i form av ett heltal om bägge operanderna är heltal. Se därför till att en av operanderna har typen double. Ex: System.out.println(totalSum / (double) n); EDAA20 (F5-7 programmering) HT 2015 45 / 48

Heltalsdivision och rest a / b ger ett heltal som resultat om både a och b är heltal. Exempel: 17 / 3 är lika med 5 (heltalsdivision) 17 % 3 är lika med 2 (rest vid heltalsdivision) 3 personer ska rättvist dela på 17 kakor. Alla får 5 kakor var och 2 kakor blir över. EDAA20 (F5-7 programmering) HT 2015 46 / 48

Heltalsdivision och rest Exempel på användning Avgör om x är udda eller jämnt: if (x % 2 == 0) { System.out.println("jämnt" ); else { System.out.println("udda"); Avgör om x är jämnt delbart med 10: if (x % 10 == 0) { System.out.println("x är jämnt delbar med 10"); EDAA20 (F5-7 programmering) HT 2015 47 / 48

Heltalsdivision och rest Exempel på användning Skriv ut antal timmar och minuter mellan start- och sluttid. System.out.println("Skriv starttid och sluttid " + "(timmar och minuter):"); Scanner scan = new Scanner(System.in); int starthour = scan.nextint(); int startmin = scan.nextint(); int stophour = scan.nextint(); int stopmin = scan.nextint(); int minutes = 60 * (stophour - starthour) + (stopmin - startmin); System.out.println("Tidsavstånd " + minutes/60 + " timmar och " + minutes % 60 + " minuter"); EDAA20 (F5-7 programmering) HT 2015 48 / 48