Работа со стандартными системами счисления - C#

Узнай цену своей работы

Формулировка задачи:

Есть алгоритм перевода уже введенных в определенной сс чисел в десятичную.
// Функция заменяет буквы на числа и наоборот
        string newCh(string sym, string otk) //создание строк
        {
            string s = "";   //пустая строка
            if (otk == "to") //если параметр строки конечного числа равен to
            {
                if (Convert.ToInt32(sym) > 10)                         //если число в cтроке больше 10
                    s += bukv.Substring(Convert.ToInt32(sym) - 10, 1); //Берет подстроку из строки букв. Замена начинается с указанной позиции знака и имеет указанную длину.
                else
                    s += sym;
            }
            else if (otk == "from")//если параметр строки конечного числа равен  from
            {
                if (bukv.IndexOf(sym) == -1) //проверяет, есть ли в числе английские буквы
                    s += sym;
                else
                    s += (bukv.IndexOf(sym) + 10).ToString(); //если есть, то он замеяет на число 
            }
            return s;
        }
 
        // Переводит системы счисления с основанием N в деятичную систему счисления 
        private string FromN(string number, int sys) //создание строк
        {
            int newNum = 0;
            string temp = "";
            int t;
            int i;
            for (i = 0; i < number.Length; i++) //цикл перебора до длины введенного числа
            {
                t = (int)Math.Pow(sys, Convert.ToDouble(number.Length - (i + 1)));//возведение исходных цифр из числа в степень основания +1
                temp += newCh(number.Substring(i, 1), "from"); //проверка на наличие в введенном числе буквы, которую надо заменить
                newNum += Convert.ToInt32(t); //суммирование всех чисел полученных в пердыдущем шаге
            }
            return newNum.ToString();
        }
Пишу калькулятор. Обрабатываю событие сложения следующим образом:
private void button11_Click(object sender, EventArgs e)
        {
            if (radioButton5.Checked == true)//в 10 сс
            {
                // Если ничего не введено
                if (textBox1.Text == "")
                    MessageBox.Show("Данные не введены");
                else
                {
                    sum1 = Double.Parse(textBox1.Text);
                    ch = '+';
                    textBox1.Text = "";
                }
            }
 
            if (radioButton3.Checked == true)//если 2 сс
            {
                // Если ничего не введено
                if (textBox1.Text == "")
                    MessageBox.Show("Данные не введены");
                else
                {
                    int S = 2;
                    sum1 = Convert.ToInt32(FromN(textBox1.Text, S));
                    ch = '+';
                    textBox1.Text = FromN(textBox1.Text, S); 
                }
            }
 
            if (radioButton4.Checked == true)//если 8 сс
            {
                // Если ничего не введено
                if (textBox1.Text == "")
                    MessageBox.Show("Данные не введены");
                else
                {
                    int S = 8;
                    sum1 = Convert.ToInt32(FromN(textBox1.Text, S));
                    ch = '+';
                    textBox1.Text = "";
                }
            }
 
            if (radioButton6.Checked == true)//если 16 сс
            {
                // Если ничего не введено
                if (textBox1.Text == "")
                    MessageBox.Show("Данные не введены");
                else
                {
                    int S = 16;
                    sum1 = Convert.ToInt32(FromN(textBox1.Text, S));
                    ch = '+';
                    textBox1.Text = FromN(textBox1.Text, S);
                }
            }
        }
Т.е. записываю в Сум1 уже переведенное в 10 сс число для дальнейших действий и обратного перевода при выводе конечного результата. Проблема в том, что в Сум1 всегда складывается такое число, как будто введено было "111". Т.е. цифры могут быть любые, но как будто введены единицы вместо любых других цифр. В чем же здесь проблема?

Решение задачи: «Работа со стандартными системами счисления»

textual
Листинг программы
 // Переводит системы счисления с основанием N в деятичную систему счисления 
        private string FromN(string number, int sys) //создание строк
        {
            int newNum = 0;
            string temp = "";
            int t;
            int i;
            for (i = 0; i < number.Length; i++) //цикл перебора до длины введенного числа
            {
                t = (int)Math.Pow(sys, Convert.ToDouble(number.Length - (i + 1)));//возведение исходных цифр из числа в степень основания +1
                temp += newCh(number.Substring(i, 1), "from"); //проверка на наличие в введенном числе буквы, которую надо заменить
               [COLOR="Red"] newNum += Convert.ToInt32(temp)*t;[/COLOR] //суммирование всех чисел полученных в пердыдущем шаге
            }
            return newNum.ToString();
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы