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

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

Programexempel: tärningsspel

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

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

Föreläsning 3-4 Innehåll

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 1 & 2 INTRODUKTION

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

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.

Inledande programmering med C# (1DV402) Tärningarna ska kastas

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

Föreläsning 1-2 innehåll

OOP Objekt-orienterad programmering

Tentamen i Programmering

C++ Slumptalsfunktioner + switch-satsen

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

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

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

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

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

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Föreläsning 5-6 Innehåll

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Tentamen, EDAA20/EDA501 Programmering

OOP Tentamen

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

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

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

JAVAUTVECKLING LEKTION 4

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

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

Malmö högskola 2012/2013 Teknik och samhälle

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

OOP Omtenta

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

OOP Tenta

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Enkla variabler kontra referensvariabel

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Föreläsning 9-10 Innehåll

Föreläsning REPETITION & EXTENTA

Ett objekt... Exempel: Om ni tittar er runt i föreläsningssalen ser in många olika fysiska föremål:

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

OOP Objekt-orienterad programmering

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Lösningsförslag övning 2.

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

Grundläggande programmering med C# 7,5 högskolepoäng. Provmoment: Ladokkod: Tentamen ges för:

Tentamen, EDA501 Programmering M L TM W K V

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

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

JAVA Mer om klasser och objektorientering

Föreläsning 5. Föreläsning 5. Klasser och objekt. Klasser och objekt. Klasser och objekt

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

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

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

Classes och Interfaces, Objects och References, Initialization

Tentamen i Grundläggande Programvaruutveckling, TDA548

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

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

TENTAMEN OOP

Tentamen , Grundläggande programmering i Java

Rekursion och induktion för algoritmkonstruktion

Instuderingsfrågor, del D

Malmö högskola 2007/2008 Teknik och samhälle

Programmering A. Johan Eliasson

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 21:a April klockan

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Modern Programmering (2546) Tentamen lördag

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

PROGRAMMERING-Java Omtentamina

Exempel på program med objekt Klass med main-metod. Föreläsning 3-4 Innehåll. Övning Viktiga begrepp

PROGRAMMERING-Java TENTAMINA

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Händelsestyrd simulering. Inledning. Exempel

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 11

Typkonvertering. Java versus C

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Tentamen, EDAA20/EDA501 Programmering

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Mer om klasser och objekt

Chapter 3: Using Classes and Objects

Föreläsning 14: Grafik & mera händelsehantering

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Transkript:

Kasta tärning tills etta 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. 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: int sum = antal prickar så länge summan ej är lika med 0 om tärningen visar en etta sum = 0 annars sum = sum + antal prickar EDAA20 (F5-7 programmering) HT 2015 25 / 48 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 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(); 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 27 / 48 EDAA20 (F5-7 programmering) HT 2015 28 / 48

Övning Dra slumptal inom ett heltalsintervall Slumptal Exempel: krona eller klave 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(); Random rand = new Random(); if (rand.nextdouble() < 0.5) { System.out.println("krona"); else { System.out.println("klave"); EDAA20 (F5-7 programmering) HT 2015 29 / 48 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 Anropa metod på objektet självt 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. 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 33 / 48 EDAA20 (F5-7 programmering) HT 2015 34 / 48 Kasta tills tärningen visar en etta Summering Mönster Die d = new Die(); int sum = d.getresult(); while (sum!= 0) { if (d.getresult() == 1) { else { sum = sum + d.getresult(); 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: för alla termer { term = "nästa term" sum = sum + term; EDAA20 (F5-7 programmering) HT 2015 35 / 48 EDAA20 (F5-7 programmering) HT 2015 36 / 48

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: 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 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 Alternativ avbryt med break Die d = new Die(); int sum = d.getresult(); while (sum!= 0) { System.out.println("Vill du fortsätta (ja/nej)?"); String answer = scan.next(); if (!answer.equals("ja")) { break; if (d.getresult() == 1) { break; else { sum = sum + d.getresult(); EDAA20 (F5-7 programmering) HT 2015 39 / 48 Låt spelaren välja när det är dags att avbryta Die d = new Die(); int sum = d.getresult(); System.out.println("Vill du fortsätta (ja/nej)"); String answer = scan.next(); while (sum!= 0 && answer.equals("ja")) { if (d.getresult() == 1) { else { sum = sum + d.getresult(); 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ärningspel Antal tärningsslag, max antal poäng Hur mycket poäng kan det vara rimligt att förvänta sig (maximalt och igenomsnitt)?låtprogrammetsimuleraettstortantalspelomgå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 Konstanter för minsta och största tal 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; 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 41 / 48 EDAA20 (F5-7 programmering) HT 2015 42 / 48 Beräkna minimum Mönster Beräkna maximum Övning 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: 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. int max = Integer.MIN_VALUE; while (scan.hasnext()) { int nbr = scan.nextint(); 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 EDAA20 (F5-7 programmering) HT 2015 44 / 48

Programexempel: tärningspel Antal tärningsslag, max antal poäng, forts Heltalsdivision och rest 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); 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) 3personerskarättvistdelapå17kakor.Allafår5kakorvaroch2 kakor blir över. EDAA20 (F5-7 programmering) HT 2015 45 / 48 EDAA20 (F5-7 programmering) HT 2015 46 / 48 Heltalsdivision och rest Exempel på användning 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"); Skriv ut antal timmar och minuter mellan start- och sluttid. System.out.println("Skriv starttid och sluttid " + "(timmar och minuter):"); 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 47 / 48 EDAA20 (F5-7 programmering) HT 2015 48 / 48