Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/30: Рейтинг темы: голосов - 30, средняя оценка - 4.63
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19

Обсуждение работы проекта "Калькулятор со скобками и корнем"

11.07.2014, 01:18. Показов 7275. Ответов 61
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Калькулятор со скобками и корнем

Вот так, легко и просто, за один вечер собрал эту штуку
надеюсь комунибудь придет идея сделать эту программу лучше


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
Option Explicit
'
'Калькулятор на VB
'Простенькая реализация калькулятора ... © Антихакер32™
'
Dim X&, Y&
Const nX = 6, nY = 4, p = " "
Dim Matrix32(nX - 1, nY - 1) As CommandButton
Dim WithEvents cmm As CommandButton
Dim WithEvents cmb As ComboBox
Dim WithEvents tmr As Timer
Dim pos&
Private Function RG(Expression$)
    Const s = "+|-|*|/|^|Mod"
    Dim j$(), f&
    j = Split(s, "|")
    RG = Replace(Expression, p, "")
    For f = 0 To UBound(j)
        RG = Replace(RG, j(f), p & j(f) & p)
    Next
End Function
Private Function Calc(ByVal Expression$)
    Dim s$, j$(), j1$(), f&, f1&, n&, le&
    Expression = LCase(RG(Expression))
    'Разбитие на скобки
    j = Split(Expression, "(")
    If UBound(j) Then
        For f1 = UBound(j) To 0 Step -1
            j1 = Split(j(f1), ")"): j1(0) = Calc(j1(0))
            If f1 = 0 Then Expression = j(f1): Exit For
            j(f1 - 1) = j(f1 - 1) & RG(Join(j1))
        Next
    End If: le = Len(Expression)
    Do: n = InStr(n + 1, Expression, "sqr"): s = ""
        If n Then
            For f = n + 3 To le
                If Mid$(Expression, f, 1) = p Then
                    Expression = Left(Expression, n - 1) & Sqr(s) & Mid$(Expression, f): Exit For
                ElseIf f = le Then Expression = Left(Expression, n - 1) & Sqr(s & Mid$(Expression, f, 1)): Exit For
                End If: s = s & Mid$(Expression, f, 1)
    Next: End If: Loop While n
    Do: n = InStr(n + 1, Expression, "fix"): s = ""
        If n Then
            For f = n + 3 To le
                If Mid$(Expression, f, 1) = p Then
                    Expression = Left(Expression, n - 1) & Fix(s) & Mid$(Expression, f): Exit For
                ElseIf f = le Then Expression = Left(Expression, n - 1) & Fix(s & Mid$(Expression, f, 1)): Exit For
                End If: s = s & Mid$(Expression, f, 1)
    Next: End If: Loop While n
    Calc = Expression
    Do While InStr(1, Calc, "*") Or InStr(1, Calc, "/") Or InStr(1, Calc, "^") Or InStr(1, Calc, "mod")
        j = Split(Calc)
        For f = 1 To UBound(j)
            Select Case j(f)
            Case "^": j(f - 1) = j(f - 1) ^ j(f + 1): Exit For
            Case "*": j(f - 1) = j(f - 1) * j(f + 1): Exit For
            Case "/": j(f - 1) = j(f - 1) / j(f + 1): Exit For
            Case "mod": j(f - 1) = j(f - 1) Mod j(f + 1): Exit For
            End Select
        Next:  j(f) = "": j(f + 1) = "": Calc = RG(Join(j))
    Loop
    Do While InStr(1, Calc, "+") Or InStr(1, Calc, "-")
        j = Split(Calc)
        For f = 1 To UBound(j)
            Select Case j(f)
            Case "+": j(f - 1) = Val(j(f - 1)) + j(f + 1): Exit For
            Case "-": j(f - 1) = j(f - 1) - j(f + 1): Exit For
            End Select
        Next
        j(f) = "": j(f + 1) = "": Calc = RG(Join(j))
    Loop
End Function
Private Sub cmm_Click()
    Dim s$
    cmb.SetFocus
    Select Case cmm.Caption
    Case "Fix", "Sqr": s = p & cmm.Caption & "("
    Case "="
        s = Calc(cmb)
        cmb.AddItem cmb & " = " & s
        cmb = s: pos = Len(cmb): cmb.SelStart = pos
        Exit Sub
    Case "CE": cmb.Text = 0: pos = 1: cmb.SelStart = pos: Exit Sub
    Case "x^y": s = p & "^" & p
    Case "+", "-", "*", "/", "Mod": s = p & cmm.Caption & p
    Case Else: s = cmm.Caption
    End Select
    If Left$(cmb, 1) = "0" Then cmb = Mid$(cmb, 2)
    cmb.SelStart = pos
    cmb.SelText = s
    pos = pos + Len(s)
End Sub
Private Sub Form_Load()
    Dim o
    Const sL = 100, sz = 500, sT = sz + sL * 2
    Dim j$(), s$, i&, h&
    s = s & "7 8 9 = CE Sqr "
    s = s & "4 5 6 ( ) x^y "
    s = s & "1 2 3 + - Fix "
    s = s & "0 , % * / Mod "
    j = Split(s)
    On Error Resume Next
    For Y = 0 To nY - 1: For X = 0 To nX - 1
            Set Matrix32(X, Y) = Controls.Add("vb.CommandButton", "cmm_" & X & Y)
            With Matrix32(X, Y)
                Select Case X
                Case 3, 4: .Move sL * 2 + X * sz, sT + Y * sz, sz, sz: .Visible = 1
                Case 5: .Move sL * 3 + X * sz, sT + Y * sz, sz * 1.5, sz: .Visible = 1
                Case Else: .Move sL + X * sz, sT + Y * sz, sz, sz
                End Select:  .FontSize = 10: .FontBold = 1: .Caption = j(i): i = i + 1: .Visible = 1
            End With
    Next: Next
    Set cmb = Controls.Add("vb.ComboBox", "cmb")
    With cmb
        .FontSize = 10: h = .Height
        .Move sL, Matrix32(0, 0).Top - h - sL, (Matrix32(nX - 1, 0).Left + Matrix32(nX - 1, 0).Width) - sL: .Visible = 1
        .Text = 0
        Me.Width = .Width + sL * 4
    End With
    Set o = Controls("cmm_" & X - 1 & Y - 1)
    Me.Height = o.Top + o.Height + sz + sL * 2
    Me.Caption = "Калькулятор VB ... © Антихакер32™"
    Set tmr = Controls.Add("vb.Timer", "tmr"): tmr.Interval = 10
End Sub
Private Sub tmr_Timer()
    Static OldName$
    If OldName <> ActiveControl.Name And ActiveControl.Name Like "cmm_##" Then
        Set cmm = ActiveControl
    End If: OldName = ActiveControl.Name
End Sub
Private Sub cmb_Validate(Cancel As Boolean): pos = cmb.SelStart: End Sub
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.07.2014, 01:18
Ответы с готовыми решениями:

Калькулятор с EXP, ALOG, ALOG10 и корнем
Не понимаю почему он не делит, не производит действия с логорифмами, корнями и экспонентой.... проверял код, все верно же. подскажите в...

Калькулятор со скобками
помогите написать к этому коду графичекий интерфейс type TypeTok = (_num, _plus, _minus, _mul, _div, _lparent, _rparent,...

Калькулятор на JS с скобками
&lt;!DOCTYPE html&gt; &lt;html lang=&quot;en&quot;&gt; &lt;head&gt; &lt;meta charset=&quot;UTF-8&quot;&gt; &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,...

61
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
13.07.2014, 15:52
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Антихакер32 Посмотреть сообщение
я фигню не придумываю
Придумываешь. Неужели ты думаешь что я просто так это написал? Мало того что этот вызов не нужен, пруф я тебе кинул (вот ты сам скрины показывал, где используются стили, а теперь посмотри в коде, где-нибудь видишь InitCommonControls?), так еще зачем-то обработчик ошибок, который вообще не нужен (это называется тупо копированием кода, не зная что он делает)
Цитата Сообщение от Антихакер32 Посмотреть сообщение
у меня все работает как в аптеке
Смотри, я придумал код который присваивает содержимое одной строковой переменной другой:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Option Explicit
 
Private Sub Form_Load()
    Dim s1 As String
    
    SetString s1, "Антихакер32"
    
    MsgBox s1
    
End Sub
 
Private Sub SetString(Dest As String, Source As String)
    Dim i As Long
    Dest = Space(Len(Source))
    For i = 1 To Len(Source)
        SetChar Dest, i, GetChar(Source, i)
    Next
End Sub
Private Sub SetChar(Dest As String, ByVal Pos As Long, ByVal Char As Integer)
    Mid$(Dest, Pos, 1) = ChrW(Char)
End Sub
Private Function GetChar(Source As String, ByVal Pos As Long) As Integer
    GetChar = AscW(Mid$(Source, Pos, 1))
End Function
Он прекрасно работает, но думаю
Visual Basic
1
s1= "Антихакер32"
будет более практичней? Или мне этот код тоже выложить в готовые решения?
Цитата Сообщение от Антихакер32 Посмотреть сообщение
больше я калькулятором заниматься не буду
Твое дело. Мне вообще лично все-равно.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18035 / 7738 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
13.07.2014, 16:10
Цитата Сообщение от Антихакер32 Посмотреть сообщение
символы с клавы будут преобразовываться в активную кнопку
и передаваться процедуре нажатия на нее.., и все после этого
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.07.2014, 16:10

Калькулятор со скобками
Здравствуйте, можете пожалуйста помочь доделать калькулятор со скобка и приоритетом. Я основное сделал, а вот со скобка возникли проблемы,...

Калькулятор со скобками
Возникла проблема с вычислением &quot;(2-7+3)&quot; - если убрать скобки все нормально, подскажите, пожалуйста, что я упустила. import...

калькулятор со скобками
всем привет, помогите мне пожалуйста доделать калькулятор, в него надо добавить скобки и еще кнопку очищения unit main.kurs8; ...

Калькулятор со скобками
Добрый день, а может уже и вечер. Я только начал учить C++ и в последнее время тупить начал. Можете пожалуйста помочь доделать калькулятор ...

Калькулятор с выражениями со скобками
Нужно написать программу (консольное приложение на c++), имитирующую работу калькулятора с выражениями со скобками и дейcтвительными...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
62
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru