Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Системы счисления, перевод 
:(
    Опции темы
SoWa
Дата 1.2.2005, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



САБЖ!
Помогите найти алгоритм перевода числа С из A системы счисления в B, где А,В,С даны!
Из DRKB примеры не работают!


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Druidik25
Дата 1.2.2005, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Могу утром принести. Код не слабый и без дельфина просто так не напишу. Если до утра терпит - принесу.

Самому интересно вспомнить.
PM MAIL ICQ   Вверх
Mew
Дата 2.2.2005, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.8.2004
Где: Омск

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



Могу прислать свою прогу, по переводу из десятичной в 16 и 2, и код так же наоборот...


Добавлено @ 09:09
Хотя а почему бы не разместить код..
Код

procedure TForm1.Button2Click(Sender: TObject);
var num,ber:integer;
    s1,s2 : string;
begin
   number:=strtoint(edit1.Text);
   num:=number div 16;
     ber:=number mod 16;
    case num of
                            0 : s1 := '';
                            1 : s1 := '1';
                            2 : s1 := '2';
                            3 : s1 := '3';
                            4 : s1 := '4';
                            5 : s1 := '5';
                            6 : s1 := '6';
                            7 : s1 := '7';
                            8 : s1 := '8';
                            9 : s1 := '9';
                           10 : s1 := 'A';
                           11 : s1 := 'B';
                           12 : s1 := 'C';
                           13 : s1 := 'D';
                           14 : s1 := 'E';
                           15 : s1 := 'F';
                                                     end;

     case ber of
                           0 : s2 := '';
                           1 : s2 := '1';
                           2 : s2 := '2';
                           3 : s2 := '3';
                           4 : s2 := '4';
                           5 : s2 := '5';
                           6 : s2 := '6';
                           7 : s2 := '7';
                           8 : s2 := '8';
                           9 : s2 := '9';
                           10 : s2 := 'A';
                           11 : s2 := 'B';
                           12 : s2 := 'C';
                           13 : s2 := 'D';
                           14 : s2 := 'E';
                           15 : s2 := 'F';
                                                     end;
   edit3.Text :=s1+s2;

end;

procedure TForm1.Button1Click(Sender: TObject);
var num,ber : integer;
   mun,reb : string;
begin
  number:=strtoint(edit1.Text);
   num:=number div 16;
       case num of
          0 : mun:='';
          1 : mun:='1';
          2 : mun:='10';
          3 : mun:='11';
          4 : mun:='100';
          5 : mun:='101';
          6 : mun:='110';
          7 : mun:='111';
          8 : mun:='1000';
          9 : mun:='1001';
          10 : mun:='1010';
          11 : mun:='1011';
          12 : mun:='1100';
          13 : mun:='1101';
          14 : mun:='1110';
          15 : mun:='1111';
          end;
   ber:=number mod 16;
   case ber of
        0 : reb:='0000';
        1 : reb:='0001';
        2 : reb:='0010';
        3 : reb:='0011';
        4 : reb:='0100';
        5 : reb:='0101';
        6 : reb:='0110';
        7 : reb:='0111';
        8 : reb:='1000';
        9 : reb:='1001';
        10 : reb:='1010';
        11 : reb:='1011';
        12 : reb:='1100';
        13 : reb:='1101';
        14 : reb:='1110';
        15 : reb:='1111';
        end;
      edit2.Text := mun+reb;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
   num,ber : integer;
   mun,reb,s1,s2 : string;
begin
   randomize;
   number:=strtoint(label3.Caption);
   num:=number div 16;
       case num of
          0 : begin mun:='';  s1:=''; end;
          1 : Begin mun:='1';  s1:='1'; end;
          2 : Begin mun:='10'; s1:='2'; end;
          3 : begin mun:='11';  s1:='3'; end;
          4 : begin mun:='100'; s1:='4'; end;
          5 : begin mun:='101'; s1:='5'; end;
          6 : begin mun:='110'; s1:='6'; end;
          7 : begin mun:='111'; s1:='7'; end;
          8 : begin mun:='1000'; s1:='8'; end;
          9 : begin mun:='1001'; s1:='9'; end;
          10 : begin mun:='1010'; s1:='A'; end;
          11 : begin mun:='1011'; s1:='B'; end;
          12 : begin mun:='1100';  s1:='C'; end;
          13 : begin mun:='1101';  s1:='D'; end;
          14 : begin mun:='1110';  s1:='E'; end;
          15 : begin mun:='1111'; s1:='F'; end;
          end;
   ber:=number mod 16;
   case ber of
        0 : begin reb:='0000'; s2:='0'; end;
        1 : begin reb:='0001'; s2:='1'; end;
        2 : begin reb:='0010'; s2:='2'; end;
        3 : begin reb:='0011'; s2:='3'; end;
        4 : begin reb:='0100'; s2:='4'; end;
        5 : begin reb:='0101'; s2:='5'; end;
        6 : begin reb:='0110'; s2:='6'; end;
        7 : begin reb:='0111'; s2:='7'; end;
        8 : begin reb:='1000'; s2:='8'; end;
        9 : begin reb:='1001'; s2:='9'; end;
        10 : begin reb:='1010';s2:='A'; end;
        11 : begin reb:='1011'; s2:='B'; end;
        12 : begin reb:='1100';  s2:='C'; end;
        13 : begin reb:='1101';  s2:='D'; end;
        14 : begin reb:='1110';  s2:='E'; end;
        15 : begin reb:='1111'; s2:='F'; end;
        end;
      ss1 := mun+reb; ss2:=s1+s2;
   if ss2 = edit4.Text then showmessage('правильно в 16-ой') else showmessage('No');
   if ss1 = edit5.text then showmessage('правильно в 2-ой') else showmessage('no');
   num1:=random(150)+15;
   label3.Caption:=inttostr(num1);
end;



PM MAIL ICQ   Вверх
Druidik25
Дата 2.2.2005, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



to Mew
Слишком уж длинная и простая программа.

Вот мой вариант функции:

Код

type MyType=array[-50..50] of byte;
var c,rez:MyType;
     SystemA,SystemB:byte;

function convert(dan:MyType;FromC,ToC:byte):MyType;
var aa,ss:real;
     i,lev:integer;
     tmp:MyType;
begin
 //Конвертануть любую в десятичную
 aa:=0;
 for i:=1 to 50 do begin
   aa:=(aa+dan[i])*FromC;
 end;
   aa:=aa+dan[0];
 ss:=1;
 for i:=-1 downto -50 do begin
   ss:=ss/FromC;
   aa:=aa+dan[i]*ss;
 end;
 //В итоге переменная аа держит значение в десятичной системе.
 for i:=-50 to 50 do tmp[i]:=0;
 ss:=1;
 lev:=0;
 while aa>0 do begin
   if aa>ToC then begin
     //Уровень числа в новой системе больше значения системы (выше порядок)
     ss:=ss*ToC;
     lev:=lev+1;
   end else begin
     if aa<ss/ToC then begin
       //Уровень числа в новой системе меньше значения системы на значение системы (ниже порядок)
       ss:=ss/ToC;
       lev:=lev-1;
     end else begin
       //Порядок числа подходящий. Отсекаем слишком мелкие частицы числа
       if lev>-50 then begin
         tmp[lev]:=(aa-round(aa/ss)*ss);
         aa:=aa-tmp[lev]*ss;
       end;
     end;
   end;
 end;
 convert:=tmp;
end;

//Вызывать:
rez:=convert(c,SystemA,SystemB);



Удобства: можно перевести число с любой системы от двоичной до системы со значимым числои 250.

Недостатки: Из за множества комбинаций символов пришлось данные и результаты получать в виде массивов.

PS: Ещё возможны ошибки, поскольку не удалось посидеть за компьютером дома- писалось вручную на работе, где Дельфина нету. (Попал не небольшой гульдеж).
ЗЗЫ: И голова ещё болит... %-)
Добавлено @ 14:14
Если есть коментарий, или кто-то может проверить: пишите!!!

Это сообщение отредактировал(а) Druidik25 - 2.2.2005, 14:12
PM MAIL ICQ   Вверх
SoWa
Дата 3.2.2005, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



Спасибо всем, но я уже тоже придумал(не без вашей помощи), скоро выложу исходник!


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Dynamic
Дата 4.2.2005, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 12
Всего: 15



Вот, накропал как-то статейку по этой теме smile


--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
neprogrammist
Дата 12.5.2010, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(SoWa @ 3.2.2005,  12:11)
Спасибо всем, но я уже тоже придумал(не без вашей помощи), скоро выложу исходник!

где же исходник? 
PM MAIL   Вверх
Akella
Дата 12.5.2010, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



напиши ему в ЛС, хотя... времени прошло уже, посмотрел бы на дату сообщений
PM MAIL   Вверх
SoWa
Дата 13.5.2010, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



Ээх, некропостер.
Вот твой некрокод >_> Мне уже читать страшно то, что пять лет назад было писано smile
Код

function FromToAnySys(fromSys,ToSys: integer; chislo: string): string;
var
i,k,mo: integer;
d: integer;
buk: integer;
step: integer;
s,sl: string;
s1: integer;
m: string;

function revert(n: string): string;
var i: integer;
q: string;
begin
for i:=length(n) downto 1 do
begin
 q:=q+n[i];
end;
revert:=q;
end;

begin
m:='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
s:='';
d:=0;
for i:=1 to length(chislo) do
begin
 for k:=1 to 37 do
  begin
   if chislo[i]=m[k] then buk:=k-1;
  end;
 step:=strtoint(floattostr(power(FromSys,(length(chislo)-i))));
 d:=d+(buk*step);
end;

while d<>0 do
begin
 mo:=d mod ToSys;
 s:=s+m[mo+1];
 d:=d div ToSys;
end;

result:=revert(s);
end;



--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Akella
Дата 13.5.2010, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Ну вот, видите. Помогли человеку, а говорят, что некропостинг -зло smile 
PM MAIL   Вверх
neprogrammist
Дата 18.5.2010, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



оооо, спасибо, а это из какой сс в какую переводит?

объясните пожалуйста smile 
PM MAIL   Вверх
Данкинг
Дата 18.5.2010, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Цитата(neprogrammist @ 18.5.2010,  23:45)
оооо, спасибо, а это из какой сс в какую переводит?

объясните пожалуйста smile

Попробуй догадаться исходя из названия функции. Я вот догадался. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
neprogrammist
Дата 21.5.2010, 21:07 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Данкинг @ 18.5.2010,  23:09)
Цитата(neprogrammist @ 18.5.2010,  23:45)
оооо, спасибо, а это из какой сс в какую переводит?

объясните пожалуйста smile

Попробуй догадаться исходя из названия функции. Я вот догадался. smile

неее я такого низнаю, так че  она переводит? smile 
PM MAIL   Вверх
kami
Дата 21.5.2010, 22:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(neprogrammist @  21.5.2010,  21:07 Найти цитируемый пост)
так че  она переводит

Кирдык. smile 
А разложить название функции на отдельные слова и воспользоваться словарем религия не позволяет?
Хотя бы перевести слово Any?
Да оно и из параметров и результата уже понятно.
PM MAIL WWW   Вверх
Данкинг
Дата 21.5.2010, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Цитата(neprogrammist @  21.5.2010,  22:07 Найти цитируемый пост)
неее я такого низнаю,

Я тоже такого "низнаю", но тем не менее как увидел - так сразу догадался. Посмотри на название функции и её параметры.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


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

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


 




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


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

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