Dan Schmidt Ответов: 2

Глядя, чтобы исправить этот код...Пожалуйста, помогите


не могу понять, почему при сгенерировании этот код будет преобразовывать только целое число 1 из двоичного в десятичное, а когда вы добавляете любые нули в свою двоичную последовательность, он возвращается назад с просьбой ввести двоичное число.

Что я уже пробовал:

Модуль Module1

Суб Основной()

Dim lv_binary как строка
Dim lv_decimal как десятичный
lv_binary = getBinary()
Приставка.Метода WriteLine(lv_binary)
lv_decimal = convert2Binary(lv_binary)
Приставка.WriteLine ("Binary: {0}", lv_binary)
Приставка.WriteLine ("Decimal:{0}", lv_decimal)
Главный()
Приставка.ReadKey()


Конец Подводной Лодки

Функция convert2Binary(pv_binary As String) как десятичная
Dim lv_decimalNumber как десятичное число
Dim lv_digit как целое число
Dim lv_maxElementNumber как целое число
Дим lv_positionValue(pv_binary.Длина-1) В Десятичном Виде
lv_decimalNumber = 0
lv_maxElementNumber = pv_binary.Длина - 1
Для lv_index = 0 до lv_maxElementNumber
lv_digit = Кинт(pv_binary(lv_index).Метод toString)
lv_positionValue (lv_index) = lv_digit * 2 ^ (lv_maxElementNumber - lv_index)
lv_decimalNumber += lv_positionValue(lv_index)
Приставка.WriteLine(CStr(lv_digit) & "* 2^ " &
Функция cstr(lv_maxElementNumber - lv_index) &ампер; " = " &амп;
Функция cstr(lv_positionValue(lv_index)))

Следующий

Приставка.WriteLine ("ответ составляется путем добавления следующих значений:")
Для lv_index = lv_positionValue.Длина-От 1 До 0 Шаг -1
Если lv_index < lv_positionValue.Длина-1 Тогда
Приставка.Писать("+")
Ещё
Приставка.Писать(" ")

Конец, Если
Приставка.WriteLine(CStr(lv_positionValue(lv_index)).PadLeft(5 + CStr(lv_positionValue(0)).Длина))
Следующий
Приставка.WriteLine(StrDup(CStr(lv_positionValue(0)).Длина + 5 + 1, "-"))

Вернуться lv_decimalNumber




Конечная Функция


Функция getBinary() в виде строки
Dim lv_binary как строка
Dim lv_valid как логическое значение
Делать
Приставка.Write ("введите двоичное число для преобразования:")
lv_binary = консоль.Линия чтения
Если статистика(lv_binary) Затем
lv_valid = истина
Для lv_index = 1 или 0 для lv_binary.Длина - 1
Если lv_binary (lv_index) < & gt; "1", то
lv_valid = ложь
Конец, Если

Следующий
Ещё
lv_valid = ложь

Конец, Если
Цикл, пока lv_valid
Вернуться lv_binary


Конечная Функция


Конечный Модуль

[no name]

Для этого и используется отладчик.

2 Ответов

Рейтинг:
8

Patrice T

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.
Отладчик-Википедия, свободная энциклопедия[^]
Visual Basic / Visual Studio Video Tutorial-Базовая Отладка-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Dan Schmidt

спасибо

Рейтинг:
20

Richard Deeming

Цитата:
когда вы добавляете любые нули в свою двоичную последовательность она возвращается назад с просьбой ввести двоичное число

Вероятно, потому что именно это вы и сказали ему сделать:
If lv_binary(lv_index) <> "1" Then 
    lv_valid = False

Измените свой код так, чтобы он также принимал 0 как действительный символ:
For lv_index = 0 To lv_binary.Length - 1
    If lv_binary(lv_index) <> "1"c AndAlso lv_binary(lv_index) <> "0"c Then
        lv_valid = False
    End If
Next


Dan Schmidt

Спасибо, новичок в программировании, просто проходящий вводный курс в колледже прямо сейчас. Спасибо за помощь, я, скорее всего, отправлю больше вопросов, если вы не возражаете помочь мне.