Работа со стандартными системами счисления - C#
Формулировка задачи:
Есть алгоритм перевода уже введенных в определенной сс чисел в десятичную.
Пишу калькулятор. Обрабатываю событие сложения следующим образом:
Т.е. записываю в Сум1 уже переведенное в 10 сс число для дальнейших действий и обратного перевода при выводе конечного результата.
Проблема в том, что в Сум1 всегда складывается такое число, как будто введено было "111". Т.е. цифры могут быть любые, но как будто введены единицы вместо любых других цифр. В чем же здесь проблема?
// Функция заменяет буквы на числа и наоборот 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); } } }
Решение задачи: «Работа со стандартными системами счисления»
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(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д