guardar un numero y mostrarlo de nuevo programa calculadora

Iniciado por creiko, 24 Agosto 2016, 20:45 PM

0 Miembros y 1 Visitante están viendo este tema.

creiko

el problema es el siguiente debo hacer uan calculadora cientifica en visual basic
ya tengo casi todas las funciones pero no logro hacer bien las siguientes si alguien me ayude o explique

MS, M-, M+ MR

un ejemplo seria asi
supongamos ingreso  el numero 9. le doy el boton C. se borra el contenido e la pantalla, y al pulsar MR deberia volver a mostrar el 9
Código (vb) [Seleccionar]


Public Class Form1
    Dim b As Integer
    Dim c As Integer
    Dim num1 As Double
    Dim num2 As Double
    Dim resul As Integer








    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles B1.Click

        Tpantalla.Text = Tpantalla.Text & "1"

    End Sub

    Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Bsuma.Click


        b = 1
        num1 = Tpantalla.Text
        Tpantalla.Text = ""

    End Sub

    Private Sub B0_Click(sender As Object, e As EventArgs) Handles B0.Click

        Tpantalla.Text = Tpantalla.Text & "0"
    End Sub

    Private Sub B2_Click(sender As Object, e As EventArgs) Handles B2.Click

        Tpantalla.Text = Tpantalla.Text & "2"
    End Sub

    Private Sub B3_Click(sender As Object, e As EventArgs) Handles B3.Click

        Tpantalla.Text = Tpantalla.Text & "3"
    End Sub

    Private Sub B4_Click(sender As Object, e As EventArgs) Handles B4.Click
        Tpantalla.Text = Tpantalla.Text & "4"
    End Sub

    Private Sub B5_Click(sender As Object, e As EventArgs) Handles B5.Click

        Tpantalla.Text = Tpantalla.Text & "5"
    End Sub

    Private Sub B6_Click(sender As Object, e As EventArgs) Handles B6.Click

        Tpantalla.Text = Tpantalla.Text & "6"
    End Sub

    Private Sub B7_Click(sender As Object, e As EventArgs) Handles B7.Click

        Tpantalla.Text = Tpantalla.Text & "7"
    End Sub

    Private Sub B8_Click(sender As Object, e As EventArgs) Handles B8.Click

        Tpantalla.Text = Tpantalla.Text & "8"
    End Sub

    Private Sub B9_Click(sender As Object, e As EventArgs) Handles B9.Click

        Tpantalla.Text = Tpantalla.Text & "9"
    End Sub

    Private Sub Bigual_Click(sender As Object, e As EventArgs) Handles Bigual.Click
        num2 = Tpantalla.Text
        If b = 1 Then
            Tpantalla.Text = num1 + num2

        End If
        If b = 2 Then
            Tpantalla.Text = num1 - num2

        End If
        If b = 3 Then
            Tpantalla.Text = num1 * num2

        End If
        If b = 4 Then
            If num2 <> 0 Then
                Tpantalla.Text = num1 / num2
            Else
                Tpantalla.Text = "No divisible"

            End If

           

           
        End If
        If b = 5 Then
            Tpantalla.Text = num1 ^ num2

        End If

       
    End Sub

    Private Sub Bresta_Click(sender As Object, e As EventArgs) Handles Bresta.Click
        b = 2
        Bcoma.Enabled = True
        num1 = Tpantalla.Text
        Tpantalla.Text = ""
    End Sub

    Private Sub Bmulti_Click(sender As Object, e As EventArgs) Handles Bmulti.Click
        b = 3
        Bcoma.Enabled = True
        num1 = Tpantalla.Text
        Tpantalla.Text = ""
    End Sub

    Private Sub Bdivi_Click(sender As Object, e As EventArgs) Handles Bdivi.Click
        b = 4
        Bcoma.Enabled = True
        num1 = Tpantalla.Text
        Tpantalla.Text = ""
    End Sub

    Private Sub Blim_Click(sender As Object, e As EventArgs) Handles Blim.Click
        Tpantalla.Text = ""
        Bcoma.Enabled = True
    End Sub

    Private Sub Bcoma_Click(sender As Object, e As EventArgs) Handles Bcoma.Click


        Tpantalla.Text = Tpantalla.Text & ","
        Bcoma.Enabled = False


    End Sub

    Private Sub Tpantalla_TextChanged(sender As Object, e As EventArgs) Handles Tpantalla.TextChanged

    End Sub

    Private Sub Buno_Click(sender As Object, e As EventArgs) Handles Buno.Click

        Try

            Dim lar As Integer
            If Tpantalla.Text <> "" Then
                lar = Tpantalla.Text.Length
                Tpantalla.Text = Mid(Tpantalla.Text, 1, lar - 1)
            End If
        Catch ex As Exception



        End Try
    End Sub

    Private Sub Bx_Click(sender As Object, e As EventArgs) Handles Bx.Click

        b = 5
        num1 = Tpantalla.Text
        Tpantalla.Text = ""

        If b = 5 Then
            Tpantalla.Text = num1 ^ 2

        End If


    End Sub

    Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
        b = 5
        num1 = Tpantalla.Text
        Tpantalla.Text = ""


    End Sub

    Private Sub Braiz_Click(sender As Object, e As EventArgs) Handles Braiz.Click
        b = 7
        num1 = Tpantalla.Text
        Tpantalla.Text = ""

        If b = 7 Then
            Tpantalla.Text = Math.Sqrt(num1)

        End If
    End Sub

    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
        b = 8
        num2 = Tpantalla.Text
        Tpantalla.Text = ""

        If b = 8 Then
            Tpantalla.Text = 1 / num2

        End If
    End Sub

    Private Sub Bmm_Click(sender As Object, e As EventArgs) Handles Bmm.Click
        b = 9
        num1 = Tpantalla.Text
        Tpantalla.Text = ""

        If b = 9 Then
            Tpantalla.Text = num1 * (-1)

        End If

    End Sub

    Private Sub Bfac_Click(sender As Object, e As EventArgs) Handles Bfac.Click
        Dim a, b, c As Integer

        a = (Tpantalla.Text)
        b = 1
        For c = 1 To a
            b = b * c
            Tpantalla.Text = (b)
        Next
    End Sub

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs)

    End Sub

    Private Sub Bsen_Click(sender As Object, e As EventArgs) Handles Bsen.Click


        b = 10
        num1 = Tpantalla.Text
        Tpantalla.Text = ""

        If b = 10 Then
            Tpantalla.Text = Math.Sin(Val(num1) * Math.PI / 180)
        End If
    End Sub

    Private Sub Bcos_Click(sender As Object, e As EventArgs) Handles Bcos.Click
        b = 11
        num1 = Tpantalla.Text
        Tpantalla.Text = ""

        If b = 11 Then
            Tpantalla.Text = Math.Cos(Val(num1) * Math.PI / 180)
        End If
    End Sub

    Private Sub Btan_Click(sender As Object, e As EventArgs) Handles Btan.Click
        b = 12
        num1 = Tpantalla.Text
        Tpantalla.Text = ""

        If b = 12 Then
            Tpantalla.Text = Math.Tan(Val(num1) * Math.PI / 180)
        End If
    End Sub

    Private Sub Bmem_Click(sender As Object, e As EventArgs) Handles Bmem.Click

    End Sub
End Class



Eleкtro

#1
Esto no es Visual Basic, es Visual Basic.NET, pro favor, publica correctamente las preguntas en el futuro.

Cita de: creiko en 24 Agosto 2016, 20:45 PMno logro hacer bien las siguientes si alguien me ayude o explique

MS, M-, M+ MR

Se hace muy tedioso de leer el código que has publicado, y los nombres de muchos de los controles que has definido (los botones) no describen su función ni tampoco has dejado pistas, ni tampoco te has molestado en explicarnos al menos en lo que debemos fijarnos de tu código, así que disculpa pero en vez de ponerme a revisar y buscar un fallo en tu código directamente prefiero mostrarte un ejemplo (el cual te debería resultar muy sencillo adaptarlo) de como puedes implementar las funciones de memoria:

Código (vbnet) [Seleccionar]
' El formato del separador de decimales.
Private ReadOnly numberFormat As NumberFormatInfo = CultureInfo.GetCultureInfo("en-US").NumberFormat
Private memValue As Decimal

' M+
Private Sub Button_MemAdd_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles Button_MemAdd.Click

   Me.memValue += Decimal.Parse(Me.TextBox_CalcDisplay.Text, Me.numberFormat)

End Sub

' M-
Private Sub Button_MemSubstract_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles Button_MemSubstract.Click

   Me.memValue -= Decimal.Parse(Me.TextBox_CalcDisplay.Text, Me.numberFormat)

End Sub

' MR
Private Sub Button_MemRecall_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles Button_MemRecall.Click

   Me.TextBox_Input.Text = Convert.ToString(If(Me.memValue = 0.0D, 0D, Me.memValue), Me.numberFormat)

End Sub

' MC
Private Sub Button_MemClear_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles Button_MemClear.Click

   Me.memValue = 0D

End Sub





Aparte de eso, veo muchas partes del código cuyo algoritmo lo puedes simplificar a un par de lineas, es comprensible que todavía no te des cuenta puesto que estarás iniciándote en el lenguaje empezando por programar una calculadora, pero conviene que sepas desde ya sobre malas costumbres de programación que solo te complicarán la vida y hacer un esfuerzo por evitar escribir cosas como esta:

Código (vbnet) [Seleccionar]
Private Sub B0_Click(sender As Object, e As EventArgs) Handles B0.Click

   Tpantalla.Text = Tpantalla.Text & "0"
End Sub

Private Sub B2_Click(sender As Object, e As EventArgs) Handles B2.Click

   Tpantalla.Text = Tpantalla.Text & "2"
End Sub

Private Sub B3_Click(sender As Object, e As EventArgs) Handles B3.Click

   Tpantalla.Text = Tpantalla.Text & "3"
End Sub

Private Sub B4_Click(sender As Object, e As EventArgs) Handles B4.Click
   Tpantalla.Text = Tpantalla.Text & "4"
End Sub

Private Sub B5_Click(sender As Object, e As EventArgs) Handles B5.Click

   Tpantalla.Text = Tpantalla.Text & "5"
End Sub

Private Sub B6_Click(sender As Object, e As EventArgs) Handles B6.Click

   Tpantalla.Text = Tpantalla.Text & "6"
End Sub

Private Sub B7_Click(sender As Object, e As EventArgs) Handles B7.Click

   Tpantalla.Text = Tpantalla.Text & "7"
End Sub

Private Sub B8_Click(sender As Object, e As EventArgs) Handles B8.Click

   Tpantalla.Text = Tpantalla.Text & "8"
End Sub

Private Sub B9_Click(sender As Object, e As EventArgs) Handles B9.Click

   Tpantalla.Text = Tpantalla.Text & "9"
End Sub


Piensa en lo siguiente: tienes 10 botones, esos 10 botones llevan por nombre un número (0...9), y los 10 cumplen una misma funcionalidad que es añadir su "nombre" o número correspondiente al textbox, entonces, ¿por que no unir todos los botones en el mismo controlador de eventos con la sentencia Handles?:

Código (vbnet) [Seleccionar]
Private Sub MultiHandler_NumericButtons_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles Button_Num1.Click, Button_Num2.Click, Button_Num3.Click,
       Button_Num4.Click, Button_Num5.Click, Button_Num6.Click,
       Button_Num7.Click, Button_Num8.Click, Button_Num9.Click,
       Button_Num0.Click

   Me.TextBox_CalcDisplay.AppendText(DirectCast(sender, Button).Text)

End Sub


PD: En caso de que la propiedad TextBox.Text no sea un número (es de suponer que si, al tratarse de una calculadora), siempre puedes utilizar la propiedad TextBox.Tag

Saludos!