Toon posts:

[VB.net] Hulp nodig bij een reken-programmaatje

Pagina: 1
Acties:
  • 199 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Het zit zo ; Ik wou een makkelijke programmeertaal leren om wat handige tooltjes te maken voor mezelf, die ik nergens anders vond.
Om tot het niveau te komen wat ik wil, moet ik natuurlijk wat oefenen (ben nu een complete noob), en ik heb nu een paar probleempjes met een applicatie (Als je het een applicatie kan noemen).

Het programma berekent allerlei verschillende informatie uit 2 coördinaten, zoals de hellingshoek, de lengte, het middelpunt. Ook kan het kijken of een bepaald punt op de rechte zit. Middelbare school-wiskunde dus. (Wat best handig uitkomt aangezien ik dus op de middelbare school zit B) )

Afbeeldingslocatie: http://img450.imageshack.us/img450/4895/untitled11ec.png

Maar wat zijn nu mijn problemen ? Aan de meeste ben ik zelf via Google uitgekomen, maar voor sommige vraag ik jullie wijsheid _/-\o_ (*slijm*)

Hoe heb ik het laten werken ?

Schrik niet ! Het is waarschijnlijk heel vuile en onpraktische code, maar als het werkt maakt het voor mij niet uit. Maar het werkt echter niet, dus mag je altijd kritiek & tips geven op mijn verdeling van de code.

Als ik dus op "Bereken!" druk, maakt hij de "Check" button enabled (Deze staat natuurlijk in het begin uit), en dan berekent hij alles behalve de "Check" sectie. (Behalve "formule" dan, maar daar heb ik nog praktisch niks aan gedaan). Meestal gaat dit goed ;
De code voor "Bereken!" ;

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    Private Sub Button1_Click_2(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If txtX1.Text = "" Or txtX2.Text = "" Or txtY1.Text = "" Or txtY2.Text = "" Then
            MessageBox.Show("Vul wel alles in bij 'Coördinaten', anders kan ik niks")

        Else
            If txtX1.Text = txtX2.Text Then
                MessageBox.Show("Dit is een rechte die evenwijdig loopt met de Y-as, en is dus geen functie.")
            Else

                Dim X1 As Single
                Dim X2 As Single
                Dim Y1 As Single
                Dim Y2 As Single
                Dim LENGTE As Decimal
                Dim A As Single
                X1 = txtX1.Text
                X2 = txtX2.Text
                Y1 = txtY1.Text
                Y2 = txtY2.Text
                LENGTE = Math.Sqrt((X2 - X1) ^ 2 + (Y2 - Y1) ^ 2)
                txtLengte.Text = LENGTE
                txtMIDX.Text = (X1 + X2) / 2
                txtMIDY.Text = (Y1 + Y2) / 2
                A = (Y2 - Y1) / (X2 - X1)
                txtA.Text = A
                txtALPHA.Text = Math.Atan(A) * (180 / Math.PI)
                btCheck.Enabled = True


            End If


        End If

    End Sub


En de code voor "Check!" (Ik weet dat het een beetje onpraktisch is dat b hier pas berekent word, maarja 8)7 )

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    Private Sub btCheck_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btCheck.Click
        Dim PUNTX1 As Single
        Dim PuntY1 As Single
        Dim B As Single
        X1 = txtX1.Text
        X2 = txtX2.Text
        Y1 = txtY1.Text
        Y2 = txtY2.Text
        A = (Y2 - Y1) / (X2 - X1)
        PUNTX1 = txtPUNTX1.Text
        PuntY1 = txtPUNTY1.Text
        B = (A * X1 - Y1) * -1
        txtB.Text = B


        If txtPUNTX1.Text = "" Or txtPUNTY1.Text = "" Then
            MessageBox.Show("Wel iets invullen hé..")
        Else
            If PUNTX1 * A + B = PuntY1 Then
                lbANS.ForeColor = Color.DarkGreen
                lbANS.Text = "Yep"
            Else
                lbANS.ForeColor = Color.DarkRed
                lbANS.Text = "Nope"

            End If


        End If
    End Sub


Soms werkt dit dus goed, bijvoorbeeld ;
Afbeeldingslocatie: http://img353.imageshack.us/img353/638/res11xu.png
Maar als ik met grotere getallen ga werken (lijkt het) alsof het dus altijd fout gaat. Als ik check of het middelpunt er dan opligt, geeft hij "nope" als antwoord terug, terwijl dit helemaal niet logisch is.
Afbeeldingslocatie: http://img353.imageshack.us/img353/1303/res29ce.png

Ik heb mijn code al doorgezocht, maar tja, ik zit niet voor niets in een talenrichting met zo weinig mogelijk wiskunde. Kan het namelijk niet echt zo heel goed, dus waarschijnlijk heb ik een formule verkeerd vervormt ofzo.
De broncode is hier te vinden in .txt deze haal ik maar weg ;) : (Is helemaal niet lang, dus als iemand misschien zou willen doorlezen _/-\o_ )
Ik snap niet wat ik fout doe, maar het zal zeker wel een foutje zijn dat ik over het hoofd zie ^^.

Nu moet ik alleen er nog voor zorgen dat a een breuk blijft, dat de graden in ° ' " worden weergegeven, en nog wat andere dingen fixen, maar daarbij blijft Google mijn beste vriend :) .

[ Voor 4% gewijzigd door whoami op 23-05-2006 22:06 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 20-02 21:53
Tja, .... wel een uitgebreide topicstart, maar dit komt bij mij wel over als 'debug ff m'n code', en dat kan nooit de bedoeling zijn.
Ik zou zeggen: begin eerst eens met het plaatsen van een breakpoint in je code (bv in de 'btn_Check_Click) method, en voer dan je programma uit, en loop eens stap voor stap door je code met de debugger. Dan kan je zien wat er precies gebeurt, en mbhv watches kan je de inhoud van variablen gaan controleren.

Verder helpt het ook als je wat stricter gaat programmeren, en VB.NET 'strikter' laat zijn (option strict). Nu ga je nl. een string aan een numeriek veld gaan toekennen, zonder dat je expliciet cast (vanaf regel 16 bv in je eerste code-fragment). Da's gewoon vies, en zorgt imo voor foutgevoelige code.

[ Voor 26% gewijzigd door whoami op 23-05-2006 22:08 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ik zal inderdaad dan nog wat gaan proberen met breakpoints en mijn code te verplaatsen/netter te maken. Gelukkig heb ik vanaf morgen dus vrij om extra lang over de code bezig te zijn.
Sorry als het een 'debug ff mijn code" topic is, was niet echt mijn bedoeling aangezien ik er al best wat in heb gestoken, maar ik zal meer proberen en mijn bevindingen opnieuw posten (ook ineens een goede oefening :) )

Verwijderd

Topicstarter
Na een tijdje de code te doorzien & te proberen ben ik er dus achtergekomen dat deze "error" voorkomt als a een getal is met veel cijfers na de komma. Ik ga even kijken hoe ik ervoor kan zorgen dat a in een breuk kan worden weergegeven, en dan probeer ik het opnieuw (Woops, vergeten dat de laatste post van mij was)

[ Voor 18% gewijzigd door Verwijderd op 24-05-2006 15:34 ]


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 14:44

TeeDee

CQB 241

Of je zou a in een double / float / long kunnen stoppen.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
Verwijderd schreef op woensdag 24 mei 2006 @ 15:32:
Na een tijdje de code te doorzien & te proberen ben ik er dus achtergekomen dat deze "error" voorkomt als a een getal is met veel cijfers na de komma.
Zoals Whoami als zei: Gebruik option strict om typesafety af te dwingen.

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • whoami
  • Registratie: December 2000
  • Laatst online: 20-02 21:53
Floats en longs zijn niet echt precies; als je echte preciesie wilt, gebruik dan een decimal

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ok, ik was te druk om iets te doen, maar nu kan ik weer wat aan dit progje werken ;
Ik heb al verschillende dingen geprobeerd, waaronder :

a & b in een decimal stoppen

Heeft helaas niet gewerkt.

Een andere formule gebruiken voor b

In plaats van (A * X1 - Y1) * -1 gebruik ik nu -A * X1 + Y1 (Deze heb ik aan mijn wiskunde lerares gevraagd). Dit lost helaas ook niks op.

Option Strict ?

Ik heb nu Option strict aangezet, maar ik weet eigenlijk niet hoe ik het moet gebruiken.
In het boek dat ik gekocht heb staat er niks over (Kon het niet vinden in de index) en via google heb ik deze sites gevonden ;

http://msdn2.microsoft.co...rary/zcd4xwzs(VS.80).aspx
http://weblogs.asp.net/prieck/archive/2003/10/21/32869.aspx

Ik snap nu wel wat Option strict ongeveer inhoud, maar hoe ik het moet gebruiken voor mijn project ontgaat mij even. Ik moet dus eerst converten naar een string voordat ik het resultaat laat zien in de textbox ?

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Bij komma getallen kan je nooit zien of ze gelijk zijn. Het enige dat je kan zien is of ze bij elkaar liggen. Neem de absolute waarde van het verschil van twee getallen en kijk of dit kleiner is dan bv 1E-5 (afhankelijk van hoe nauwkeurig je het resultaat wilt hebben).

  • MacWolf
  • Registratie: Januari 2004
  • Laatst online: 06-09-2024
Probeer maar 1 type te gebruiken, zodat je voorkomt dat er afrondingsverschillen ontstaan (Option Strict zou overigens alles hard geconverteerd willen zien). Ik zou alles in een Double stoppen, ipv. een Single. Voor zover ik weet is de Double beter met grote getallen, maar kost ook meer geheugen (zoals de naam doet vermoeden).

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition.

Pagina: 1