Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Преобр-е вещественных чисел из одной системы счисления в другую
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Crash Override Crash Override вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.11.2008
По умолчанию 30.11.2008, 00:06

Помогите пожалуста, программисты высоко интелектуального языка пролога.
Очень нужна ваша помощь!
Ответить с цитированием
  (#2 (permalink)) Старый
Crash Override Crash Override вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.11.2008
По умолчанию 30.11.2008, 00:11

на сайте кое-что нашел конечно, в частности перевод из 10 в другие.. а вот как переводить например с 2 в 16 нет... и не могу сам реализовать..
а что б было все в одном коде.. так вообще... помогите пожалуста
Ответить с цитированием
  (#3 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 8,170
Сказал(а) спасибо: 5
Поблагодарили 339 раз(а) в 338 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 30.11.2008, 00:36

Приведите пример того, что нашли или дайте ссылку. Думаю, что прогу можно легко модифицировать.
Ответить с цитированием
  (#4 (permalink)) Старый
Crash Override Crash Override вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.11.2008
По умолчанию 30.11.2008, 00:47

Нашел вашу же программу
Начал модернизировать, то я очень не силен в прологе.. В общем вот что у меня есть:

Код:
predicates
dec_hex(integer,string,integer)
to16(integer,string)

clauses
dec_hex(Д,Ш,Осн):-
   Ц = Д div Осн,Ц>0,
   Ост = Д mod Осн,!,
   dec_hex(Ц,Ш1,Осн),
   to16(Ост,Ц1),
   concat(Ш1,Ц1,Ш).
dec_hex(Д,Ш,Осн):-
   Ост = Д mod Осн,
   to16(Ост,Ш).

to16(Ц,Ш):-Ц<10,!,str_int(Ш,Ц).
to16(Ц,Ш):-Код=55+Ц,
   char_int(Char,Код),
   str_char(Ш,Char).
   
goal
write("Введите целое десятичное число: "),
readint(Д),nl,
write("Введите основание системы счисления: "),
readint(Осн),nl,
dec_hex(Д,Ш,Осн),
write("Результат: ",Ш),
exit.
Ответить с цитированием
  (#5 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,798
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 30.11.2008, 13:49

Здесь есть перевод и для целых, и для дробных частей. Поищите внимательней.
Чтобы перевести из произвольной системы в любую другую, достаточно уметь переводить в десятичную и обратно.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 8,170
Сказал(а) спасибо: 5
Поблагодарили 339 раз(а) в 338 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 30.11.2008, 13:54

Дело не в этом. Переводить надо из произвольной в произвольную. т.е. надо наваять предикат
Код:
convert: (unsigned Вход_основание, string Вход_число,unsigned Вых_основание, string Вых_число) procedure (i,i,i,o)
Ответить с цитированием
  (#7 (permalink)) Старый
Crash Override Crash Override вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.11.2008
По умолчанию 30.11.2008, 16:11

а какие правила для этого предиката необходимо указать?
Ответить с цитированием
  (#8 (permalink)) Старый
Crash Override Crash Override вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.11.2008
По умолчанию 30.11.2008, 23:23

и если можно, то для VP5.. незнаю много ли чем отличается он от 7.. но 7 в глаза не видел
Ответить с цитированием
  (#9 (permalink)) Старый
Crash Override Crash Override вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.11.2008
По умолчанию 01.12.2008, 02:43

пожалуйста, помогите, сроки сдачи поджимают совсем..
Ответить с цитированием
  (#10 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,798
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 01.12.2008, 14:51

Я же Вам сразу написала, что есть здесь эта программа. Поищите примерно на слово десятич*.
Мне сейчас некогда проверять. Поиском всегда полезно уметь пользоваться.
Ответить с цитированием
  (#11 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 8,170
Сказал(а) спасибо: 5
Поблагодарили 339 раз(а) в 338 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 02.12.2008, 00:06

Из любого основания в любое основание, с получением промежуточного десятичного числа:
Код:
predicates
conv(byte InBase,string InNumber,integer Number10,byte OutBase,string OutNumber) - (i,i,o,i,o).
toDec(byte InBase,string InNumber,unsigned Length,integer Power,integer OutNumber) - (i,i,i,i,o).
decTo(integer InNumber,byte OutNumber,string OutNumber) - (i,i,o).
s_i(string Number,integer Number) - (i,o).
i_s(integer Number,string Number) - (i,o).
goal
conv(16,"FFFFF",N1,29,N2),write("Промежуточное десятичное число: ",N1,"\nРезультат: ",N2),exit.
clauses
conv(B,N,N1,B0,N0):-
   upper_lower(M,N), str_len(M,L),
   toDec(B,M,L,0,N1), decTo(N1,B0,N0).

toDec(10,S,_,_,N):-str_int(S,N),!.
toDec(_,_,0,_,0):-!.
toDec(B,N,L,P,N0):-substring(N,L,1,S),s_i(S,I),I<B,
   L1=L-1,P1=P+1,
   toDec(B,N,L1,P1,N1),
   N0 = N1 + I*val(integer,exp(P*ln(B))).

decTo(Д,Осн,Ш):-
   Ц = Д div Осн,Ц>0,
   Ост = Д mod Осн,!,
   decTo(Ц,Осн,Ш1),
   i_s(Ост,Ц1),
   concat(Ш1,Ц1,Ш).
decTo(Д,Осн,Ш):-
   Ост = Д mod Осн,
   i_s(Ост,Ш).

s_i(S,I):-str_char(S,C),char_int(C,J),J>64,J<97,I=J-55,!;str_int(S,I).

i_s(Ц,Ш):-Ц<10,!,str_int(Ш,Ц).
i_s(Ц,Ш):-Код=55+Ц,char_int(Char,Код),str_char(Ш,Char).
На досуге надо будет прикинуть как можно сделать преобразование без промежуточного десятичного.
Ограничения:
1. Только целые неотрицательные. Однако легко расширить до знаковых real.
2. Основание не больше чем 36 (10+ангбуквы). Хотя легко увеличить, договорившись о символах, представляющих числа.
Ответить с цитированием
  (#12 (permalink)) Старый
Crash Override Crash Override вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.11.2008
По умолчанию 02.12.2008, 13:39

спасибо!
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
Crash Override Crash Override вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.11.2008
По умолчанию 06.12.2008, 01:02

Винитарх, если ты говоришь легко расширить, не мог бы рассказать как?
Ответить с цитированием
  (#14 (permalink)) Старый
Crash Override Crash Override вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.11.2008
По умолчанию 06.12.2008, 03:12

тогда ведь можно будет преобразовывать дробные числа, что мне и нужно )
Ответить с цитированием
  (#15 (permalink)) Старый
Crash Override Crash Override вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.11.2008
По умолчанию 06.12.2008, 03:52

я вот ещё нашел код Alison:
Код:
domains
цифра=ц(integer);z
цифры=цифра*
predicates
преобр(цифры,integer,integer,цифры,integer КоличествоЦифр)
цел_в_десятич(цифры,integer,integer,integer,цифры)
дроб_в_десятич(цифры,integer,integer,integer,integer)
цел_из_десятич(integer,integer,цифры,цифры)
дроб_из_десятич(integer,integer,integer,integer,цифры)
длина(цифры,integer,integer)
соед(цифры,цифры,цифры)
clauses
преобр(Список,Осн,НовОсн,НовСписок,КоличЦифр):- 
    цел_в_десятич(Список,Осн,0,Число,ДробЧасть),
    длина(ДробЧасть,0,Длина),
    Знамен=val(unsigned,exp(Длина*ln(Осн))),
    дроб_в_десятич(ДробЧасть,Осн,Знамен,0,Числит),
    цел_из_десятич(Число,НовОсн,[],НовЦелЧасть),
    дроб_из_десятич(Числит,Знамен,НовОсн,КоличЦифр,НовДробЧасть),
    соед(НовЦелЧасть,[z|НовДробЧасть],НовСписок).

цел_в_десятич([ц(Ц)|Цифры],Осн,Ч,Число,ДробЧасть):- 
    Ч1=Ч*Осн+Ц,
    цел_в_десятич(Цифры,Осн,Ч1,Число,ДробЧасть).
цел_в_десятич([z|ДробЧасть],_,Число,Число,ДробЧасть). 
цел_в_десятич([],_,Число,Число,[]).

дроб_в_десятич([ц(Ц)|ДробЧасть],Осн,Знамен,Ч,Числит):- 
    Знамен1=Знамен div Осн,
    Ч1=Ц*Знамен1+Ч,
    дроб_в_десятич(ДробЧасть,Осн,Знамен1,Ч1,Числит).
дроб_в_десятич([],_,_,Числит,Числит).

цел_из_десятич(Число,Осн,Цифры,ЦелЧасть):- Число>=Осн,!,
    Ц=Число mod Осн,
    Число1=Число div Осн,
    цел_из_десятич(Число1,Осн,[ц(Ц)|Цифры],ЦелЧасть).
цел_из_десятич(Ц,_,Цифры,[ц(Ц)|Цифры]).

дроб_из_десятич(0,_,_,_,[]):- !.
дроб_из_десятич(_,_,_,0,[]):- !.
дроб_из_десятич(Числит,Знамен,Осн,КоличЦифр,[ц(Ц)|ДробЧасть]):-
    Кратн=Числит*Осн,
    Ц=Кратн div Знамен,
    Числит1=Кратн-Ц*Знамен,
    КоличЦифр1=КоличЦифр-1,
    дроб_из_десятич(Числит1,Знамен,Осн,КоличЦифр1,ДробЧасть).

длина([_|Сп],С,Д):- С1=С+1,длина(Сп,С1,Д).
длина([],Д,Д).

соед([Ц|ЦЧ],ДЧ,[Ц|Сп]):- соед(ЦЧ,ДЧ,Сп).
соед([],Сп,Сп).
goal
преобр([ц(1),ц(1),z,ц(1),ц(1),ц(0),ц(1)],2,4,НовСписок,5).
но что-то не могу в нем разобраться
Результат: НовСписок=[ц(3),z,ц(3),ц(1)]
1 Solution

почему?
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В массиве из 25 вещественных чисел найти наименьший элемент imported_Дмитрий74 Visual Basic 0 19.04.2011 17:17
Как перевести числа из одной системы в другую Анютка :) С/С++ 0 29.03.2011 00:13
Формирование из вещественных случайных чисел в диапазоне Domienfreema Вопросы начинающих программистов 2 24.02.2011 14:33
Представление вещественных чисел a_lexsandr Assembler 0 16.11.2010 16:56
Найти среднее арифметическое списка вещественных чисел Malgrim Lisp 4 16.11.2009 10:04
Чтение из файла вещественных чисел simsalbim С/С++ 5 07.12.2006 11:01
Преобразование чисел в другие системы счисления Виталик 1 Delphi 3 27.11.2006 23:04
Перевод чисел из 10-й системы счисления в 16-ую worker00 Вопросы начинающих программистов 6 16.05.2006 09:55
Сравнение вещественных чисел ukrana Assembler 2 08.05.2006 16:04
Приведения вещественных чисел к целому типу Flex25 C++ Builder 5 15.03.2006 00:00
Перевод из одной системы счисления в другую [b1o].GeN Delphi 1 22.12.2004 12:02
Как написат программу для перевода чисел одной системы счисления в другую на Delphi Drawn Вопросы начинающих программистов 10 18.11.2004 15:51



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов