Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.13;
Скачать: CL | DM;

Вниз

Двоично-десятичные числа   Найти похожие ветки 

 
kat   (2002-04-27 10:11) [0]

Меня попросили написать курсовую "Вычитание двоично-десятичных чисел". Там сначало надо преобразовать двоичные числа в двоично десятичные, потом вычесть, а потом опять преобразовать к двоичному числу. Может быть кто-нибудь делал что-то такое, не могли бы помочь с кодом? Пожалуйста


 
AFROLOV   (2002-04-27 10:20) [1]

А что такое двоично десятичные числа?


 
Alx2   (2002-04-27 10:24) [2]

В полубайте сидят значения 0..9


 
Romkin   (2002-04-27 10:24) [3]

У x86 архитектуры исторически есть все команды ассемблера и для преобразований, и для операций с двоично-десятичными числами. Просто найди учебник по ассемблеру, и оттуда
2AFROLOV : это когда 4 бита используются для записи числа от 0 до 9, поэтому байт содержит 2 цифры, и всего от 0 до 99


 
MBo   (2002-04-27 10:25) [4]

http://www.atmel.ru/AVR/BINBCD.htm
поиск


 
kat   (2002-04-27 10:31) [5]

Расскажу на примере
Есть число 57319 - в десятичной системе
Его можно преобразовать к упакованному и неупакованному виду 2-10системы
|05|73|09
0000 0101|0111 0011|0001 1001 -упакованный
57319
0000 0101|0000 0111|0000 0011|0000 0001|0000 1001 -неупакованный


 
kat   (2002-04-27 10:35) [6]

http://www.atmel.ru/AVR/BINBCD.htm я нашла, только не поняла как преобразовать Например
11001001 в 2-системе к 2-10системе


 
Anatoly Podgoretsky   (2002-04-27 10:49) [7]

kat © (27.04.02 10:11)
Ромкин ответил, можно конечно и без АСМ, но морока

AFROLOV © (27.04.02 10:20)
BCD

Alx2 © (27.04.02 10:24) & Romkin © (27.04.02 10:24)
Может и байт занимать, упакованные и неупакованные

kat © (27.04.02 10:31)
О прекрасно разбираешься с темой!

kat © (27.04.02 10:35)
Черех операции деления по модулю 10
N div 10, N mod 10 и дальше ручная упаковка по байтам.



 
kat   (2002-04-27 11:20) [8]

А никто не встречал такого алгоритма на паскале?




 
MBo   (2002-04-27 11:21) [9]

а тебе упакованный или нет?


 
kat   (2002-04-27 11:28) [10]

оба, хотя бы упакованный увидеть, неупакованный аналогично


 
MBo   (2002-04-27 11:33) [11]

двоичные даны в виде Integer или строк "10010011"


 
kat   (2002-04-27 11:48) [12]

строки


 
Romkin   (2002-04-27 12:30) [13]

38 Hex = 56 dec = 0011 1000 bin
BCD: 56 (0101 0110 bin) - упакованный
0506H - неупакованный
Если не ошибаюсь :-))
Есть алгоритм простого преобразования байта в BCD, без делений по модулю - только логические операции. Позабыл вот только


 
MBo   (2002-04-27 12:35) [14]

вот в bcd перевод


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ["0","1",#8,#9,#13]) then key:=#0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var sbin:string;
i,k,ibcd:integer;
idec:integer;
b:byte;
begin
sbin:=edit1.text;
k:=0;
idec:=0;
for i:=length(sbin) downto 1 do begin
b:=ord(sbin[i])-ord("0");
idec:=idec or (b shl k);
inc(k);
end;
label1.caption:=inttostr(idec);
k:=0;
ibcd:=0;
while idec>0 do begin
b:=idec mod 10;
ibcd:=ibcd or (b shl k);
inc(k,4);
idec:=idec div 10
end;
label2.caption:=inttostr(ibcd);
end;



 
aabark   (2002-04-27 12:57) [15]

Дело это не очень страшное .
Лет 20 назад я этим занимался на ЕС ЭВМ .
Была даже программа перевода чисел текст
( одна тысяча двести восемьдесят руб. 00 коп ) .
Максимально двочно-десятичное число на ЕС могло
иметь только 15 цифр ( + знак ) !!
Когда Егорушко Гайдар пришел к власти -
нам 15 цифр стало нехватать , но тут я с завода
ушел в "свободное плавание" и в , часности ,
на Delphi 1.0 + IB4 ( NetWare ) в банке
написал ряд задач .
Вот такие ассоциации вызвал ваш вопрос ...
Дерзайте , молодые , дерзайте ...


 
MBo   (2002-04-27 13:19) [16]

Держи, Катюша

function BinStrToInt(s:string):integer;
var i,k:integer;
begin
result:=0;
k:=0;
for i:=length(s) downto 1 do begin
Result:=Result or ((ord(s[i])-ord("0")) shl k);
inc(k);
end;
end;

function IntToBCD(i:integer):Integer;
var k:integer;
begin
k:=0;
Result:=0;
while i>0 do begin
Result:=Result or ((i mod 10) shl k);
inc(k,4);
i:=i div 10;
end;
end;

function BCDAdd(b1,b2:integer):integer;
var i,j,perenos:integer;
begin
Result:=0;
perenos:=0;
for i:=0 to 7 do begin
j:=perenos+((b1 shr (4*i)) and $F)+((b2 shr (4*i))and $F);
Result:=Result or ((j mod 10) shl (4*i));
perenos:=j div 10;
end;
end;

function BCDToInt(b:integer):integer;
var k:integer;
begin
result:=0;
k:=1;
while b>0 do begin
Result:=Result + k*(b and $F);
b:=b shr 4;
k:=k*10;
end;
end;

function IntToBinStr(I:integer):string;
begin
Result:="";
while i>0 do begin
Result:=Chr((I and 1)+$30)+Result;
I:=I shr 1;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var s1,s2:string;
ibcd1,ibcd2,ibcd3:integer;
begin
s1:=edit1.text;
ibcd1:=IntToBCD(BinStrToInt(s1));
s2:=edit2.text;
ibcd2:=IntToBCD(BinStrToInt(s2));
ibcd3:=BCDadd(ibcd1,ibcd2);
label2.caption:=InttoBinStr(BCDToInt(ibcd3));
end;


 
kat   (2002-04-27 13:39) [17]

MBo © (27.04.02 13:19) спасибо
Но сделано что сначало 2-ой число переводится в 10-ое, а только потом в 2-10-ое.
Нужен алгоритм непосредственного перевода из 2-ой системы в 2-10систему. И числа могут быть не только целые.
И вообще дурацкое задание. Но что-нибудь придумаю


 
MBo   (2002-04-27 13:45) [18]

просто объедини две функции в одну.
поиском в yandex найдешь кучу ссылок


 
Anatoly Podgoretsky   (2002-04-27 14:11) [19]

kat © (27.04.02 13:39)

О так ты о чистом BCD, там первый байт хранит значение о порядке, правила особые


 
kat   (2002-04-27 15:34) [20]

Не понятно стало малость
А как например 0.625 в 10-системе представить в 2-10системе?
А то я запуталась


 
MBo   (2002-04-27 15:40) [21]

это 0.101 в двоичной, а как в BCD нормализация и порядок делается, не знаю.


 
Anatoly Podgoretsky   (2002-04-27 15:48) [22]

625-E3
Я бы подсказал, как но нет под рукой документации, знаю, что это 10 байт структура и старший байт хранит информацию о порядке и знаке числа, вроде бы FPU это напрямую поддерживает, но возможно ошибаюсь



Страницы: 1 вся ветка

Текущий архив: 2002.05.13;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.011 c
1-39771
Vovchik
2002-04-28 13:12
2002.05.13
Хранение и изменение текстовых ресурсов в PE-файлах


4-39886
MJH
2002-03-10 12:29
2002.05.13
растягиваем


14-39858
IronHawk
2002-03-22 17:23
2002.05.13
Вот, возник гнуснейший вопрос !


1-39704
AFROLOV
2002-04-29 15:58
2002.05.13
Как на кнопке в design time сделать многострочную надпись


1-39784
albr
2002-04-26 23:20
2002.05.13
Открытые интерфейсы