Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 11.10.2017
Сообщений: 1

Перевод из [2.16]Системы счисления в [2.16]СС

18.10.2017, 16:35. Показов 929. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Новичек. Сделал из головы перевод сс. Полностью рабочая. Но только не поддерживает большие числа при переводе не из 10 СС. Например: при переводе из 2 СС в 10 СС, программа будет работать только с числом не более 1024 символов или из 16 СС в 10 СС, только лишь с 256 символами.Если ввести 257 символов, выдает ошибку: BigInteger не может принимать бесконечные значения. А из 10 в любую другую ввод ограничен только 32000+ символами(Но это я так думаю ограничение textBox). Вот код класса:
Поля класса : СС введенного числа, СС результата, само число.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
class Systema
    {
        int input;
        int output;
        long number;
        public Systema(int input, int output, string number)
        {
            this.input = input;
            this.output = output;
//Тут проверяю, нужно ли предварительно переводить введенное число в 10 СС
            this.number = (input == 10) ? Convert.ToInt32(number) : Convert_10_Systemy(number, input);
        }
//Перевод в 10 СС(Тут скорее всего что то не так)
        public long Convert_10_Systemy(string numb, int inp)
        {
            int sum = 0;
            for (int i = numb.Length - 1; i >= 0; i--) {
                sum += (int)Math.Pow(inp, numb.Length - i - 1) * Bykvi(numb[i]);
            }
            return sum;
        }
//Этот метод для того что бы a,b,c,de,f  принимали нужные числовые значения
        public int Bykvi(char s)
        {
            if (s == '0' || s == '1' || s == '2' || s == '3' || s == '4' || s == '5' || s == '6' || s == '7' || s == '8' || s == '9')
            {
                return Convert.ToInt32(Convert.ToString(s));
            }
            else {
                switch (s) {
                    //case '0','1','2','3','4','5','6','7','8','9':
                    case 'a': return 10;
                    case 'b': return 11;
                    case 'c': return 12;
                    case 'd': return 13;
                    case 'e': return 14;
                    case 'f': return 15;
                    default: return -1;
                }
            }
        }
//Этот метод обратный методу Bykvi
        public string Cifri(int n)
        {
            if (n==0||n==1||n==2||n==3||n==4||n==5||n==6||n==7||n==8||n==9)
            {
                return Convert.ToString(n);
            }
            else
            {
                switch (n)
                {
                    case 10: return "a";
                    case 11: return "b";
                    case 12: return "c";
                    case 13: return "d";
                    case 14: return "e";
                    case 15: return "f";
                    default: return "ОшибочкаакчобишО";
                }
            }
        }
//Здесь уже сам перевод из 10 CC  в [2..16]СС
        public string Perevod()
        {
            string result = "";
            if (output == 10 )
                return Convert.ToString(number);
            else
            {
                    while (number >= output)
                    {
                        result += Cifri((int)(number % output));
                        number /= output;
                    }
                    result += Cifri((int)number);
                    char[] arr = result.ToCharArray();
                    Array.Reverse(arr);
                    return new string(arr);
            }
        }
        
    }
Вод код формы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        public bool ValidSystema(int input, string number)
        {
            string p = "";
            string inputS = Convert.ToString(input - 1);
            Regex reg = new Regex("");
            if (input <= 10)
            {
                p = "[0.." + inputS + "]";
                reg = new Regex("[0.." + inputS + "]+");
            }
            if (input > 10)
                reg = new Regex("[0..9a.." + inputS + "]+");
            if (reg.IsMatch(number))
                return true;
            else
                return false;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                int input = Convert.ToInt32(comboBox1.Text);
                int output = Convert.ToInt32(comboBox2.Text);
                string number = (textBox3.Text).ToLower();
                if (input > 0 && input < 17 && output > 0 && output < 17)
                {
                    Systema ob1 = new Systema(input, output, number);
                    bool DaNet = true;
                    foreach (char s in number)
                    {
                        if (ob1.Bykvi(s) >=input)
                            DaNet = false;
                    }
                    if (DaNet)
                    {
                        string result = ob1.Perevod();
                        if (result == "2147483647" || ob1.Convert_10_Systemy(number, input)<0 )
                        {
                            MessageBox.Show("Слишком большое число");
                            textBox4.Text = "сложна";
                        }
                        else
                            textBox4.Text = Convert.ToString(result);
                    }
                    else
                        MessageBox.Show("Неправильная система исчисления или введенное число не входит в систему");
                    label4.ForeColor = System.Drawing.Color.Black;
                    label1.ForeColor = System.Drawing.Color.Black;
                    label2.ForeColor = System.Drawing.Color.Black;
                }
                else
                {
                    MessageBox.Show("Неверно введена система исчисления(2..16)");
                    label4.ForeColor = System.Drawing.Color.Red;
                    label1.ForeColor = System.Drawing.Color.Red;
                    label2.ForeColor = System.Drawing.Color.Red;
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Нет ну Ало! Серьезно - что-то не так. Внимательнее!!!");
            }
        }
 
        private void textBox3_TextChanged(object sender, EventArgs e)
        {
            if (textBox3.Text == "")
            {
                button1.Text = "Выполнить";
            } else button1.Text = "Ну жмякай штоле";
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            string tmp = comboBox1.Text;
            comboBox1.Text = comboBox2.Text;
            comboBox2.Text = tmp;
            
        }
    }
Сам думаю что, что-то не так с методом - Convert_10_Systemy.
Делаю просто так, для себя. Но было бы не плохо доразобраться с этим моментом. И есть косяк: при вводе например "левой" буквы "y' не показываю, то что это вводить нельзя. Хотел обработать этот момент регулярками в методе ValidSystema, но что то не довел до ума. Я по факту проверяю только числовые значения(Если исходная СС 5, то числа [5..9] недопустимы). Я знаю, что мой метод по любому не рациональный, так что если подправите или подскажете чего, буду признателен.
Миниатюры
Перевод из [2.16]Системы счисления в [2.16]СС   Перевод из [2.16]Системы счисления в [2.16]СС  
Вложения
Тип файла: txt System.txt (2.9 Кб, 3 просмотров)
Тип файла: txt Form1.txt (4.2 Кб, 2 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.10.2017, 16:35
Ответы с готовыми решениями:

Перевод дробной части числа из десятичной системы счисления в любую другую систему счисления
Здравствуйте как перевести дробной части числа из десятичной системы счисления в любую другую систему счисления. При переводе целых...

Перевод системы счисления
Привет. Ребят вот код , все работает , помогите пожалуйста пояснить в //... как работает тот или иной метод , цикл и тд. Я пояснил все что...

Перевод в системы счисления
Нашел в конспектах преподавателя , объясните ,как я понял, это перевод в 8чную систему, как он посчитает , если x не задано , что за...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.10.2017, 16:35
Помогаю со студенческими работами здесь

Перевод из n системы счисления в двоичную
Есть число в n сс нужно перевести его в двоичную число не целое

Перевод в различные системы счисления
Подскажите пожалуйста, с помощью какого метода, а если такового не существует, то с помощью какого алгоритма ВОЗМОЖНО перевести из...

Перевод в различные системы счисления
Есть ли в c# функции для преобразования чисел из одной системы счисления в другие?

Перевод с 2-ой системы счисления в 10-ую и обратно
Дали на дом контрольную. Перевод с 2ичной в 10тичную и обратно. Я сделал с 2ичной в 10тичную namespace WindowsFormsApplication1 { ...

Перевод из десятичной системы счисления
Доброй ночи, форумчане. Есть задача: Вводим 2 любых десятичных числа, будь то целые числа или с остатком, отрицательные или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru