dobbelsteen

algemene C code
Berichten: 11
Geregistreerd: 03 Okt 2020, 10:42
Woonplaats: Denekamp

dobbelsteen

Berichtdoor melvinkamphuis » 03 Okt 2020, 11:32

beste leden,
ik heb een opdracht van school gekregen. de opdracht is:

In deze opgave wordt de random en randomSeed functies gebruikt om een willekeurig getal tussen de 1 en de 6 te berekenen. Deze functies kun je vinden in de Arduino reference onder random() en randomSeed().
Een groep mensen wedt op de uitkomst van drie worpen van een dobbelsteen. Elk persoon zet 1 euro in op het voorspellen van de uitkomst van de drie worpen.

Schrijf het programma dat de random en randomseed functies gebruikt om de drie worpen met een dobbelsteen na te bootsen en dat laat zien wat iedere persoon volgens onderstaande regels wint:
• Alle drie de worpen zijn zessen: winst 6 euro;
• Alle drie de worpen zijn gelijk (maar geen zessen): winst 4 euro;
• De drie worpen bevatten twee gelijken: winst 2 euro. Zorg voor een knop om de worp te simuleren en gebruik de seriële monitor om aan te geven wat de winst is en hoeveel worpen er al gedaan zijn.

van onze leraar moeten met behulp van internet het programma maken :?: de opdracht moeten we maken met behulp van if,else of switch,case
ik weet niet wat ik moet doen :oops:
ik hoop dat jullie mij kunnen helpen

Advertisement

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: dobbelsteen

Berichtdoor shooter » 03 Okt 2020, 11:54

begin eens met 3 dobbelstenen: steen1 steen2 en steen3
zet die met serial.print op je scherm.
ga dan met if eerst nagaan of zowel 1,2,3 alledrie 6 zijn. (dat kun je dus best doen met de EN functie ofwel if steen1==6 && steen2==6 &&steen3 ==6.
dan heb je dus 6 punten winst.
de andere situaties doe je hetzelfde ofwel if steen1==steen2 4 punten, maar dat kan dus ook steen2==steen3 zijn.
switch kan ook, maar dat werkt met een getal (een integer) en dat mag je zelf bedenken. als extra
dan las extra kun je bijvoorbeeld 9999 keer gooien en bijhouden welke winst je krijgt als je ze bij elkaar optelt dus een variabele met zessen een variabele met dubbele etc.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: dobbelsteen

Berichtdoor Koepel » 03 Okt 2020, 11:57

Wordt dit het eerste programma dat je schrijft ?
Dan zul je er tijd in moeten stoppen. Dat is het belangrijkste dat je nu nodig hebt: "tijd".
Lees over de functies en probeer ze uit.

Arduino is open source, dus alles is online te vinden. Op de Arduino website staan de meeste functies en ook de 'C' en 'C++' taal kort uitgelegd.

Heb je een Arduino board ?
Dat is veel gemakkelijker dan een simulatie op internet.

Begin eens met een ledje te laten knipperen met de sketch "Blink".
Die zit in de Arduino IDE (de Arduino ontwikkelomgeving), maar ook op internet: https://www.arduino.cc/en/Tutorial/BuiltInExamples/Blink.
Hier staan alle voorbeelden die ook in de Arduino IDE zitten: https://www.arduino.cc/en/Tutorial/BuiltInExamples.

Als dat werkt, probeer dan eens een tekst naar de seriële monitor te sturen: https://www.arduino.cc/reference/en/language/functions/communication/serial/println/.

Daarna kun je "random()" en "randomSeed()" proberen.
Op deze manier kun je zoeken naar de documentatie van die functie: https://www.google.nl/search?q=site%3Aarduino.cc+randomseed.
Op die pagina zal vast wel een voorbeeldje staan, dat je kunt proberen.

Als je dat allemaal gedaan hebt, dan kun je proberen om meerdere dingen te combineren in een sketch.

Nu komt het moeilijke gedeelte: programmeren.
Iedere programmeertaal kan dingen herhalen en heeft condities om dingen te vergelijken. Daarmee maak je de structuur van het programma.
Op deze pagina: https://www.arduino.cc/reference/en/, scroll daar naar beneden en kijk naar "Control Structure". Klik op elk van die dingen (van 'break' tot 'while') en kijk wat ze doen.
Het gaat er om, dat je de echte wereld kunt vertalen in een logische structuur. Dat duurt een paar jaar om daar steeds beter in te worden.
Het antwoord hierboven van shooter geeft al de eerste aanzet om te gaan programmeren.

Berichten: 11
Geregistreerd: 03 Okt 2020, 10:42
Woonplaats: Denekamp

Re: dobbelsteen

Berichtdoor melvinkamphuis » 03 Okt 2020, 12:47

oke shooter en koepel we zijn nu inmiddels een aantal weken bezig om te programmeren met c (led blinken motor voor/achter uit laten gaan enz) en dat ging me tot deze opdracht goed af ;) nu komen de lastigere dingen.
en ik hoef niet online te simuleren ik heb een Arduino MEGA 2560 en ga zeker doen wat u zegt :P
bedankt voor jullie hulp
m.v.g,
melvinkamphuis

Berichten: 11
Geregistreerd: 03 Okt 2020, 10:42
Woonplaats: Denekamp

Re: dobbelsteen

Berichtdoor melvinkamphuis » 03 Okt 2020, 12:52

shooter schreef:begin eens met 3 dobbelstenen: steen1 steen2 en steen3
zet die met serial.print op je scherm.
ga dan met if eerst nagaan of zowel 1,2,3 alledrie 6 zijn. (dat kun je dus best doen met de EN functie ofwel if steen1==6 && steen2==6 &&steen3 ==6.
dan heb je dus 6 punten winst.
de andere situaties doe je hetzelfde ofwel if steen1==steen2 4 punten, maar dat kan dus ook steen2==steen3 zijn.
switch kan ook, maar dat werkt met een getal (een integer) en dat mag je zelf bedenken. als extra
dan las extra kun je bijvoorbeeld 9999 keer gooien en bijhouden welke winst je krijgt als je ze bij elkaar optelt dus een variabele met zessen een variabele met dubbele etc.


de dobbelstenen (steen 1,2,3) moeten die in de setup? en is het handig om daar een variabele van te maken?

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: dobbelsteen

Berichtdoor Koepel » 03 Okt 2020, 15:37

Het is voor ons gemakkelijker als je de sketch laat zien.
Op dit forum kun je de knop "Code" gebruiken voor code-tags. Zet je sketch tussen [ code ] en [ / code].

Als het over drie dobbelstenen gaat, dan is dat iets dat kan variëren van 1 tot en met 6.
Iets dan 1 tot en met 6 kan zijn is natuurlijk een variabele.

Heb je al gelezen wat de functie random() doet ? Hoe krijg je een getal van 1 tot en met 6 ?

De randomSeed() kan iedere keer bij het opstarten een andere 'seed' maken, zodat je niet steeds dezelfde reeks krijgt nadat de Arduino opnieuw is gestart.
Daar is een handigheidje voor. Als je de analoge ingangen gebruikt, dan zal er vast wel ruis op staan of een sensor aan hangen. Door die waarden te gebruiken bij het opstarten kun je een andere 'seed' krijgen.

P.S.: Ik vind het erg belangrijk dat de tekst van de sketch er netjes uit ziet. Dus dat het gebruik van spaties, komma's en inspringen er netjes uit ziet. Als het goed is, zie je in één keer de structuur van de sketch.

Berichten: 11
Geregistreerd: 03 Okt 2020, 10:42
Woonplaats: Denekamp

Re: dobbelsteen

Berichtdoor melvinkamphuis » 03 Okt 2020, 21:34

Koepel schreef:Het is voor ons gemakkelijker als je de sketch laat zien.
Op dit forum kun je de knop "Code" gebruiken voor code-tags. Zet je sketch tussen [ code ] en [ / code].

Als het over drie dobbelstenen gaat, dan is dat iets dat kan variëren van 1 tot en met 6.
Iets dan 1 tot en met 6 kan zijn is natuurlijk een variabele.

Heb je al gelezen wat de functie random() doet ? Hoe krijg je een getal van 1 tot en met 6 ?

De randomSeed() kan iedere keer bij het opstarten een andere 'seed' maken, zodat je niet steeds dezelfde reeks krijgt nadat de Arduino opnieuw is gestart.
Daar is een handigheidje voor. Als je de analoge ingangen gebruikt, dan zal er vast wel ruis op staan of een sensor aan hangen. Door die waarden te gebruiken bij het opstarten kun je een andere 'seed' krijgen.

P.S.: Ik vind het erg belangrijk dat de tekst van de sketch er netjes uit ziet. Dus dat het gebruik van spaties, komma's en inspringen er netjes uit ziet. Als het goed is, zie je in één keer de structuur van de sketch.



[ code ]
const int buttonPin = 2;
long randNumber;
const int randompin = 0;
int buttonState = 0;

void setup()
{
pinMode (buttonPin, INPUT_PULLUP);
Serial.begin (9600);
}

void loop()
{
buttonState = digitalRead (buttonPin);

if (buttonState == LOW)
{
randNumber = random (7);
Serial.println (randNumber);
}
else
{
analogWrite (randompin, HIGH);
}

delay (500);

}
[ \ code]

dit is de code wat ik tot nu toe heb. als je op de button drukt dan word er random 1 t/m 6 in de seriële monitor weergegeven. maar nu moet er nog bij wat je hebt gewonnen in de opdracht staat dit:
Alle drie de worpen zijn zessen: winst 6 euro;
Alle drie de worpen zijn gelijk (maar geen zessen): winst 4 euro;
De drie worpen bevatten twee gelijken: winst 2 euro.

door bij 3 worpen te komen moet je 3 keer op de button drukken. dat wat met de eerdere reacties beschreven was werd mij te ingewikkeld.
maar nu nog ff kijken hoe (suggesties zijn altijd welkom ;) ).
m.v.g
melvinkamphuis

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: dobbelsteen

