Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.005 c
14-39842
Sergo
2002-04-04 10:45
2002.05.13
Как сделать?


1-39729
Stexen
2002-04-26 23:06
2002.05.13
зВУУУУКККККККККККККККККККК


1-39753
Deus
2002-04-27 13:14
2002.05.13
TWebBrowser - как сохранить файл?


1-39762
Vyatcheslav
2002-04-26 09:29
2002.05.13
Ищу компонент


3-39663
Элизабет
2002-04-17 16:46
2002.05.13
Дата1-дата2 в select





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский