Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 27. 12. 2013 17:07 — Editoval Satanus (27. 12. 2013 17:08)

Satanus
Zelenáč
Příspěvky: 7
Škola: ISŠNP
Pozice: Student
Reputace:   
 

Kalkulačka VB6.0

Zdravím. Mám problém s následujícím programem. Resp. částí programu. Problém je v tom že po zadání první číslice do druhého pole se provede výpočet a poté již program nepřepočítává.

Dim Odpor As Boolean
Dim Proud As Boolean
Dim Napeti As Boolean


Private Sub Ohm_Change()
If Not IsNumeric(Ohm.Text) Or Ohm.Text = "," Then Ohm.Text = ""
If Ohm.Text <> "" Then Odpor = True Else Odpor = False
If Odpor = True And Napeti = True Then
    Amper.Text = Volt.Text / Ohm.Text
    Proud = False
End If
If Proud = True And Odpor = True Then
    Volt.Text = Ohm.Text * Amper.Text
    Napeti = False
End If
End Sub

Private Sub Amper_Change()
If Not IsNumeric(Amper.Text) Or Amper.Text = "," Then Ohm.Text = ""
If Amper.Text <> "" Then Proud = True Else Proud = False
If Proud = True And Napeti = True Then
    Ohm.Text = Volt.Text / Amper.Text
    Odpor = False
End If
If Proud = True And Odpor = True Then
    Volt.Text = Ohm.Text * Amper.Text
    Napeti = False
End If
End Sub

Private Sub Volt_Change()
If Not IsNumeric(Volt.Text) Or Volt.Text = "," Then Ohm.Text = ""
If Volt.Text <> "" Then Napeti = True Else Napeti = False
If Proud = True And Napeti = True Then
    Ohm.Text = Volt.Text / Amper.Text
    Odpor = False
End If
If Napeti = True And Odpor = True Then
    Amper.Text = Volt.Text / Ohm.Text
    Proud = False
End If
End Sub


Napadlo mne nacpat veškeré výpočty pod hodiny a přepočítávat s tikáním hodin, ale to mi přijde jako obcházení problému.


Dostatečně pokročilou technologii nelze odlišit od magie. Arthur C. Clarke

Offline

 

#2 12. 01. 2014 16:19

pee-jay_cz
Zelenáč
Příspěvky: 2
Reputace:   
 

Re: Kalkulačka VB6.0

Ahoj. Je to zacyklený. Já bych to udělal tak, aby se Text_Change procedury vykonaly jen po změně z klávesnice, ne způsobeném přepočtem.

Code:

'*****************************************************

Option Explicit

'=====================================================
' R (Odpor, Ohm) = U (Napeti, Volt) / I (Proud, Amper)
'-----------------------------------------------------
' R = U / I *Odpor = Napeti / Proud
' I = U / R *Proud = Napeti / Odpor
' U = I * R *Napeti = Proud * Odpor
'=====================================================

Dim Proud As Single
Dim Napeti As Single
Dim Odpor As Single

Dim UpdatingControls As Boolean

Private Sub Ohm_Change()

    If UpdatingControls = True Then
        Exit Sub
    Else
        UpdatingControls = True
        If Val(Amper.Text) = 0 Then
            Amper.Text = VypoctiProud
        Else
            Volt.Text = VypoctiNapeti
        End If
        UpdatingControls = False
    End If

End Sub

Private Sub Amper_Change()

    If UpdatingControls = True Then
        Exit Sub
    Else
        UpdatingControls = True
        If Val(Ohm.Text) = 0 Then
            Ohm.Text = VypoctiOdpor
        Else
            Volt.Text = VypoctiNapeti
        End If
        UpdatingControls = False
    End If

End Sub

Private Sub Volt_Change()

    If UpdatingControls = True Then
        Exit Sub
    Else
        UpdatingControls = True
        If Val(Ohm.Text) = 0 Then
            Ohm.Text = VypoctiOdpor
        Else
            Amper.Text = VypoctiProud
        End If
        UpdatingControls = False
    End If

End Sub

Public Function VypoctiProud() As String

    If Val(Ohm.Text) > 0 Then
        Proud = Val(Volt.Text) / Val(Ohm.Text)
        VypoctiProud = Trim$(Str$(Proud))
    Else
        VypoctiProud = "Err"
    End If

End Function

Public Function VypoctiNapeti() As String
    
    Napeti = Val(Amper.Text) * Val(Ohm.Text)
    VypoctiNapeti = Trim$(Str$(Napeti))

End Function

Public Function VypoctiOdpor() As String

    If Val(Amper.Text) > 0 Then
        Odpor = Val(Volt.Text) / Val(Amper.Text)
        VypoctiOdpor = Trim$(Str$(Odpor))
    Else
        VypoctiOdpor = "Err"
    End If

End Function

'*****************************************************

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson