Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Преобразование чисел из одной сист счисления в другую / 5 сообщений из 5, страница 1 из 1
21.08.2010, 10:14:16
    #36804193
Преобразование чисел из одной сист счисления в другую
Язык реализации не важен, пусть это будет C# или С++

Пусть есть интерфейс
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
interface IConvert
{
/// <summary>
/// Преобразование числа из одной позицонной сисемы счисления в другую
   /// </summary>
/// <param name="value">строковое предствление числа в базовой сисеме счисления</param>
/// <param name="fromBase">строка представляющая основание базовой системы счисления</param>
   /// <param name="toBase">строка представлюща основание системы счиления в которую надо перевести</param>
/// <returns>строковое предстваление числа в новой системе счисления</returns>
/// <exception cref="ArgumentException">Исключание если конвертируемое значение не представлет из себя число в базовой сисеме счисления</exception>
string Convert(string value, string fromBase, string toBase);
  }




Как сделать класс, реализующий этот интерфейс?
авторValue = “GSAK”
fromBase = “A,S,G,K” – основание системы равно 4 (если записать арабскими то 0,1,2,3)
toBase= “0,1,2,3,4,5,6,7,8,9” – основние сисемы равно 10
return value = “147”


Строки, представляющие основание позиционной системы, содержат любые символы для предстваления цифры в порядке возрастания
...
Рейтинг: 0 / 0
21.08.2010, 13:13:06
    #36804340
junior  idiot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование чисел из одной сист счисления в другую
Метод задания алфавитов систем счисления мне не понравился, в чём прошу винить некрасивость.

Код: plaintext
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.
        class Converter : IConvert
        {
            int fromString(string value, string baseStr)
            {
                int[] values = new int[ 128 ];
                int n =  0 ;
                for (int i =  0 ; i < baseStr.Length; i++)
                    if (i %  2  ==  0 )
                    {
                        values[(byte)baseStr[i]] = n++;
                    }
                int ret =  0 ;
                for (int i =  0 ; i < value.Length; i++)
                {
                    ret = ret * n + values[(byte)value[i]];
                }
                return ret;
            }
            string toString(int value, string baseStr)
            {
                string ret = "";
                string[] alphabet = baseStr.Split(',');
                int n = alphabet.Length;
                do
                {
                    ret = alphabet[value % n] + ret;
                    value /= n;
                } while (value >  0 );
                return ret;
            }
            public string Convert(string value, string fromBase, string toBase)
            {
                return toString(fromString(value, fromBase), toBase);
            }
        }
...
Рейтинг: 0 / 0
21.08.2010, 14:19:51
    #36804421
Преобразование чисел из одной сист счисления в другую
junior idiot,

интересно, посмотрю, позже отпишусь.
...
Рейтинг: 0 / 0
21.08.2010, 20:44:30
    #36804629
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование чисел из одной сист счисления в другую
Джеки Мхртчан,

Мне вот показалось (особо и не смотрел), что у junior idiotа предполагается односимвольный алфавит, что уже как бы накладывает ограничение величины базы количеством символов в юникоде. Имхо, с массивами правильнее, потому что при случае, когда юникод исчерпан, можно использовать "цифры" из нескольких символов, типа ..."qwe","qwr","qwt"... и т.д. .
...
Рейтинг: 0 / 0
22.08.2010, 07:55:03
    #36804766
junior  idiot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование чисел из одной сист счисления в другую
ShSerge,
односимвольный алфавит предполагается в условии задачи, в которой запись числа представлена строкой (а не массивом строк), то есть цифрой является ровно один символ.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Преобразование чисел из одной сист счисления в другую / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]