Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2010, 20:34   #1
Ам тя
=)
Пользователь
 
Аватар для Ам тя
 
Регистрация: 27.10.2009
Сообщений: 56
По умолчанию д-код.умножение

мне нужно сделать умножение в д коде
дается 80 бит
перевод,принт д,суматтор работает
помоги с остальным =)
помогите пожалуйста
Код:
PROGRAM inf_kur;
uses crt;
type
    tbcd=array[1..10] of byte;
 var result:tBCD;
 bcd,ss:tbcd ;
  x,y,s3,s4:byte ;
s1,s2:string;
bcd1,bcd2,bcd3:tbcd;
 ch:char;
 s:string;
 error,i,j:byte;
 sizeStr:byte;

function convert(ch:char):byte;
 begin
   if (ch>='0')and(ch<='9') then
     convert:=ord(ch)-48

  end;
   {$F+}
{перевод числа в д}
procedure InputBcd(s:string;var bcd:Tbcd;var error:byte);


var st:string;
    i,sizeStr:byte;


begin
     SizeSTR:=length(s);	
   
     for I:=1 to 10 do
         bcd[i]:=0;
  
    if (s[1]<>'-') and (s[1]<>'+') then {*Ґ §**Є}
     begin
     
         s:='+'+s;
         inc(sizeStr);
     end;
     error:=0; 

     for i:=2 to sizeStr do  
         if (s[i]<'0') or (s[i]>'9') then
         begin
          error:=1;
        
          end;

     if SizeStr>=20 then begin
     error:=2;{length(S)>=MAX BCD}
   
     end;

     if error=0 then {convert}
     begin
            if sizeStr mod 2=0 then
            begin
                 st:=s[1]+'0';
                 for i:=2 to sizeStr do
                     st:=st+s[i];
                 s:=st;
                 inc(sizeStr);
            end;{mod2}
            {convert}
            for i:=1 to ((SizeStr) div 2) do
            begin
                bcd[i]:= convert(s[SizeStr-1])shl 4 or  convert(s[sizeStr]);
                dec(sizeStr,2);
            end;
 
            if s[1]='-' then bcd[10]:=bcd[10]or 128;
     end;{convert}
end;{InputBCD}
{вывод в формате д}
procedure printBCD(BCD:tbcd);

{ for print BCD}

var i,j:byte;
begin
writeLn(' N|',' ':5 ,' Lo',' ':3,' | ',' ':5,'hi',' ');
	for i:=1 to 10 do
	begin
		write(i:2);
		for j:=0 to 7 do
		begin
		 if j mod 4 = 0 then	write('|');
		 write(' ':2{,(1 shl j):2,});
		 write(ord(bcd[i] and (1 shl j)=(1shl j)));
		end;
		 writeln;
	end;{for elem arr}
end;{print}

{если число не нормальное..приводим его в соответствующий вид}
procedure normbcd1;
var lo,i,p,hi:byte;
 begin
 p:=0;
     for i:=1 to 10 do
     begin
          lo:=p+(bcd1[i] mod 16);
          if lo>9 then
          begin
               p:=1;
               lo:=lo-10;
          end else p:=0;
          hi:=p+(bcd[i] div 16);
          if hi>9 then
          begin
          p:=1;
          hi:=hi-10;
          end else p:=0;
          bcd[i]:=hi*16+lo;
          end;


end;
{для второго числа хз пока}
{procedure normbcd2;
begin
end; }

 procedure cdvigi;
  begin
 bcd1[i]:=sizestr shl 1;
    bcd2[i]:=sizestr shr 1;

end;

{summator}
procedure summator(bcd1,bcd2:Tbcd; var BCD:Tbcd);
var i,lo,hi,p:byte;
begin
   P:=0;
	 for i:=1 to 10 do
	 begin
		 Lo:=p+(Bcd1[i] mod 16);
		 Lo:=lo+(bcd2[i] mod 16);
		 if lo>9 then
		 begin
			 p:=1;
			 lo:=lo-10;
		 end else p:=0;
		 hi:=p+bcd1[i] div 16;
		 hi:=hi+bcd2[i] div 16;
		 if hi>9 then
		 begin
			 p:=1;
			 Hi:=Hi-10;
		 end else p:=0;
		 bcd[i]:=Hi*16+lo;
	 end;
end;{summator}
{тут тип умножение..но как сделать тоже хз}
procedure we;
 var lo :array[1..4] of byte ;
 j:byte;
 begin
 for I:=1 to 10 do begin
     for j:=1 to 4 do
         if lo[i]:=1 then begin
            summator(bcd1,bcd2,bcd3);
            cdvigi;
            normbcd1;
            else
            cdvigi;
          end;
  end;

 end;


procedure vyvod;
begin

  writeln('BBeguTe 4ucJla gJl9l yMHo}I{eHu9l');
  writeln('x=');

  readln(s);
  s1:=s;
  bcd1:=bcd;

  InputBcd(s1,bcd1,error);
  if (error<>1) and (error<>2) then   begin
     printBCD(bcd1);
     writeln('y=');

     readln(s);
     s2:=s;
     bcd2:=bcd;

     InputBcd(s2,bcd2,error);
     if (error<>1) and (error<>2) then
        printBCD(bcd2)

     else  begin
           if error=1 then
              writeln('HekoppeTHoe 4ucJIo');
           if error=2  then
              writeln('gJIuHoe 4ucJIO');
           end;
  end
  else  begin
   if error=1 then
     writeln('HekoppeTHoe 4ucJIo');
   if error=2  then
     writeln('gJIuHoe 4ucJIO');
  end;
  {we;} 
 end;
 {---------------------------------}
 

 begin
vyvod
 end.
Ам тя вне форума Ответить с цитированием
Старый 20.10.2010, 19:01   #2
Ам тя
=)
Пользователь
 
Аватар для Ам тя
 
Регистрация: 27.10.2009
Сообщений: 56
По умолчанию

помогите пожалуйста
Ам тя вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Умножение panuta Microsoft Office Excel 3 31.05.2010 17:42
Умножение фантомаз Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 20.05.2010 11:40
Умножение KoBRaAndrey Общие вопросы Delphi 4 03.10.2009 12:23
умножение PAWLO1993 Паскаль, Turbo Pascal, PascalABC.NET 4 29.07.2008 18:55
Умножение и деление StiTch_Parazit Помощь студентам 10 20.05.2008 14:32