Probleempje met programma

Status
Niet open voor verdere reacties.

kokkie20

Gebruiker
Lid geworden
4 aug 2006
Berichten
221
Hallo,
Ik ben bezig met een programma voor mijn vader.
Me moeder had een tijdje geleden hier een vraag gesteld,
Maar kom er helaas niet meer uit.
Hij werkte wel goed, maar de mensen konden er niet goed mee overweg.
Dus vandaar dat ik de programma iets heb gewijzigd.
Maar dan het volgende probleem.
Ik wil de sommen in labels laten verwerken, en dan dat ze de antwoord in een textbox moeten verwerken.
Optel + Vermenigvuldig sommen werkt goed.
Maar de Aftrek sommen wilt niet werken.
Hierbij de code:

Link naar code programma

Mocht iemand weten wat ik fout doe?
De aftreksommen heb ik al op verschillende manieren gedaan.
En het is de bedoeling dat er 10 sommen tegelijk komt.
Elseif werkt niet, en als ik If doe dan doet hij er maar 1 tegelijk.
bedankt :thumb:

p.s : Hierbij voorbeeld van de nieuwe programma:
212slud.png
 
Waarom de IF bij de min sommen?
Ik vermoed dat je geen nagatieve getallen wilt weergeven, maar zo gebeurd er dus niets als Getal2 kleiner is dan Getal 1.
Je 'andere som werkt in ieder geval op deze manier altijd... en niet alleen maar als ;)

Code:
        If Getal2 > Getal1 = True Then
            lblSomeen.Text = Getal2 & " " & soort & " " & Getal1
            antwoord12 = (Getal2 - Getal1)
            'andere som
            lblSomeen.Text = Getal1 & " " & soort & " " & Getal2
            antwoord12 = (Getal1 - Getal2)
            'antwoord laten weergeven.
            TextBox1.Text = antwoord12
        End If

Gaat het inderdaad om het niet willen hebben van negatieve getallen draai ze dan om met een extra hulp variabele.

Code:
 If Getal2 > Getal1 = False then
            Getalx = Getal1 
            Getal1 = Getal2
           Getal2 = Getalx
End if
            lblSomeen.Text = Getal2 & " " & soort & " " & Getal1
            antwoord12 = (Getal2 - Getal1)
            'antwoord laten weergeven.
            TextBox1.Text = antwoord12

De End if kan je ook hoger in je (jouw) code zetten, maar dan moet je daarna een spong maken...of met een dubbele If werken.
 
Laatst bewerkt:
ok bedankt.
dus als het goed is moet ik dus :
If Getal2 > Getal1 = False then
Getalx = Getal1
Getal1 = Getal2
Getal2 = Getalx
End if

elke keer doen bij elke som of...?
zodat hij wel alle 10 de sommen gelijk laat zien?
iig bedankt voor de moeite
ga het vanavond uitproberen als ik thuis ben.
zit nu op me werk. :confused:
 
Kan ja, verder moet je Getalx nog even bekent maken via een dim, zonder werkt ook wel, maar is niet zo netjes.

Maar even terug naar wat je had;

Code:
If Getal2 > Getal1 = True Then
            lblSomeen.Text = Getal2 & " " & soort & " " & Getal1
            antwoord12 = (Getal2 - Getal1)
            'andere som
            lblSomeen.Text = Getal1 & " " & soort & " " & Getal2
            antwoord12 = (Getal1 - Getal2)
            'antwoord laten weergeven.
            TextBox1.Text = antwoord12
        End If

Wat doet dat nou, je kijk of getal 2 groter is dan Getal1, is dat zo dan voer je iets uit, maar wat als dat niet zo is... dan ga je verder na de End If, maar niet met Getal1 en Getal2 maar met de volgende som, dat kan natuurlijk bijna nooit goed gaan, 50% kans per som, dus 50% * 50% * 50% *50 *50% * 50% * 50% * 50% *50 *50% = circa 0,2% van je pogingen zal het wel goed werken...

Maar wat nu als het wel waar is (voor de eerste som), dan doe je eerst;

lblSomeen.Text = Getal2 & " " & soort & " " & Getal1
antwoord12 = (Getal2 - Getal1)

Maar er direct achteraan;

lblSomeen.Text = Getal1 & " " & soort & " " & Getal2
antwoord12 = (Getal1 - Getal2)

Uiteraard blijft dan alleen de laatste bewerking bewaard, en die wilde je m.i. juist niet uitgevoerd hebben als e.a. waar was voor Getal1 en Getal2.

Dus mijn voorstel was eerst controleren, eventueel de waarden omdraaien zodat je geen negatief antwoord kunt krijgen en tenslotte de text en antwoord maar één keer doorlopen.

N.b. bij 'Delen' voorzie ik nog meer problemen, hoe wil je voorkomen dat je met breuken moet gaan werken?
Ik zou het zo doen;

Eerst zelf de vermenigvuldiging uit te rekenen, dus stel Getal1 = 4 en Getal2 = 5 (ad random gekozen) dan weet je dat dit 20 is.
Nu draai je de waarden om, Vraag wordt dan Product van Getal1 * Getal2 / Getal1 = Getal2.

In code;

lblSomeen.Text = Getal1 * Getal2 & " " & soort & " " & Getal1
antwoord12 = Getal2

Of had je zelf al iets bedacht?
 
Laatst bewerkt:
hmm ik snap ongeveer wel wat je bedoelt met de aftrek sommen.
de delen sommen had ik al opgelost, heb ongeveer hetzelfde wat jij hebt, pizzara (volgens mij) had toen 1tje gemaakt in een inputbox. Maar daar konden de mensen niet zo goed mee overweg ;)
Dus het enigste wat me niet mee zal zitten is dus de aftrek sommen.
 
ok misschien kan het op een andere manier?
is het mogelijk dat als de gebruiker van het programma,
1 antwoord heeft ingevuld, dat er dan de volgende som tevoorschijn komt?
of is dat niet mogelijk? (dus als hij het antwoord in de textbox heeft gezet, dat de label wordt geactiveerd zal ik maar zeggen)
 
ik heb je een code gegeven voor inderdaad een inputbox.

Je kan ook per antwoord een nieuwe som laten verschijnen maar dan zal je moeten gaan werken met arrays en collections. Neem nou bijvoorbeeld de Getal1 tot en met Getal20 die heb je 20x gekopieerd om 20x een willekeurig getal te creeren , dat wordt gezien als slechte vb code.

dat doe je dus in een Array op de volgende manier...

Code:
        Dim MaximaalGetal As Integer = 5
        Dim WillekeurigGetal As New Random()

        Dim Getal(19) As Integer

        For b As Integer = 0 To (Getal.Length - 1)
            Getal(b) = WillekeurigGetal.Next(1, MaximaalGetal)
        Next

Getal(0) tot en met Getal(19) heeft dus nu allemaal een willekeurig nummer.
Zo moet dat ook met alle vergelijkingen, antwoorden etc.
Collections kan je daarna gebruiken om Objecten (textboxen, labels, en pictogrammen in jouw geval) in een collectie te zetten zodat je die in 1x later kan dupliceren.Maar dit vergt nog best wel wat code.
 
nog 1 klein probleempje
heb het eindelijk voor elkaar om alle sommen te laten werken.
nu het volgende probleempje...
Ik heb een button erin zitten.
Om te laten kijken welke sommen goed en fout zijn.
Hierbij stukje code van hoe ik het heb.
PHP:
    Private Sub btnNakijken_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNakijken.Click
        If TextBox1.Text = antwoord12 Then
            ptbSom1g.Visible = True
            ptbSom1f.Visible = False
        Else
            ptbSom1f.Visible = True
            ptbSom1g.Visible = False
        End If
    End Sub
maar het probleem dus is, dat hij het bij alle 10 moet doen,
ik heb helemaal geen verstand van array's of iets dergelijks.
Mocht iemand me ermee op weg helpen graag.
heb het programma namelijk bijna af :thumb:
 
heb net even een uurtje zitten coden...

dit lijkt me een betere oplossing. maak eens een nieuw project en plak deze code er maar in. Het lijkt heel veel maar de meeste code is opmaak van de controls op je juiste plek planten. Ik liep zelf een beetje te *****n met die control arrays dus heb ik maar het ultieme paardemiddel gebruikt ;)

Code:
Public Class Form1


    Dim EersteGetal(9), TweedeGetal(9), Antwoord(9) As Integer
    Dim Label(9) As Label

    Dim Vermenigvuldigen As New RadioButton
    Dim Delen As New RadioButton
    Dim Aftrekken As New RadioButton
    Dim Optellen As New RadioButton
    Dim Aantal As Integer
    Dim Counter As Integer = 0

    Dim lblEersteGetal() As Label = New Label() {New Label(), New Label(), New Label(), New Label(), New Label(), New Label(), New Label(), New Label(), New Label(), New Label()}
    Dim lblOperator() As Label = New Label() {New Label(), New Label(), New Label(), New Label(), New Label(), New Label(), New Label(), New Label(), New Label(), New Label()}
    Dim lblTweedeGetal() As Label = New Label() {New Label(), New Label(), New Label(), New Label(), New Label(), New Label(), New Label(), New Label(), New Label(), New Label()}
    Dim lblIsGelijk() As Label = New Label() {New Label(), New Label(), New Label(), New Label(), New Label(), New Label(), New Label(), New Label(), New Label(), New Label()}
    Dim txtAntwoord() As TextBox = New TextBox() {New TextBox(), New TextBox(), New TextBox(), New TextBox(), New TextBox(), New TextBox(), New TextBox(), New TextBox(), New TextBox(), New TextBox()}
    Dim btnControleren() As Button = New Button() {New Button(), New Button(), New Button(), New Button(), New Button(), New Button(), New Button(), New Button(), New Button(), New Button()}


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Me.Size = New System.Drawing.Size(352, 496)

        Vermenigvuldigen.Location = New System.Drawing.Point(35, 32)
        Delen.Location = New System.Drawing.Point(35, 56)
        Aftrekken.Location = New System.Drawing.Point(179, 32)
        Optellen.Location = New System.Drawing.Point(179, 56)

        Vermenigvuldigen.AutoSize = True
        Delen.AutoSize = True
        Aftrekken.AutoSize = True
        Optellen.AutoSize = True

        Vermenigvuldigen.Text = "Vermenigvuldigen"
        Delen.Text = "Delen"
        Aftrekken.Text = "Aftrekken"
        Optellen.Text = "Optellen"

        Me.Controls.AddRange(New Control() {Vermenigvuldigen, Delen, Aftrekken, Optellen})

        AddHandler Vermenigvuldigen.MouseClick, AddressOf RadioButtonsKlik
        AddHandler Delen.MouseClick, AddressOf RadioButtonsKlik
        AddHandler Aftrekken.MouseClick, AddressOf RadioButtonsKlik
        AddHandler Optellen.MouseClick, AddressOf RadioButtonsKlik

    End Sub


    Private Sub SommenMaken()
        Dim MaximaalGetal As Integer = 5

        Dim WillekeurigGetal As New Random()

        For b As Integer = 0 To (EersteGetal.Length - 1)
            EersteGetal(b) = WillekeurigGetal.Next(1, MaximaalGetal)
            TweedeGetal(b) = WillekeurigGetal.Next(1, MaximaalGetal)

            If Vermenigvuldigen.Checked = True Then Antwoord(b) = EersteGetal(b) * TweedeGetal(b)

            If Delen.Checked = True Then
                'Creeer een goede deelbare som , waarvan het antwoord niet hoger is dan Maximaalgetal.
                'Zet het daarna in de goede volgorde.
                Antwoord(b) = EersteGetal(b) * TweedeGetal(b)
                Dim TempGetal As Integer = Antwoord(b)
                Antwoord(b) = EersteGetal(b)
                EersteGetal(b) = TempGetal
            End If

            If EersteGetal(b) > TweedeGetal(b) Then 'Geen negatieve uitkomsten
                If Aftrekken.Checked = True Then Antwoord(b) = EersteGetal(b) - TweedeGetal(b)
            Else
                If Aftrekken.Checked = True Then Antwoord(b) = TweedeGetal(b) - EersteGetal(b)
            End If

            If Optellen.Checked = True Then Antwoord(b) = EersteGetal(b) + TweedeGetal(b)

        Next
    End Sub

    Private Sub SomOpFormLatenZien(ByVal Bovenkant As Integer, ByVal Links As Integer, ByVal Aantal As Integer)

        If Aantal >= 10 Then
            MsgBox("U heeft uw 10 sommen gemaakt!")
            Exit Sub
        End If


        If Vermenigvuldigen.Checked = True Then lblOperator(Aantal).Text = "x"
        If Delen.Checked = True Then lblOperator(Aantal).Text = ":"
        If Aftrekken.Checked = True Then lblOperator(Aantal).Text = "-"
        If Optellen.Checked = True Then lblOperator(Aantal).Text = "+"


        Me.Controls.AddRange(New Control() {lblEersteGetal(Aantal), lblOperator(Aantal), lblTweedeGetal(Aantal), lblIsGelijk(Aantal), txtAntwoord(Aantal), btnControleren(Aantal)})

        lblEersteGetal(Aantal).AutoSize = True
        lblOperator(Aantal).AutoSize = True
        lblTweedeGetal(Aantal).AutoSize = True
        lblIsGelijk(Aantal).AutoSize = True
        btnControleren(Aantal).AutoSize = True

        txtAntwoord(Aantal).Width = 25

        lblEersteGetal(Aantal).Location = New System.Drawing.Point(Links, (Bovenkant + (Aantal * 30)))
        lblOperator(Aantal).Location = New System.Drawing.Point(Links + 20, (Bovenkant + (Aantal * 30)))
        lblTweedeGetal(Aantal).Location = New System.Drawing.Point(Links + 35, (Bovenkant + (Aantal * 30)))
        lblIsGelijk(Aantal).Location = New System.Drawing.Point(Links + 55, (Bovenkant + (Aantal * 30)))
        txtAntwoord(Aantal).Location = New System.Drawing.Point(Links + 75, (Bovenkant + (Aantal * 30)))
        btnControleren(Aantal).Location = New System.Drawing.Point(Links + 125, (Bovenkant + (Aantal * 30)))

        lblEersteGetal(Aantal).Text = EersteGetal(Aantal)
        lblTweedeGetal(Aantal).Text = TweedeGetal(Aantal)
        lblIsGelijk(Aantal).Text = "="
        btnControleren(Aantal).Text = "Controleren"

        AddHandler btnControleren(Aantal).MouseClick, AddressOf Controleren

    End Sub


    Private Sub RadioButtonsKlik(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

        Call SommenMaken()

        Call SomOpFormLatenZien(100, 20, Counter)

    End Sub

    Private Sub Controleren(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If txtAntwoord(Counter).Text = Antwoord(Counter) Then
            sender.BackColor = System.Drawing.Color.Green
            sender.Text = "Goed!"
        Else
            sender.BackColor = System.Drawing.Color.Red
            sender.Text = "Fout!"
        End If

        Counter += 1
        Call SomOpFormLatenZien(100, 20, Counter)

    End Sub
End Class

volgens mij bedoel je het zo .....

gebruik de debug en de breakpoints om eens te kijken wat deze code nu precies doet en wanneer.

greets Pizara
 
knetters dat is pas een code :shocked:
ziet er goed uit, maar snap nog niet echt hoe ik die controle dan moet verwerken in de mijne?
 
niet , gewoon een proberen en uitzoeken hoe ik iets heb gedaan...

Ik probeer je gewoon op ideeen te brengen...


Vond nog een klein foutje in de code ...

Aanpassing :
Code:
            If EersteGetal(b) > TweedeGetal(b) Then 'Geen negatieve uitkomsten [B], daarna in de goede volgorde zetten.[/B]
                If Aftrekken.Checked = True Then Antwoord(b) = EersteGetal(b) - TweedeGetal(b)
            Else
                If Aftrekken.Checked = True Then Antwoord(b) = TweedeGetal(b) - EersteGetal(b)
[B]                Dim TempGetal As Integer = EersteGetal(b)
                EersteGetal(b) = TweedeGetal(b)
                TweedeGetal(b) = TempGetal[/B]
            End If


Je zou bij de RadioButtonsKlik, ze ook nog kunnen disablen totdat alle sommen zijn gemaakt...
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan