Калькулятор

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Калькулятор

Сообщение _Мика_ » 10.04.2005 (Вс) 22:11

Тут друган попросил сделать калькулятор....вот что он мне написал
короче сделать в визуал басик 6 версии калькулятор в двоичную (чтобы считать 0 и 1) но чтобы можно было переводить в 16 ричную и 10 тиричную


Поясняю:
короче нужно всеволишь два действия (+ и -). Все действия осуществляются только в двоичной системе.
А потом что бы еще можно было переводить в 10-ую сис. и в 16-ую сис. Ввод данных в двоичной системе.

Вопрос заключается в том, как слогать или вычитать в двоичной системе?
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 11.04.2005 (Пн) 10:02

FleX_2004 писал(а):ну как это КАК??? побитно складывешь... 10111010+ 01010101 = 10001111 кажется так.... а конвертнуть в нех это HEX(Number) / а в десятичное CDec(expression)
вот тебе хелп
Function CDec(Expression)
Member of VBA.Conversion
Returns a variant with a value converted to a decimal subtype
===
Function Hex(Number)
Member of VBA.Conversion
Returns a string representing the hexadecimal value of a number
========
а вооще нажми в режиме конструирования кнопу F2 и в левом списке выбери Conversion /// ^) удачи!

:shock:
Сссспасибо.... :D
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 11.04.2005 (Пн) 10:14

Function CDec(Expression)

Когда я делаю так
Код: Выделить всё
msgbox cdec(101010110)

то в месаге он мне пишет это же число, т.е. "101010110" :(
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.04.2005 (Пн) 10:17

CDec преобразует число к типу Variant, подтипу Decimal.

Так что пиши, пиши собственный преобразователь бинарной строки :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 11.04.2005 (Пн) 10:20

GSerg писал(а):CDec преобразует число к типу Variant, подтипу Так что пиши, пиши собственный преобразователь бинарной строки :)

Хех....смешно :D :(
А как??
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 11.04.2005 (Пн) 11:19

Не проще скалдывать десятичные числа, а результат переводить в двоичный???

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 11.04.2005 (Пн) 15:53

Вот-вот. Что мешает внутри использовать только операции с числами в десятичном представлении? А потом их хоть в двоичный, хоть в шестнадцатеричный...
То, что для одних константа, для других только переменная...

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 14.04.2005 (Чт) 23:21

Шурик писал(а):Не проще скалдывать десятичные числа, а результат переводить в двоичный???
Нет

Как перевсти Двоичное в Дестяричное :?:
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 15.04.2005 (Пт) 9:04

FleX_2004 писал(а):хех... блин... и че людям не спиться????
попробуй так: доп есть 01000101
тогда его в дес так :
Код: Выделить всё
For i = 1 To 8
x = Round(Mid(StrReverse(Text1.Text), i, 1))
yourdec = yourdec + x * 2 ^ i
Next
MsgBox yourdec

а в хекс думаю уже перекинешь..


Спасибо :D
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 15.04.2005 (Пт) 9:17

Run-time error '13':

Type mismatch

:cry:
Вот в этой строчке
x = Round(Mid(StrReverse(Text1.Text), i, 1))
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 15.04.2005 (Пт) 9:24

хм.....
когда делаю так
Код: Выделить всё
For i = 1 To 8
x = Round(Mid(StrReverse(Text1.Text), i, 1))
yourdec = yourdec + x * 2 ^ i
Next
MsgBox yourdec

то "Type mismatch"

А когда так
Код: Выделить всё
For i = 1 To 8
x = Round(Mid(StrReverse("10101001010"), i, 1))
yourdec = yourdec + x * 2 ^ i
Next
MsgBox yourdec

То все Ok
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 15.04.2005 (Пт) 9:40

_Мика_ писал(а):хм.....
когда делаю так
Код: Выделить всё
For i = 1 To 8
x = Round(Mid(StrReverse(Text1.Text), i, 1))
yourdec = yourdec + x * 2 ^ i
Next
MsgBox yourdec

то "Type mismatch"

А когда так
Код: Выделить всё
For i = 1 To 8
x = Round(Mid(StrReverse("10101001010"), i, 1))
yourdec = yourdec + x * 2 ^ i
Next
MsgBox yourdec

То все Ok

Лдано, с этим вроде разобрался.. :roll:

Теперь я пытаюсь сложить два бинарных числа.....
Код: Выделить всё
For i = 1 To Len(bin1)
For j = 1 To Len(bin2)
bi3 = bin3 & Mid(bin1, i, 1) + Mid(bin2, i, 1)
Next j
Next i
End If
MsgBox "'" & bin3 & "'"

Этот код почему то выдает пустоту!
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 15.04.2005 (Пт) 18:57

bi3 на bin3 поменяй в строке №3!
И включи, наконец, Option Explicit! Давно пора! :D
Моду создают модоки, а распространяют модозвоны.

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 16.04.2005 (Сб) 7:32

hCORe писал(а):bi3 на bin3 поменяй в строке №3!
И включи, наконец, Option Explicit! Давно пора! :D

Блин....тупая ошибка :D Спасибо!
Это просто кусок кода, а переменные все объявленны, не беспокойся :wink: :D
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 16.04.2005 (Сб) 7:36

Все равно, глупость получается......Если Bin1=1 а Bin2=0 то Bin3=10 :?
Мне нужно сделать эту прогу до 19:00 (суббота) Т.Е. СЕГОДНЯ :shock:
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 16.04.2005 (Сб) 14:37

А может из bin в dec, сложить и обратно в bin? Или другой вариант: воспользоваться таблицами сложения/умножения для двоичной системы счисления (см. Интернет :D)
Моду создают модоки, а распространяют модозвоны.

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 16.04.2005 (Сб) 14:43

Ну можно...но как??? :D
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 16.04.2005 (Сб) 15:02

СДЕЛАЛ!!
Код: Выделить всё
Dim bin1 As String
Dim bin2 As String
Dim bin3 As Integer
Dim bin4 As String
Dim c As Integer

Private Sub Command1_Click()
bin1 = Text1
bin2 = Text2
label1 = ""
bin4 = ""
If Len(bin1) > Len(bin2) Then
c = Len(bin1)
Else
c = Len(bin2)
End If

For i = 1 To c
If Mid(bin1, i, 1) = "" Then
bin4 = bin4 & Mid(bin2, i, 1)
End If
If Mid(bin2, i, 1) = "" Then
bin4 = bin4 & Mid(bin1, i, 1)
End If
If Mid(bin1, i, 1) = 0 And Mid(bin2, i, 1) = 0 Then
bin4 = bin4 & "0"
End If
If Mid(bin1, i, 1) = 1 And Mid(bin2, i, 1) = 1 Then
bin4 = bin4 & "1"
End If
If Mid(bin1, i, 1) = 1 And Mid(bin2, i, 1) = 0 Then
bin4 = bin4 & "1"
End If
If Mid(bin1, i, 1) = 0 And Mid(bin2, i, 1) = 1 Then
bin4 = bin4 & "1"
End If
Next i
label1 = bin4
End Sub

Private Sub Form_Load()
bin1 = ""
bin2 = ""
End Sub


Да да...я знаю способ крнечно еще тот.....но зато работает!!! :D
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 16.04.2005 (Сб) 15:46

Блин.. ибо надо для надежности перед действиями переменные конвертировать!

_Мика_ писал(а):Все равно, глупость получается......Если Bin1=1 а Bin2=0 то Bin3=10 :?


Лечится это так:
Код: Выделить всё
For i = 1 To Len(bin1)
For j = 1 To Len(bin2)
bin3 = Cint(bin3 & Mid(bin1, i, 1)) + Mid(bin2, i, 1)
Next j
Next i
End If
MsgBox "'" & bin3 & "'"


Поясняю: bin3 & Mid(bin1, i, 1) содержит знак &, а значит результат будет строкой. А если к строке "1" прибавить строку "0", получится строка "10"

А вот если конвертировать в число... 8)
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 35

    TopList