Перемножаем, получаем 11111111111100002=6552010.
Переводим в ДД-код: 01100101010100100000.
Листинг файла Result.txt
=============================================
== К У Р С О В А Я Р А Б О Т А
==========================================
== по теме: СИСТЕМЫ СЧИСЛЕНИЯ
=================================
==ИСХОДНЫЕ ДАНЫЕ:
== Число 1 в дд коде:10010001
== Число 2 в дд коде:011100100000
==РЕЗУЛЬТАТ ВЫПОЛНЕНИЯ ДВОИЧНОГО УМНОЖЕНИЯ:
== Результат в дд коде: 01100101010100100000
Программа написана в среде Турбо Паскаль 7.0.
Минимальные системные требования: ограничиваются требованиями вышеуказанной среды программирования.
При написании программы были изучены основные методы, применяемые для работы над числами в различных системах счисления. Освоены способы табличного перевода чисел, а также нестандартный метод перевода из десятичной системы в двоичную, использующий особенности хранения данных в памяти ЭВМ, с помощью сдвига битов числа. Закреплены знания языка Паскаль.
Программа может служить примером элементарной обработки информации во внутремашинных кодах.
1. Искусство программирования для ЭВМ (3-тома). / Д . Кнут . , Питер.прес.,2001г.
2. Turbo Pascal 7.0.(том 1)/ Фаронов., Питер. Прес.,2000г.
program kurs;
type
TVal=0..2;
TBinArr=array [1..sizeOf(Word)*8] of byte;
{dec->bin}
function DecToBin(D:word):string;
var
i,size:byte;
Res:string;
begin
size:=sizeOf(Word)*8; {вычисляем количество битов в числе}
res:='';
for i:=size-1 downto 0 do
begin
case (D shr i) of
1:Res:=Res+'1'; {вставляем в запись числа}
0:Res:=Res+'0'; {слдедующий бит}
end;
D:=D-((D shr i) shl i); {вычитаем этот разряд}
end;
DEcToBin:=res;
end;
{bin -> dec}
Function BinToDec(B:string):word;
var
i,size:byte;
errcode:integer;
tek:word; {текущее слагаемое}
Res:word;
begin
size:=length(B); {вычисляем количество битов в числе}
Res:=0;
For i:=size downto 1 do
begin
val(B[i],tek,errCode); {вычисляем тек. слагаемое}
tek:=tek shl (size-i); {учитывая вес разряда }
res:=res+tek;
end;
BinToDec:=res;
end;
{дд код - десятичное чило}
Function BDToDec(BD:string):word;
var
i,size:byte;
res,raz:word;
tetrada:string[4];
begin
res:=0;
raz:=1;
size:=length(BD);
i:=size;
while i<>0 do
begin
tetrada:=copy(BD,i-3,4);
res:=res+raz*BinToDec(tetrada);
raz:=raz*10;
i:=i-4;
end;
BDToDec:=res;
end;
{десятичное число -> дд-код}
Function DecToBD(D:word):string;
var
n:byte;
res,tetrada:string;
begin
res:='';
while D<>0 do
begin
case D mod 10 of
0:tetrada:='0000';
1:tetrada:='0001';
2:tetrada:='0010';
3:tetrada:='0011';
4:tetrada:='0100';
5:tetrada:='0101';
6:tetrada:='0110';
7:tetrada:='0111';
8:tetrada:='1000';
9:tetrada:='1001';
end;
res:=tetrada+res;
D:=D div 10;
end;
DecToBD:=res;
end;
{двоичное умножение}
function BMult(B1,B2:string):string;
{подфункция для перевода из массива в строку числа в 2ой с-ме}
function ArrToStr(Arr:TBinArr):string;
var
i:byte;
res,ch:string;
begin
res:='';
for i:=1 to 16 do
begin
Str(Arr[i],ch);
res:=res+ch;
end;
ArrToStr:=res;
end;
{подфункция перевода строки с записью 2го числа в массив чисел}
procedure StrToArr(S:String;var Arr:TBinArr);
var i:byte;
errcode:integer;
begin
for i:=16 downto 1 do
if S[i]<>'' then val(S[i],Arr[i],errcode)
else Arr[i]:=0;
end;
var
BA1,BA2,ARes,tmp:TBinArr;
i,j,k,m,perenos,skip:byte;
s:string;
begin
StrToArr(B1,BA1); {загоняем в массив данные}
StrToArr(B2,BA2); {загоняем в массив данные}
k:=16;
for i:=k downto 1 do Ares[i]:=0; {обнуляем массив}
for i:=k downto 1 do
begin
for j:=k downto 1 do tmp[j]:=BA1[i]*BA2[j];
{складываем здесь то, что наумножали}
skip:=k-i; {с }
if skip>0 then {д }
begin {в }
s:=ArrToStr(tmp); {и р}
for j:=1 to skip do {г а}
begin { з}
delete(S,1,1); { р}
s:=s+'0'; { я}
end; { д}
StrToArr(S,tmp); { о}
end; { в}
perenos:=0;
for j:=16 downto 1 do
begin
ARes[j]:=Ares[j]+tmp[j]+perenos; {складываем одноименные разряды}
perenos:=0;
if ARes[j]>1 then {если сумма больше 1 то перенос в след. разряд}
begin
inc(perenos);
ARes[j]:=ARes[j]-2;
end;
end;
end;
BMult:=ArrToStr(ARes);
end;
Function RightData(dd:string):boolean;
var i:byte;
begin
if (length(dd) mod 4) <> 0 then begin RightData:=false;exit;end;
for i:=1 to length(dd) do
if not((dd[i]='0')or(dd[i]='1')) then begin RightData:=false;exit;end;
while dd<>'' do
begin
if BinToDec(copy(dd,1,4))>9 then begin RightData:=false;exit;end;
delete(dd,1,4);
end;
RightData:=true;
end;
Var
fdat,fres:text;
dd1,dd2:string;
bin1,bin2:string;
begin
Assign(fdat,'data.txt');reset(fdat);
Readln(fdat,dd1);
Readln(fdat,dd2);
close(fdat);
bin1:=DecToBin(BDToDec(dd1));
bin2:=DecToBin(BDToDec(dd2));
if not(RightData(dd1) or RightData(dd1)) then
begin
WriteLN('!!!ОШИБКА ДАННЫХ!!!');
readln;
exit;
end;
Assign(fres,'result.txt');rewrite(fres);
WriteLn(fres,'=============================================');
WriteLn(fres,'== К У Р С О В А Я Р А Б О Т А ');
WriteLn(fres,'==========================================');
WriteLn(fres,'== по теме: СИСТЕМЫ СЧИСЛЕНИЯ ');
WriteLn(fres,'======================================');
WriteLn(fres,'=================================');
WriteLn(fres,'==ИСХОДНЫЕ ДАНЫЕ: ');
WriteLn(fres,'== Число 1 в дд коде:',dd1);
WriteLn(fres,'== Число 2 в дд коде:',dd2);
WriteLn(fres,'=========================');
WriteLn(fres,'==РЕЗУЛЬТАТ ВЫПОЛНЕНИЯ ДВОИЧНОГО УМНОЖЕНИЯ: ');
WriteLn(fres,'== Результат в дд коде: ',DecToBD(BinToDec(BMult(Bin1,Bin2))));
WriteLn(fres,'==================');
close(fres);
end.
10010001
011100100000
=============================================
== К У Р С О В А Я Р А Б О Т А
==========================================
== по теме: СИСТЕМЫ СЧИСЛЕНИЯ
=================================
==ИСХОДНЫЕ ДАНЫЕ:
== Число 1 в дд коде:10010001
== Число 2 в дд коде:011100100000
==РЕЗУЛЬТАТ ВЫПОЛНЕНИЯ ДВОИЧНОГО УМНОЖЕНИЯ:
== Результат в дд коде: 01100101010100100000
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.