Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевод из одной СС в другую 
V
    Опции темы
Treod
  Дата 23.2.2008, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 21.11.2007

Репутация: нет
Всего: 2




Вот прога, которая осуществляет преобразования между системами счисления
Код

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), берется только первый символ, поэтому прога работает немного некорректно. Подскажите какое можно указать оптимальное условие. 
PM MAIL ICQ   Вверх
Treod
Дата 24.2.2008, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 21.11.2007

Репутация: нет
Всего: 2




Проблему исправил, вопрос решен.

Код

' Контроллер вводимых значений
            l = TextBox1.Text.Length
            While l > 0
                k = TextBox1.Text.Substring(l - 1, 1)
                p = Asc(k)
                If osn < 10 Then
                    If p >= Asc(osn) Or p < Asc(0) Then
                        MessageBox.Show("Error", "Error")
                        Return
                    End If
                End If
                If osn = 16 Then
                    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
                If osn = 10 Then
                    If p >= Asc(9) Or p < Asc(0) Then
                        MessageBox.Show("Error", "Error")
                        Return
                    End If
                End If
                l -= 1
            End While

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0707 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.