IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Как обойти 10 систему при переводе?, ...при переводе из 2-ой в 16-ю систему?
Atomyc
сообщение 28.11.2007 13:29
Сообщение #1





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


Help, I need somebody,
Help, not just anybody,
Help, you know I need someone, help.

А точнее по русски: Помогите пожалуйста, задача такая,Нужно перевести дробные числа из двоичной системы в шеснадцатиричную.я Я кое как написал прогу,работает,всё считает правильно, а училка говорит что это мараз через 10 переводить,и надо было по другому делать,я у неё спрашиваю,ну объясните мне тогда как?!Она мне сказала что я должен это сам знать.

Подскажите алгоритм перевода минуя 10-ю систему,и помоги переделать прогу.

uses crt;
var
n, int_part, fraq_part: string;
s: longint;
q: real;
_result: real;
h, r, eps, i: integer;
x, p: real;
otv, rev: string;
begin
clrscr;
Writeln ('Vvedite chislo v 2-oi sisteme');
readln(n);
int_part := copy(n, 1, pos('.', n) - 1); {отделяем целую часть двоичного числа}
fraq_part := copy(n, pos('.', n) + 1, 255); {отделяем дробную часть числа}

_result := 0.0;

s := 1;
while int_part <> '' do begin
_result := _result + (ord(int_part[length(int_part)]) - ord('0')) * s;
delete(int_part, length(int_part), 1);
s := s * 2;
end;

writeln(_result:10:5);

q := 1 / 2;
while fraq_part <> '' do begin
_result := _result + (ord(fraq_part[1]) - ord('0')) * q;
delete(fraq_part, 1, 1);
q := q / 2;
end;

writeln('Promezhytochi rezyltat =',_result:10:5);
x:=_result;
h:= trunc(x); {находим целую часть}
p:= x-h; {находим дробную часть}
repeat
r:= h mod 16; {сохраняем остаток}
h:= h div 16; {оставляем только целую часть}
if r<10 then otv:= otv + chr (r+48) {код цифры в ascii таблице равен самой цифре +48}
else otv:= otv+chr (r+55); {шаг до буквы А от 10 = 55}
until h<=0;
for i:=1 to length(otv) do rev:= rev+otv[length(otv)-i+1]; {записываем остатки задом наперёд}
otv:= rev;
eps:=0; {точность дробной части}
otv:= otv+'.';
repeat
r:= trunc (p*16); {берём целую часть}
p:= p*16-r; {оставляем только дробную}
if r<10 then otv:= otv+chr (r+48)
else otv:= otv+chr (r+55);
inc (eps);
until (p=0) or (eps>10);
writeln ('Chislo v 16 sisteme = ',otv);
Readln;
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.11.2007 13:48
Сообщение #2


Гость






Ну, уж с переводом 2 -> 16 не должно быть никаких проблем... Просто напросто дополняешь целую часть нулями слева, пока ее длина не станет кратна 4-м, с дробной частью - то же самое, но нули добавлять справа... И потом разбиваешь на тетрады и переводишь каждую тетраду в 16-ричную цифру...

Т.е., '0001' становится 1, '0101' - будет 5, и так далее... Просто объяви массив тетрад:
const
hex: array[1 .. 2, 0 .. $F] = (
('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'), { <--- 16-ричные цифры }
('0000', '0001', '0010', ... ) { <--- Соответствующие им тетрады }
);

и пробегай в цикле по hex[2, i] пока не найдешь совпадение... Тогда hex[1, i] и будет очередной 16-ричной цифрой...

Сообщение отредактировано: volvo - 28.11.2007 13:48
 К началу страницы 
+ Ответить 
Atomyc
сообщение 28.11.2007 14:29
Сообщение #3





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


вроде звучит просто,попробую щас сделать,спс.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 3:06
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"