Ahoj! Nevíte někdo náhodou,jak se dá udělat v Basicu kalkulačka? Předem díky..( anajkaa@seznam.cu)
Fórum › Visual Basic
Kalkulačka
Nejjednoduší, pokud chceš pracovat uplně bez proměnných je primitivní forma kalkulačky kde jsou čtyři textové pole a jedno tlačítko s tím, že uživatel do jednoho pole napíše číslo, se kterým chce pracovat, do druhého pole napíše číslo, se kterým chce provádět mat. operaci vůči 1. čislu a do třetího znak požadované operace (/,*,+,-)s tím, že při stisknutí tlačítka bude nejaky takový příkaz.
Samozřejmě by to šlo ošetřit, aby v textových polích byly jen požadované znaky (čísla a +-*/), ale tohle mi přijde jako nejjednoduší možná verze.
Edit: Omlouvám se. V mém kódě je chyba, v případě sčítaní program nesčítá čísla, ale přidává znaky, proto se asi bez proměnných neobejdeš. V tom případě ale stačí kód jen trochu pozměnit:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim cisloprvni As Integer
Dim cislodruhe As Integer
cisloprvni = TextBox1.Text
cislodruhe = TextBox2.Text
If TextBox3.Text = "/" Then TextBox4.Text = cisloprvni / cislodruhe
If TextBox3.Text = "*" Then TextBox4.Text = cisloprvni * cislodruhe
If TextBox3.Text = "+" Then TextBox4.Text = cisloprvni + cislodruhe
If TextBox3.Text = "-" Then TextBox4.Text = cisloprvni - cislodruhe
End Sub
Kód je psán v Visual Studiu 2008, proto v jiných verzích může být trochu jiný. (Například ve VB 6 se textové pole jmenuje TextX , ne textboxX
For Pete :) doporucuju kalkulacku mn- od sencoru cena/vykon pomer jednoznacne nejlepsi ideal SEC 185 no ale mozna i o tridu vejs - kup to pres net - cena - zkus zbozi na seznamu nebo dopo elektro-sencor.cz od original shopu to chodi a dobra cena - CUS
pro VB6
volání funkce např.
Text1.Text = Calc(Text1.Text)
Pokud je na prvním místě TextBoxu "=", předpokládá funkce vzorec.
Předpokládaný text např.
Text1.Text = "1+10/58-5*28/78954+2"
Za textem 'InfoZ je zřejmé,co funkce kontroluje (a tím pádem umí, např. neumí závorky)
Public Function Calc(ByVal aT As String) As String
Calc = aT
If Delka(aT) = 0 Then
Calc = "0"
Exit Function
End If
If Mid(aT, 1, 1) <> "=" Then Exit Function
Dim aPovoleno As String
Dim aChyba As Boolean, Prac_Double As Double
Dim aI As Integer, aJ As Integer
Dim aZac As Integer, aKon As Integer, aPoz As Integer, aPoc As Integer
Dim aU As String, aV As String
Dim aCis(100) As Double, aOper(100) As String * 1
Dim Zadani As String
aPovoleno = "0123456789+-*/.,"
Zadani = aT
aChyba = False: aT = Mid(Trim(aT), 2)
Calc = aT
For aI = 1 To Len(aT)
aPoz = aI
aZac = 0
aU = Mid(aT, aI, 1)
For aJ = 1 To Len(aPovoleno)
If aU = Mid(aPovoleno, aJ, 1) Then
aZac = 1: Exit For
End If
Next aJ
If aZac = 0 Then
aChyba = True: Exit For
End If
Next aI
If aChyba = True Then
'InfoZ 0.5, "Nepovolený znak", True, False
Calc = Zadani: Odpoved = False: Exit Function
End If
aChyba = True
For aI = 1 To Len(aT)
aU = Mid(aT, aI, 1)
If aU = "+" Or aU = "-" Or aU = "*" Or aU = "/" Then
aChyba = False: Exit For
End If
Next aI
If aChyba = True Then
'InfoZ 0.5, "Žádný operátor +-*/", True,False
Calc = Zadani: Odpoved = False: Exit Function
End If
For aI = 1 To Len(aT) - 1
aPoz = aI
aU = Mid(aT, aI, 1)
aV = Mid(aT, aI + 1, 1)
If aU = "+" Or aU = "-" Or aU = "*" Or aU = "/" Then
If aV = "+" Or aV = "-" Or aV = "*" Or aV = "/" Then
aChyba = True: Exit For
End If
End If
Next aI
If aChyba = True Then
'InfoZ 0.5, "Dva operátory vedle sebe", True, False
Calc = Zadani: Odpoved = False: Exit Function
End If
For aI = 1 To Len(aT) - 1
aPoz = aI
aU = Mid(aT, aI, 1)
aV = Mid(aT, aI + 1, 1)
If aU = "." Or aU = "," Then
If aV = "." Or aV = "," Then
aChyba = True: Exit For
End If
End If
Next aI
If aChyba = True Then
'InfoZ 0.5, "Dvě znaménka vedle sebe", True, False
Calc = Zadani: Odpoved = False: Exit Function
End If
For aI = 1 To Len(aT) - 1
aPoz = aI
aU = Mid(aT, aI, 1)
aV = Mid(aT, aI + 1, 1)
If aU = "+" Or aU = "-" Or aU = "*" Or aU = "/" Then
If aV = "." Or aV = "," Then
aChyba = True: Exit For
End If
End If
Next aI
If aChyba = True Then
'InfoZ 0.5, "Operátor a desetinná vedle sebe", True, False
Calc = Zadani: Odpoved = False: Exit Function
End If
For aI = 1 To Len(aT) - 1
aPoz = aI
aU = Mid(aT, aI, 1)
aV = Mid(aT, aI + 1, 1)
If aU = "." Or aU = "," Then
If aV = "+" Or aV = "-" Or aV = "*" Or aV = "/" Then
aChyba = True: Exit For
End If
End If
Next aI
If aChyba = True Then
'InfoZ 0.5, "Operátor a destinná čárka vedle sebe", True, False
Calc = Zadani: Odpoved = False: Exit Function
End If
aU = Mid(aT, Len(aT), 1)
If aU = "+" Or aU = "-" Or aU = "*" Or aU = "/" Then
aChyba = True
End If
If aChyba = True Then
'InfoZ 0.5, "Poslední je operátor", True, False
Calc = Zadani: Odpoved = False: Exit Function
End If
aU = Mid(aT, 1, 1)
If aU = "*" Or aU = "/" Then
aChyba = True
End If
If aChyba = True Then
'InfoZ 0.5, "První operátor je * nebo /", True, False
Calc = Zadani: Odpoved = False: Exit Function
End If
aZac = 0: aKon = 0: aChyba = False
For aI = 1 To Len(aT) - 1
aU = Mid(aT, aI, 1)
If aU = "+" Or aU = "-" Or aU = "*" Or aU = "/" Then
If aZac = 0 Then
aZac = aI
Else
aKon = aI
End If
If aZac <> 0 And aKon <> 0 Then
If aKon - aZac - 1 > 15 Then
aPoc = 0
aChyba = True: Exit For
Else
aPoc = 0
For aJ = aZac + 1 To aKon - 1
If Mid(aT, aJ, 1) = "." Or Mid(aT, aJ, 1) = "," Then
aPoc = aPoc + 1
End If
Next aJ
If aPoc > 1 Then
aChyba = True: Exit For
End If
aZac = aI: aKon = 0
End If
End If
End If
Next aI
aKon = Len(aT) + 1
If aKon - aZac - 1 > 15 Then
aPoc = 0
aChyba = True
Else
aPoc = 0
For aJ = aZac + 1 To aKon - 1
If Mid(aT, aJ, 1) = "." Or Mid(aT, aJ, 1) = "," Then
aPoc = aPoc + 1
End If
Next aJ
If aPoc > 1 Then
aChyba = True
End If
End If
If aChyba = True Then
If aPoc = 0 Then
'InfoZ 0.5, "Dlouhé číslo", True, False
Calc = Zadani: Odpoved = False: Exit Function
Else
'InfoZ 0.5, Trim(CStr(aPoc)) & " znaménka v čísle", True, False
Calc = Zadani: Odpoved = False: Exit Function
End If
End If
'plneni
aZac = 0: aKon = 0: aChyba = False
For aI = 1 To Len(aT) - 1
aU = Mid(aT, aI, 1)
If aU = "+" Or aU = "-" Or aU = "*" Or aU = "/" Then
If aZac = 0 Then
aZac = aI
Else
aKon = aI
End If
If aZac <> 0 And aKon <> 0 Then
If ValX(Mid(aT, aZac + 1, aKon - aZac - 1)) = 0 Then
If Mid(aT, aZac, 1) = "/" Then
aChyba = True: Exit For
End If
End If
aZac = aI: aKon = 0
End If
End If
Next aI
aKon = Len(aT) + 1
If ValX(Mid(aT, aZac + 1, aKon - aZac - 1)) = 0 Then
If Mid(aT, aZac, 1) = "/" Then
aChyba = True
End If
End If
If aChyba = True Then
'InfoZ 0.5, "Dělení nulou", True, False
Calc = Zadani: Odpoved = False: Exit Function
End If
For aI = 1 To Len(aT)
If Mid(aT, aI, 1) = "." Then Mid(aT, aI, 1) = ","
Next aI
'vypocet
aZac = 1: aKon = 0: aPoc = 0
For aI = 1 To Len(aT) - 1
aU = Mid(aT, aI, 1)
If aU = "+" Or aU = "-" Or aU = "*" Or aU = "/" Then
If aZac = 0 Then
aZac = aI
Else
aKon = aI
End If
If aZac <> 0 And aKon <> 0 Then
aPoc = aPoc + 1
If aPoc = 1 Then
aCis(aPoc) = ValX(Mid(aT, aZac, aKon - aZac))
aOper(aPoc) = Mid(aT, aKon, 1)
Else
aCis(aPoc) = ValX(Mid(aT, aZac + 1, aKon - aZac - 1))
aOper(aPoc) = Mid(aT, aKon, 1)
End If
aZac = aI: aKon = 0
End If
End If
Next aI
aKon = Len(aT) + 1
aPoc = aPoc + 1
aCis(aPoc) = ValX(Mid(aT, aZac + 1, aKon - aZac - 1))
Prac_Double = aCis(1)
For aI = 1 To aPoc - 1
If aOper(aI) = "+" Then
Prac_Double = Prac_Double + aCis(aI + 1)
End If
If aOper(aI) = "-" Then
Prac_Double = Prac_Double - aCis(aI + 1)
End If
If aOper(aI) = "*" Then
Prac_Double = Prac_Double * aCis(aI + 1)
End If
If aOper(aI) = "/" Then
Prac_Double = Prac_Double / aCis(aI + 1)
End If
Next aI
Calc = Prac_Double
ChK1:
On Error GoTo 0
Exit Function
ChK:
If Err.Number = 6 Then
'InfoZ 0.5, "Přetečení výpočtu", True, False
Resume ChK1
End If
End Function
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Kalkulacka — založil tomas
Kalkulacka — založil mravenec
Kalkulačka — založil Lukáš
Kalkulacka — založil pawkin
Kalkulačka — založil Anakin
Moderátoři diskuze