Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2009, 21:26   #1
askar
 
Регистрация: 13.03.2009
Сообщений: 7
По умолчанию Инженерный калькулятор (Visual Basic)

Здравствуйте, подскажите, пожалуйста в чем загвоздка. Пишу инженерный калькулятор. Написал пока только операции: + - * /. Но вот проблема:
код на все операции практически одинаков (различие лишь в знаках, ну там + или -), но почему - то прога выполняет только операции + и *.
/ и - выполняются неверно при многократном нажатии на кнопку "="
Пример: 9-1 = 8. Далее при нажатии на "=" должно появиться 7, но появляется снова 1. При дальнейшем нажимании на "=" начинают чередоваться 1 и 8.
Вот сам код. Прогу пишу на Visual Basic 2005. Заранее спасибо =)
Код:
Public Number, Memory As Double
    Public i As Integer
    Public N As Double

    Private Sub Button18_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ravno.Click
        'для кнопке равно
        Dim number2, number3 As Double

        If i = 1 Then
            number2 = Val(TextBox1.Text)
            number3 = Number + number2
            TextBox1.Text = number3.ToString
        End If

        If i = 2 Then
            number2 = Val(TextBox1.Text)
            number3 = Number - number2
            TextBox1.Text = number3.ToString
        End If

        If i = 3 Then
            number2 = Val(TextBox1.Text)
            number3 = Number * number2
            TextBox1.Text = number3.ToString
        End If

        If i = 4 Then
            number2 = Val(TextBox1.Text)
            number3 = Number / number2
            TextBox1.Text = number3.ToString
        End If
    End Sub

    Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Plus.Click
        i = 1
        Number = Val(TextBox1.Text)
        TextBox1.Text = ""
        TextBox1.Focus()
        'для кнопки плюс
    End Sub

    Private Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Minus.Click
        i = 2
        Number = Val(TextBox1.Text)
        TextBox1.Text = ""
        TextBox1.Focus()
        'для кнопки минус
    End Sub

    Private Sub Button14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Umnogit.Click
        i = 3
        Number = Val(TextBox1.Text)
        TextBox1.Text = ""
        TextBox1.Focus()
        'для кнопки умножить
    End Sub

    Private Sub Button13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles delenie.Click
        i = 4
        Number = Val(TextBox1.Text)
        TextBox1.Text = ""
        TextBox1.Focus()
        'для кнопки делить
    End Sub
askar вне форума Ответить с цитированием
Старый 13.03.2009, 22:28   #2
Svetlag
Пользователь
 
Аватар для Svetlag
 
Регистрация: 24.02.2009
Сообщений: 85
По умолчанию

Цитата:
Сообщение от askar Посмотреть сообщение
/ и - выполняются неверно при многократном нажатии на кнопку "="
Пример: 9-1 = 8. Далее при нажатии на "=" должно появиться 7, но появляется снова 1. При дальнейшем нажимании на "=" начинают чередоваться 1 и 8.
Я сразу прошу прощения, если что-то напутала в синтаксиие, т.к. на VB не пишу. Но думаю решить вопрос можно так:
Код:
Public Number, number2, Memory As Double

    Public i As Integer
    Public N As Double
    Public prevEnter As Boolean

    Private Sub Button18_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ravno.Click
        'для кнопке равно
        Dim number3 As Double

        If prevEnter Then
	Number = Val(TextBox1.Text)
        Else 
	number2 = Val(TextBox1.Text)
	prevEnter = True
        End If

        If i = 1 Then            
            number3 = Number + number2
            TextBox1.Text = number3.ToString
        End If

        If i = 2 Then
            number3 = Number - number2
            TextBox1.Text = number3.ToString
        End If

        If i = 3 Then
            number3 = Number * number2
            TextBox1.Text = number3.ToString
        End If

        If i = 4 Then
            number3 = Number / number2
            TextBox1.Text = number3.ToString
        End If
    End Sub

    Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Plus.Click
        i = 1
        prevEnter = False
        Number = Val(TextBox1.Text)
        TextBox1.Text = ""
        TextBox1.Focus()
        'для кнопки плюс
    End Sub

    Private Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Minus.Click
        i = 2
        prevEnter = False
        Number = Val(TextBox1.Text)
        TextBox1.Text = ""
        TextBox1.Focus()
        'для кнопки минус
    End Sub

    Private Sub Button14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Umnogit.Click
        i = 3
        prevEnter = False
        Number = Val(TextBox1.Text)
        TextBox1.Text = ""
        TextBox1.Focus()
        'для кнопки умножить
    End Sub

    Private Sub Button13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles delenie.Click
        i = 4
        prevEnter = False
        Number = Val(TextBox1.Text)
        TextBox1.Text = ""
        TextBox1.Focus()
        'для кнопки делить
    End Sub
Svetlag вне форума Ответить с цитированием
Старый 14.03.2009, 13:06   #3
askar
 
Регистрация: 13.03.2009
Сообщений: 7
По умолчанию

Спасибо огромное! Действительно помогло! Минус заработал как нужно. Но деление по прежнему работает не совсем правильно, т.е. например 8/4=2. Далее ещё раз: 2/2=1. Потом 1/2=0.5. А вот дальше уже 0.5/2 = 0(!). и дальше при нажатии на =, выводит только 0.
Я немного изменил код: вместо If...Then... поставил Select Case.
Код:
Public Number, Memory, number2, number3, N As Double
Public i As Integer
Public prevEnter As Boolean

Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Plus.Click
        i = 1
        prevEnter = False
        Number = Val(TextBox1.Text)
        TextBox1.Text = ""
        TextBox1.Focus()
End Sub
    
Private Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Minus.Click
        i = 2
        prevEnter = False
        Number = Val(TextBox1.Text)
        TextBox1.Text = ""
        TextBox1.Focus()
End Sub

Private Sub Button14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Umnogit.Click
        i = 3
        prevEnter = False
        Number = Val(TextBox1.Text)
        TextBox1.Text = ""
        TextBox1.Focus()
End Sub

Private Sub Button13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles delenie.Click
        i = 4
        prevEnter = False
        Number = Val(TextBox1.Text)
        TextBox1.Text = ""
        TextBox1.Focus()
End Sub

Private Sub Button18_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ravno.Click

        If prevEnter Then
            Number = Val(TextBox1.Text)
        Else
            number2 = Val(TextBox1.Text)
            prevEnter = True
        End If

        Select Case i
            Case 1
                number3 = Number + number2
                TextBox1.Text = number3.ToString
            Case 2
                number3 = Number - number2
                TextBox1.Text = number3.ToString
            Case 3
                number3 = Number * number2
                TextBox1.Text = number3.ToString
            Case 4
                number3 = Number / number2
                TextBox1.Text = number3.ToString
        End Select
End Sub
askar вне форума Ответить с цитированием
Старый 14.03.2009, 14:16   #4
Svetlag
Пользователь
 
Аватар для Svetlag
 
Регистрация: 24.02.2009
Сообщений: 85
По умолчанию

Цитата:
Сообщение от askar Посмотреть сообщение
Но деление по прежнему работает не совсем правильно, т.е. например 8/4=2. Далее ещё раз: 2/2=1. Потом 1/2=0.5. А вот дальше уже 0.5/2 = 0(!). и дальше при нажатии на =, выводит только 0.
Очень похоже, что функция Val(TextBox1.Text) возвращает целое значение, а не вещественное. Проверьте.
Svetlag вне форума Ответить с цитированием
Старый 14.03.2009, 21:35   #5
askar
 
Регистрация: 13.03.2009
Сообщений: 7
По умолчанию

Действительно проблема была в функции Val. Переделал её немного, а точнее сделал так: CDbl(Val(TextBox1.Text)). Она теперь и точку и запятую разрешает ставить =). Спасибо за помощь =)
askar вне форума Ответить с цитированием
Старый 19.12.2010, 15:45   #6
Studentka_iz_ZP
Пользователь
 
Регистрация: 14.03.2010
Сообщений: 15
По умолчанию

а command_click от button_click чем отличается ?
Studentka_iz_ZP вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual Basic 6 С.М.С Помощь студентам 3 29.12.2008 15:45
Visual Basic _леся_ Помощь студентам 3 24.12.2008 21:16
Инженерный калькулятор alikon1 Софт 0 26.11.2007 17:01