Вот прога, которая осуществляет преобразования между системами счисления Код | Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Text = 0 TextBox2.Text = 0 End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load ComboBox1.Items.Clear() ComboBox1.Items.Add("Прямое") ComboBox1.Items.Add("Обратное") End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim a, osn, ost, i, l, s, p As Integer ' a - вводимое число; osn - основание СС; ost - остаток от деления Dim str, k As String ' str - результирующая строка If RadioButton1.Checked Then osn = 2 If RadioButton2.Checked Then osn = 8 If RadioButton3.Checked Then osn = 10 If RadioButton4.Checked Then osn = 16
If ComboBox1.SelectedIndex = 0 Then ' Контроллер вводимых значений l = TextBox1.Text.Length ' в переменную l записываем количество символов исходной строки While l > 0 k = TextBox1.Text.Substring(l - 1, 1) p = Asc(k) If p < Asc(0) Or p >= Asc(9) Then MessageBox.Show("Error", "Error") Return End If l -= 1 End While
a = Convert.ToInt32(TextBox1.Text) ' Конвертируем вводимую строку в число типа Integer str = "" ' Результирующая строка пока пустая While a > 0 ost = a Mod osn ' Ищем остаток от деления a = a \ osn ' Делим число на соответсвующие основание If ost >= 10 Then str = Chr(55 + ost) & str Else str = ost.ToString() & str End If End While Else s = 0 i = 0 ' Контроллер вводимых значений l = TextBox1.Text.Length While l > 0 k = TextBox1.Text.Substring(l - 1, 1) p = Asc(k) If osn < 16 Then If p >= Asc(osn) Or p < Asc(0) Then MessageBox.Show("Error", "Error") Return End If Else If (p < Asc("A") Or p > Asc("F")) And (p < Asc("0") Or p > Asc("9")) Then MessageBox.Show("Error", "Error") Return End If End If l -= 1 End While l = TextBox1.Text.Length While l > 0 k = TextBox1.Text.Substring(l - 1, 1) p = Asc(k) If (p >= Asc("A") And p <= Asc("F")) Then k = p - 55 Else k = Convert.ToInt32(k) End If s = s + k * osn ^ i l -= 1 i += 1 End While str = s.ToString() End If TextBox2.Text = str & "(" & osn.ToString & ")" End Sub End Class
|
Впринципе она работает нормально, но есть небольшая проблема. Ниже приведена часть кода: Код | If osn < 16 Then If p >= Asc(osn) Or p < Asc(0) Then MessageBox.Show("Error", "Error") Return End If
|
Какое условие указать, чтобы прога не выдавала ошибки при переводе из 10ой СС в 10ую? Проблема в том, что при преобразовании asc(10), берется только первый символ, поэтому прога работает немного некорректно. Подскажите какое можно указать оптимальное условие.
|