КАЛКУЛАТОР

5 отговора 305 прегледа
#1

КАЛКУЛАТОР

Начи налегнах бумагите да чета за VB и като второ задание след програмката "Hеllo World" се заех да правя калкулатор.
Кеф голям, че потръгна, ама ми смята по някаква за мен непозната математика.
Пр.
1, 20 - 0, 20 ми извежда, че е равно на 0, 99999...............
Преглеждам си кода и не мога да разбера на какво се дължи тази грешка.
Имам съмнения, че ф-та Val дето използвам не е много подходяща и в нея се крие рисковничето.
Чакам помощ..................Bye, bye........................

Отговор
в отговор на sulzica #2

Re: КАЛКУЛАТОР

Проблема май се крие в типа на променливите, дето ползваш. Постни част от кода, който смяташ, че е проблематичен.


Щирлиц
Отговор
в отговор на Щиpлиц #3

Re: КАЛКУЛАТОР

Private Sub Buttumj_Click()
If Znak = "+" Then
P2 = Val(Label1.Caption)
Label1.Caption = P1 + P2
End If
If Znak = "-" Then
P2 = Val(Label1.Caption)
Label1.Caption = P1 - P2
End If
If Znak = "*" Then
P2 = Val(Label1.Caption)
Label1.Caption = P1 * P2
End If
If (Znak = "/" And Val(Label1.Caption) <> 0) Then
P2 = Val(Label1.Caption)
Label1.Caption = P1 / P2
End If
If (Znak = "/" And Val(Label1.Caption) = 0) Then
Label1.Caption = "Error!"
End If
P1 = Val(Label1.Caption)
Zn = False
Znak = "*"
End Sub

Когато е изписано нещо на label1, тогава посочвам да се възприеми като число и да се извършат съответните действия..........:(
P1 = Val(Label1.Caption)

Отговор
в отговор на sulzica #4

Re: КАЛКУЛАТОР

А къде дефинираш променливите? ... Ако не са дефинирани - се третират като Variant, което пък точно за калкулатор е много неправилно.

По-добре дефинирай като Single, и след изчисление на резултата прави окръгляване до 2 или колкото ти трябват знака след десетичната запетая.

Round() ще ти свърши работа.


Щирлиц
Отговор
в отговор на Щиpлиц #5

Re: КАЛКУЛАТОР



Ами да, като variant съм ги декларирала променливите, ужас.
И още нещо да питам, в момента чета за текстовите файлове и следния запис ми е напълно непонятен за какво се използва...........

Wrap$ = Chr$ (13) + Chr $ (10)

Отговор
в отговор на sulzica #6

Re: КАЛКУЛАТОР

ASCII кодове 13-10 означава vbCrLf (Carrier, Line Feed) - т.е. "нов ред".

vbCrLf е константа на компилатора, и въобще използването на стрингова променлива в кода, за да се съкрати търсенето, намирането и заместването на знака за нов ред - е напълно излишно.

Ако искаш да запишеш в стрингова променлива текст с повече от един ред може така:

strText = "Първа линия на текста" & vbCrLf & "Втора линия на текста"

което става и с алтернативните кодове:

strText = "Първа линия на текста" & chr(13) & chr(10) & "Втора линия на текста"

допълване на линия към вече съществуващ текст в променлива става съответно:

strText = strText & "Поредната линия на текста" & vbCrLf

За по-голямо удобство, ако сглобяваш повече редове текст, може да "редиш" текста в кода си на редове, за по-добра прегледност:

strText = "First line" & vbCrLf & _

"Second line" & vbCrLf & _
"Third line..." & vbCrLf


така ще виждаш по-добре в кода какво и как разполагаш.

Обработката на стрингове в Бейсик е много лека, и езика предлага много възможности. Обърни внимание на функциите Left(), Right(), Mid(), Trim(), LTrim(), RTrim(), Split(), Join(), Val(), CStr(), IsNumeric(), InStr(), InStrRev()...

...

А за клуба, ако постваш програмен код, е най-добре да го заграждаш с тагове така:

[prе]
код
[/prе]

така програмните редове няма да се разместват. Таговете се пишат на латиница.

Успех.


Щирлиц

Редактирано от Щиpлиц на

Отговор