Berichtdoor Koepel » 04 Okt 2020, 01:42

Met [ code ] en [ / code ] bedoelde ik die tags zonder spaties :roll:

Stel je hebt een variabele die het aantal bonen in een blik bonen in tomatensaus is. Je verft het blik met een kleur die afhangt van het jaargetijde terwijl je met één voet in het IJsselmeer staat en je stuurt dat blik met een raket naar de planeet Jupiter op 1 januari 2025. Dan is de variabele nog steeds het aantal bonen, en de rest zijn bijzaken.
Code: Alles selecteren
int Bonen;


Je hebt nu "randNumber". Het is echter beter om de naam te kiezen van wat het eigenlijk is. Het is een dobbelsteen.

Dus bijvoorbeeld: "int Dobbelsteen" die dan 1 tot en met 6 kan zijn. En dan ook nog drie dobbelstenen.
Dit is een beetje te lang:
Code: Alles selecteren
int DobbelsteenEen;
int DobbelsteenTwee;
int DobbelsteenDrie;

Je kunt dat afkorten tot "steen1", "steen2" en "steen3". Daar had shooter het over.

Heb je gelezen wat random() doet ? Met random(7) kan de waarde variëren van 0 (inclusief nul) tot en met 6 (exclusief zeven). Is de waarde nul als de dobbelsteen op een zijkant staat ? :lol:

Op een Arduino Mega 2560 (en ook op een Arduino Uno) zijn de pinnen 0 en 1 al bezet voor de seriële monitor en voor het uploaden van een sketch. Daar kun je beter niet zomaar een PWM signaal op zetten. Lees maar wat de analogWrite() doet: https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/.

Stoei maar eens met de random() en de sketch. Lees nog eens door wat we schreven en vraag wat je niet begrijpt. Ik denk dat je nu al aardig ver kunt komen.

Berichten: 11
Geregistreerd: 03 Okt 2020, 10:42
Woonplaats: Denekamp

Re: dobbelsteen

Berichtdoor melvinkamphuis » 04 Okt 2020, 13:44

Koepel schreef:Met [ code ] en [ / code ] bedoelde ik die tags zonder spaties :roll:

Stel je hebt een variabele die het aantal bonen in een blik bonen in tomatensaus is. Je verft het blik met een kleur die afhangt van het jaargetijde terwijl je met één voet in het IJsselmeer staat en je stuurt dat blik met een raket naar de planeet Jupiter op 1 januari 2025. Dan is de variabele nog steeds het aantal bonen, en de rest zijn bijzaken.
Code: Alles selecteren
int Bonen;


Je hebt nu "randNumber". Het is echter beter om de naam te kiezen van wat het eigenlijk is. Het is een dobbelsteen.

Dus bijvoorbeeld: "int Dobbelsteen" die dan 1 tot en met 6 kan zijn. En dan ook nog drie dobbelstenen.
Dit is een beetje te lang:
Code: Alles selecteren
int DobbelsteenEen;
int DobbelsteenTwee;
int DobbelsteenDrie;

Je kunt dat afkorten tot "steen1", "steen2" en "steen3". Daar had shooter het over.

Heb je gelezen wat random() doet ? Met random(7) kan de waarde variëren van 0 (inclusief nul) tot en met 6 (exclusief zeven). Is de waarde nul als de dobbelsteen op een zijkant staat ? :lol:

Op een Arduino Mega 2560 (en ook op een Arduino Uno) zijn de pinnen 0 en 1 al bezet voor de seriële monitor en voor het uploaden van een sketch. Daar kun je beter niet zomaar een PWM signaal op zetten. Lees maar wat de analogWrite() doet: https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/.

Stoei maar eens met de random() en de sketch. Lees nog eens door wat we schreven en vraag wat je niet begrijpt. Ik denk dat je nu al aardig ver kunt komen.



ik heb inmiddels dit:

[code]/*
Name: dobbelsteen met winstmarche
Date:04-10-2020
Author: Melvin Kamphuis

Description:

Revision:
*/

// include libraries

// ----- Declare Constants -----

// ----- Declare Objects -----

// ----- Declare subroutines and/or functions -----

// ----- Declare Global Variables -----
long randNumber_1; // dobbelsteen 1
long randNumber_2; // dobbelsteen 2
long randNumber_3; // dobbelsteen 3

// Setup
void setup()
{
Serial.begin(9600);
randomSeed( analogRead(0) );
}

// Main loop
void loop()
{
randNumber_1 = random(1,7);
Serial.print ("dobbelsteen_1");
Serial.print ("= ");
Serial.println (randNumber_1);

randNumber_2 = random(1,7);
Serial.print ("dobbelsteen_2");
Serial.print ("= ");
Serial.println (randNumber_2);

randNumber_3 = random(1,7);
Serial.print ("dobbelsteen_3");
Serial.print ("= ");
Serial.println (randNumber_3);
Serial.println ();

delay(1000);
}
if (randNumber_1 == randNumber_2){
Serial.print ("WINST= €2,-");
}
else if (randNumber_2 == randNumber_3){
Serial.print ("WINST= €6,-");
}
else if (randNumber_1 == randNumber_3){
Serial.print ("WINST= €2,-");
}
else if (randNumber_1 == randNumber_2 == randNumber_3){
Serial.print ("WINST= €6,-");
}
else if (randNumber_1 == randNumber_2 == randNumber_3 == 6){
Serial.print ("WINST= €2,-")
}
// Function or subroutine
void function() {

}
[\code]

krijg dan foutcode bij de if weet alleen niet wat er fout is :oops:
ps sorry dat ik dat met code de vorige keer fout deed

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: dobbelsteen

Berichtdoor Koepel » 04 Okt 2020, 15:10

Je hebt nu [ \ code ] in plaats van [ / code ].
Meestal wordt een forward slash gebruikt voor dit soort tags, de backslash is soms een escape karakter.
Volgens mij is dat ergens in de jaren tachtig ontstaan met een tekstverwerker. Het begin van dikgedrukt werd met [ bold ] gedaan en het einde met [ / bold ]. Het wordt heel vaak gebruikt. Bijvoorbeeld in de brontekst van een webpagina kun je de HTML code zien. Dat is daar van afgeleid. Met bijvoorbeeld <big> als begin en </big> om het eind aan te geven.

De oplossing is eenvoudig.
Gebruik niet de knop "Plaats een snelle reactie", maar "Plaats een reactie".
Gebruik dan de knop "Code" die de code-tags geeft. Zet daar je sketch tussen.
Wijzigen het net zo lang totdat de sketch als code te zien, zodat wij het inspringen kunnen zien.

Ik schreef dit:
P.S.: Ik vind het erg belangrijk dat de tekst van de sketch er netjes uit ziet. Dus dat het gebruik van spaties, komma's en inspringen er netjes uit ziet. Als het goed is, zie je in één keer de structuur van de sketch.


Als je dat doet, dan zie je in één oogopslag wat het probleem is. Echt waar 8-)

Je kunt ook op Ctrl+T drukken in de Arduino IDE. Dan wordt het in een bepaalde stijl opgemaakt. Dat is misschien niet de stijl die je mooi vind. Je mag elke stijl gebruiken als het maar duidelijk en consequent is.

P.S.: Ik heb overal bij de tags (BBCode) spaties toegevoegd omdat ik niet weet hoe ik de tags tijdelijk uit kan zetten op dit forum.

Tip: Het aantal bonen in een pot witte bonen in tomatensaus is vanzelfsprekend een variabele. De "winst" is iets waar je mee gaat rekenen en dingen bij gaat optellen. Dus de "winst" is vanzelfsprekend een ... (zelf invullen ;) ).

Hieronder zie je die "Code"-knop voor de code-tags.
Bijlagen
code-knop.png
code-knop.png (30.67 KiB) 8342 keer bekeken

Volgende

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 24 gasten