Hoe random ik + - ÷ × in 1 label?

Status
Niet open voor verdere reacties.

jorisbenjamin

Nieuwe gebruiker
Lid geworden
15 mei 2014
Berichten
3
Hallo,

Ik ben bezig met een rekentrainer als opdracht voor mijn school, Dit doe ik in visual studio 2012 c#.
Nou vroeg ik mij af : hoe random ik de + - ÷ ×. Ik moet er bij zeggen dat ik weinig tot geen kennis heb nog met het programmeren en dit het eerste project is, vind het hartstikke leuk wel!

En waarom post ik het hier? De docent is helaas afwezig en wil graag verder en het weekend is in zicht.

Groet
Joris
 
Daar zijn een aantal manieren voor te bedenken. Aangezien het schoolwerk betreft. Beschrijf eens hoe je zelf gedacht had dit op te lossen en waar je vast loopt. Vanaf daar kunnen we je dan wel wat hints geven.
 
Zelf zal ik denken om het in 1 groep ( container denk ik dan ) te stoppen en dat door iets te laten randomizen. Maar dit is dan volledig zonder enige code bedacht, ik stel het me meer zo voor.
 
Hee,

hartstikke bedankt voor je reactie en programmaatje dat je in elkaar hebt gezet. ik ga er meteen naar kijken!
 
Ik denk dat een objectgeorienteerde oplossing hier een betere aanpak is (al kent deze standaard geen voorgangregels en zal je dat zelf moeten afhandelen als dat nodig is). Ik zou er zelf voor kiezen om een klasse operator te maken die voor alle operaties gebruikt kan worden en de daadwerlijke functionaliteit van de operator onder te brengen in een aparte klasse waardoor alle functionaliteit die bij een bepaald onderdeel horen ook bij dat onderdeel verzameld staat en je geen god klasse hoeft te maken door de functionaliteit van de verschillende onderdelen in één klasse onder te brengen.

De implementatie zou er bijvoorbeeld als volgt uit kunnen zien:

[cpp]
public enum OperatorType {
MIN, PLUS, DELEN, VERMENIGVULDIGEN;
}

public abstract class AbstractOperatorType {

private OperatorType type;
private String teken;

public AbstractOperatorType(OperatorType type, String teken) {
this.type = type;
this.teken = teken
}

public OperatorType getType() {
return type;
}

public String getTeken() {
return teken;
}

public abstract int bereken(int left, int right);
}

public class Operator {

private AbstractOperatorType type;

public Operator(AbstractOperatorType type) {
this.type = type;
}

public OperatorType getType() {
return type.getType();
}

public String getTeken() {
return type.getTeken();
}

public int bereken(int left, int right) {
return type.bereken(left, right);
}
}

// voor iedere operator implementeer je nu de bijbehorende bereken methode

public class MinOperatorType : AbstractOperatorType {

public MinOperatorType() : base(OperatorType.MIN, "-") {
}

public override int bereken(int left, int right) {
return left - right;
}
}


public class PlusOperatorType : AbstractOperatorType {

public PlusOperatorType() : base(OperatorType.PLUS, "+") {
}

public override int bereken(int left, int right) {
return left + right;
}
}

public class DelenOperatorType : AbstractOperatorType {

public DelenOperatorType() : base(OperatorType.DELEN, "/") {
}

public override int bereken(int left, int right) {
return left / right;
}
}

public class VermenigvuldigOperatorType : AbstractOperatorType {

public VermenigvuldigOperatorType() : base(OperatorType.VERMENIGVULDIGEN, "*") {
}

public override int bereken(int left, int right) {
return left * right;
}
}
[/cpp]

Voor het genereren van random operators zou je dan bijvoorbeeld iets als dit kunnen doen:

[cpp]
private const int aantalTypes = 4;
private Random random = new Random();

public Operator generateRandomOperator() {
int r = random.nextInt() % aantalTypes;

if (r == 0) return new Operator(new MinOperatorType());
if (r == 1) return new Operator(new PlusOperatorType());
if (r == 2) return new Operator(new DelenOperatorType());
if (r == 3) return new Operator(new VermenigvuldigOperatorType());
}
[/cpp]


Ik heb de code niet getest en werk tegenwoordig nog maar zelden in .NET, dus wellicht is het noodzakelijk om een paar kleine dingen te wijzigen. Maar daar kom je zelf wel uit neem ik aan. Verder heb ik het simpel gehouden en voor iedere berekening uitgegaan van een int en moet je dit ook zelf even aanpassen mocht je het anders willen.

edit: stukje code vergeten te posten:

[cpp]
// voor iedere operator implementeer je nu de bijbehorende bereken methode

public class MinOperatorType : AbstractOperatorType {

public MinOperatorType() : base(OperatorType.MIN, "-") {
}

public override int bereken(int left, int right) {
return left - right;
}
}


public class PlusOperatorType : AbstractOperatorType {

public PlusOperatorType() : base(OperatorType.PLUS, "+") {
}

public override int bereken(int left, int right) {
return left + right;
}
}

public class DelenOperatorType : AbstractOperatorType {

public DelenOperatorType() : base(OperatorType.DELEN, "/") {
}

public override int bereken(int left, int right) {
return left / right;
}
}

public class VermenigvuldigOperatorType : AbstractOperatorType {

public VermenigvuldigOperatorType() : base(OperatorType.VERMENIGVULDIGEN, "*") {
}

public override int bereken(int left, int right) {
return left * right;
}
}
[/cpp]
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan