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

Написать свою систему счисления

21.03.2019, 12:30. Показов 2909. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!

Появилась нужда для понимания кодирования, суть:
есть строка: AABBCCDDEEFF
шаг 2 символа, возможные символы: ABCDEF

преобразовать в кодировку c символами: 0123456789
шаг 1 символ

То есть:
AA -> 0, AB -> 1, AC -> 2, AD ->3, AE -> 4, AF -> 5, AAAA -> 6, AAAB -> 7, AAAC -> 8, AAAD -> 9
AAAE -> 00, AAAF -> 01 ... и тд.

Не могу сообразить как такое провернуть...

Подскажите алгоритм, пожалуйста...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.03.2019, 12:30
Ответы с готовыми решениями:

Рекурсия. Написать рекурсивную подпрограмму, переводящую X в десятичную систему счисления.
Дано: двоичное число X. Требуется: написать рекурсивную подпрограмму, переводящую X в десятичную систему счисления.

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

Проверка на систему счисления
Задали лабу на конвертор систем счисления. Немного посидел в инете и нашел ка можно сделать через конвертацию уже в самом C#: int b =...

10
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
21.03.2019, 13:06
k01dun, можно сделать метод возвращающий из строки последовательность пар.
Что-нибудь в духе
C#
1
2
3
4
5
6
7
8
IEnumerable<string> Couples (string value)
{
     If (string.IsNullOrEmpty(value))
             return null;
 
     for (int ind = 0; ind < value.Length - 1; ind += 2)
           yield return value.Substring(ind, 2);
}
И анализируете возвращаемые пары.

Добавлено через 1 минуту
Пишу со смарта - могут быть ошибки.
0
-25 / 0 / 0
Регистрация: 12.09.2009
Сообщений: 74
21.03.2019, 14:06  [ТС]
это не совсем то.. мне посоветовали через словари, я сделал пока что так:
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
string input = textBytes.Text;
 
            string res = String.Empty;
 
            Dictionary<string, string> codes = new Dictionary<string, string>();
            codes.Add("AA","0");
            codes.Add("AB", "1");
            codes.Add("AC", "2");
            codes.Add("AD", "3");
            codes.Add("AE", "4");
            codes.Add("AF", "5");
            codes.Add("BA", "6");
            codes.Add("BB", "7");
            codes.Add("BC", "8");
            codes.Add("BD", "9");
            codes.Add("BE", "00");
            codes.Add("BF", "01");
            codes.Add("CA", "02");
            codes.Add("CB", "03");
            codes.Add("CC", "04");
            codes.Add("CD", "05");
            codes.Add("CE", "06");
            codes.Add("CF", "07");
            codes.Add("DA", "08");
            codes.Add("DB", "09");
            codes.Add("DC", "10");
            codes.Add("DD", "11");
            codes.Add("DE", "12");
            codes.Add("DF", "13");
            codes.Add("EA", "14");
            codes.Add("EB", "15");
            codes.Add("EC", "16");
            codes.Add("ED", "17");
            codes.Add("EE", "18");
            codes.Add("EF", "19");
            codes.Add("FA", "20");
            codes.Add("FB", "21");
            codes.Add("FC", "22");
            codes.Add("FD", "23");
            codes.Add("FE", "24");
            codes.Add("FF", "25");
            codes.Add("AAAA", "26");
            codes.Add("AAAB", "27");
            codes.Add("AAAC", "28");
            codes.Add("AAAD", "29");
            string item = String.Empty;
            string ss = String.Empty;
 
            for (int i = 0; i < input.Length; i=i+2)
            {
                ss = input.Substring(i,2);
                item = codes[ss];
                res = input.Substring(i, 2) + ">> " + item + "\n";
                richTextBox1.AppendText(res);
            }
Поиск ключа типа АА - без проблем, а вот теперь как мне найти например АААА?

Добавлено через 7 минут
и еще, как сгенерировать словарь динамически?
потому что он может достигать огромных размеров, яж не могу руками все значения прописывать...

типа взять все пары AA-FF, потом AAAA-FFFF и так далее...
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
21.03.2019, 14:52
k01dun, через словарь может делать преобразование пары в число. Но ни как не всей строки.
Получаете указанным выше методом пары из строки, потом преобразует каждую пару в число (математически или через словарь), из полученной последовательности чисел получаете конечный результат.

Добавлено через 7 минут
k01dun, и из Вашего примера не понять принцип декодирования.

BB - какое число?
CCFF - ?
0
-25 / 0 / 0
Регистрация: 12.09.2009
Сообщений: 74
21.03.2019, 15:03  [ТС]
Элд Хасп

BB - 7
CCFF - не знаю какое, словарь большой нужен уже

используются только 0-9
то есть 0-9
потом 00-09
потом 01-19
потом 02-29
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
21.03.2019, 15:13
k01dun, как это только 0-9?
А "СС" - не переводится?
Если 0-9 то 9 это AD ?

Добавлено через 4 минуты
k01dun, может у Вас просто шестиричная СС ?
И Вы сами переусложняете?
0
-25 / 0 / 0
Регистрация: 12.09.2009
Сообщений: 74
21.03.2019, 15:18  [ТС]
СС - 4,
9 это BD
Вы декодируете парами, но там не пары...

ключи только от AA до FF
AA-FF
AAAA-FFFF
AAAAAA-FFFFFF
...
AAAAAAAAAAAA-FFFFFFFFFFFF

значения только числа 0-9
0-9
00-09
10-19
...
100-999
...
1000-9999
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
21.03.2019, 15:24
k01dun, да, это я описку совершил 9 это BD.

Из Ваших объяснений, по-моему, это шестиричная СС. Просто вместо цифр используются буквы.
FF - это 35. Также?

Если да, то надо использовать "стандартный" метод преобразования СС.
Сейчас напишу пример.
0
-25 / 0 / 0
Регистрация: 12.09.2009
Сообщений: 74
21.03.2019, 15:49  [ТС]
хорошо, давайте пример проще

входная строка может содержать 0-9 символы:
string sym = "0123456789";

у меня есть символы для кодирования например: AB
string alts = "AB";

как мне закодировать пришедшую строку используя alts?
чтоб например:
0 = A
1 = B
2 = AA
3 = AB
4 = BB
5 = AAA
6 = AAB
7 = ABA
8 = ABB
9 = BAA


я просто не соображу как мне сделать цикл(ы) так, чтоб он создавал мне словарь основываясь на строках:
string sym = "0123456789";
string alts = "AB";

чтоб например, если заменить alts на скажем: !@#$%^&*()_+
то он строил бы так сказать хэш используя эти символы:
0 - !
1 - @
2 - #
3 - $
4 - %
5 - ^
6 - &
7 - *
8 - (
9 - )
00 - !!
01 - !@
02 - !#

это не двустороннее шифрование а построение так сказать хэш таблицы, основываясь на порядке символов в строке

вот что у меня получилось сейчас:

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
Dictionary<string, string> codes = new Dictionary<string, string>();
string hex = "0123456789ABCDEF";
            string my = "!@#$%^&*()_+";
 
            string item = String.Empty;
            string resitem = String.Empty;
 
            int hexcnt = hex.Length;
            int mycnt = my.Length;
 
           
                for (int j = 0; j < mycnt; j++)
                {
                    for (int h = 0; h < hexcnt; h++)
                    {
                        item = hex.Substring(j, 1) + hex.Substring(h, 1); 
                        // вылетает с ошибкой если my закончилась
                        resitem = my.Substring(h,1); 
                        // не знаю как сделать здесь, чтоб если  my закончилась он делал !!,!@,!# и тд.
                        //как в строке с item выше, там все работает...
                        codes.Add(item, resitem);
                    }
                }
            
 
            foreach (KeyValuePair<string, string> code  in codes)
            {
                richTextBox1.AppendText("key:" + code.Key + ", val: " + code.Value + "\n");
            }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
21.03.2019, 16:08
C#
1
2
3
4
String stroka = "AABBCCDDEEFF";
ulong num = 0;
foreach (char ch in stroka)
     num = num * 6 + (ch - 'A');
0
-25 / 0 / 0
Регистрация: 12.09.2009
Сообщений: 74
22.03.2019, 09:43  [ТС]
все решил через массивы, можно закрывать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.03.2019, 09:43
Помогаю со студенческими работами здесь

Перевод в систему счисления
Не могу преобразовать дробное двоичное число в десятичное string bin = &quot;1011&quot;; int dec = Convert.ToInt32(bin, 2); В коде целое,...

Перевод с 10 в 32 систему счисления
Я видел на одном сайте там можно било переводить с 10 в 32 систему счисления. Вопрос как такое организовать на шарпе?

Перевод из 16 в 10 систему счисления
Не работает перевод из 16 в 10 систему счисления. Переводит неверно. class Program { static int HexToDec(string...

Перевод в римскую систему счисления
Напишите функцию void которая выведет на монитор запись переданного ему числа в римской системе числения

Перевод числа в семеричную систему счисления
Здравствуйте, задача такая: &quot;Перевести введенное число в семеричную с/с и выяснить входит ли второе введенное число в семеричное...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru