Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевод числа в определённую систему счисления 
V
    Опции темы
Сый
Дата 10.7.2006, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



Нужно перевести число в систему счисления с основанием 33 и обратно. Поделитесь алгоритмом. 
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
DeadSoul
Дата 10.7.2006, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 1
Всего: 11



Последний символ - остаток от деления на 33, предпоследний - остаток от деления на 33^2  и т.д. 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
maxim1000
Дата 10.7.2006, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



давно всем советуют - читайте прикреплённые темы:
http://forum.vingrad.ru/index.php?showtopi...st&p=284601
ведь это часто даёт мгновенный ответ вместо того, чтобы ждать, пока кто-нибудь напишет... 


--------------------
qqq
PM WWW   Вверх
Ангелочек
Дата 10.7.2006, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 17.6.2006

Репутация: нет
Всего: 2



Алфавит системы счисления 33  Первые десять числа 0-9...а потом по порядку буквы латинского алфавита. 10 A 11 B 12 C и т.д.  Это нужно на бумажке написать. Делишь число на 33 уголком, остаток  от деления переводишь с 33ричную систему счисления. Обратно: Первая цифра с конца нулевой разряд, 2 с конца 1 разряд, заменяешь букву десятичным числом (A->10, b->) если это не буква оставляешь так и умножаешь на 33 в степени разряда. 
PM   Вверх
SergeCpp
Дата 10.7.2006, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 3
Всего: 124



_itoa

Код
static void __cdecl xtoa (
        unsigned long val,
        char *buf,
        unsigned radix,
        int is_neg
        )
{
        char *p;                /* pointer to traverse string */
        char *firstdig;         /* pointer to first digit */
        char temp;              /* temp char */
        unsigned digval;        /* value of digit */

        p = buf;

        if (is_neg) {
            /* negative, so output '-' and negate */
            *p++ = '-';
            val = (unsigned long)(-(long)val);
        }

        firstdig = p;           /* save pointer to first digit */

        do {
            digval = (unsigned) (val % radix);
            val /= radix;       /* get next digit */

            /* convert to ascii and store */
            if (digval > 9)
                *p++ = (char) (digval - 10 + 'a');  /* a letter */
            else
                *p++ = (char) (digval + '0');       /* a digit */
        } while (val > 0);

        /* We now have the digit of the number in the buffer, but in reverse
           order.  Thus we reverse them now. */

        *p-- = '\0';            /* terminate string; p points to last digit */

        do {
            temp = *p;
            *p = *firstdig;
            *firstdig = temp;   /* swap *p and *firstdig */
            --p;
            ++firstdig;         /* advance to next two digits */
        } while (firstdig < p); /* repeat until halfway */
}
 

Это сообщение отредактировал(а) SergeCpp - 10.7.2006, 13:40
PM MAIL WWW ICQ   Вверх
Сый
Дата 10.7.2006, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



Спасибо, конечно, но проблема в том, что я не знаю C++.

> Первые десять числа 0-9...а потом по порядку буквы латинского алфавита.
По задаче нужно использовать буквы русского алфавита. 
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
Ангелочек
Дата 10.7.2006, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 17.6.2006

Репутация: нет
Всего: 2



Цитата(Сый @ 10.7.2006,  14:08)
Спасибо, конечно, но проблема в том, что я не знаю C++.

> Первые десять числа 0-9...а потом по порядку буквы латинского алфавита.
По задаче нужно использовать буквы русского алфавита.

Задачу в студию! 
PM   Вверх
Сый
Дата 10.7.2006, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



Ну задачу в общем-то я и озвучил. Оригинального текста при себе не имею.
Вот что у меня получилось (язык - Глагол), прошу проверить:
Код

ОТДЕЛ ЧислоВБуквы+;

ИСПОЛЬЗУЕТ
  Вывод ИЗ "...\Отделы\Обмен\";

ВИД
  Число33 = ЦЕПЬ[12];

ПЕР
  Алфавит: РЯД 33+1 ИЗ ЗНАК;
  ч33: Число33;

ЗАДАЧА ОпределитьБукву(Буква: ЗНАК): ЦЕЛ; 
УКАЗ 
  ВЫБРАТЬ Буква ИЗ 
    "А", "а": ВОЗВРАТ 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 
  ИНАЧЕ КОН; 
КОН ОпределитьБукву;

ЗАДАЧА ВЧисло33(Число: ШИРЦЕЛ; Результат+: Число33);
ПЕР
  Счётчик: УЗКЦЕЛ;
  Копия: ЗНАК;
УКАЗ
  Счётчик := 0;
  ПОКА Число >= 33 ВЫП
    Результат[Счётчик] := Алфавит[Число ОСТАТОК 33];
    Число := Число ДЕЛИТЬ 33;
    УВЕЛИЧИТЬ(Счётчик)
  КОН;
  Результат[Счётчик] := Алфавит[Число];
  ОТ Счётчик := 0 ДО (ДЛИНА(Результат) ДЕЛИТЬ 2) - 1 ВЫП
    Копия := Результат[Счётчик];
    Результат[Счётчик] := Результат[ДЛИНА(Результат)-1-Счётчик];
    Результат[ДЛИНА(Результат)-1-Счётчик] := Копия
  КОН
КОН ВЧисло33;

ЗАДАЧА ИзЧисла33(Число-: Число33): ШИРЦЕЛ;
ПЕР
  Счётчик: УЗКЦЕЛ;
  Результат: ШИРЦЕЛ;
  Степень: ШИРЦЕЛ;
УКАЗ
  Результат := 0; Степень := 1; 
  ОТ Счётчик := 0 ДО ДЛИНА(Число)-1 ВЫП
    Степень := Степень*33;
    УВЕЛИЧИТЬ(Результат, (ОпределитьБукву(Число[ДЛИНА(Число)-1-Счётчик])-1) * (Степень ДЕЛИТЬ 33))
  КОН;
  ВОЗВРАТ Результат
КОН ИзЧисла33;

УКАЗ
  Алфавит := "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
  ВЧисло33(1234567890, ч33); Вывод.ЧЦел("%d = ", ИзЧисла33(ч33), 0, 0, 0); Вывод.Цепь(ч33)

КОН ЧислоВБуквы.

Программа выдаёт правильный (вроде бы) результат: 1234567890 = ЮСАХЕЁ 
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
sergejzr
Дата 10.7.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 4
Всего: 360



Примерчик прикинул smile

База для 33:
1,2,3,4,5,6,7,8,9,А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц


Пишем число, в скобках система.

Расклад числа на составляющие (для наглядности)
20603(10) =3*10^0+0*10^1+6*10^2+0*10^3+2*10^4


Код

20603:33= 624 остаток [B]11[/B](10) - Б(33)
624    :33  = 18 остаток [B]30[/B](10) - У(33)
30      :33    = 0 остаток [B]18[/B](10) - З(33)


Ответ: 12987(10)=ЗУБ(33)


Проверка:
ЗУБ(33)=Б*33^0+У*33^1+З*33^2=18*33^0+30*33^1+11*33^2=20603

Добавлено @ 14:41 
А, тут уже всё решилось smile
 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Сый
Дата 10.7.2006, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



> База для 33:
> 1,2,3,4,5,6,7,8,9,А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц
Я имел ввиду только русские буквы (без цифр). Это осуществлено в моей программе. 
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1444 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.