Показать сообщение отдельно

  #7  
Старый 16.12.2009, 20:30
StealthMaster
Познающий
Регистрация: 03.12.2008
Сообщений: 56
Провел на форуме:
140714

Репутация: 29
По умолчанию

Цитата:
Сообщение от MRAK9  
помогите пожалуйста.....
может у кого-нить есть полный двоичный сумматор на delphi?
срочно надо.....
Код:
function CheckNumber(Number: string): boolean;
var
  i: integer;
begin
  Result := false;
  for i := 1 to length(Number) do
    case Number[i] of
      '0','1':;
      else
        exit;
    end;
  Result := true;
end;


function BinaryAdd(N1, N2: string): string;
var
  tmp1, tmp2:   byte;
  i:            integer;
  flag:         boolean;
begin
  // зададим начальные параметры
  Result := '';
  flag := false;

  // если в строках не только 0 и 1
  if (not(CheckNumber(N1))) or (not(CheckNumber(N2))) then
    exit;

  // сделаем обе строки одинаковой длины, дополнив одну из них нулями
  tmp1 := length(N1);
  tmp2 := length(N2);

  if (tmp1 > tmp2) then
    for i := 1 to (tmp1 - tmp2) do
      N2 := '0' + N2;

  if (tmp1 < tmp2) then
    for i := 1 to (tmp2 - tmp1) do
      N1 := '0' + N1;

  // будем посимвольно обрабатывать строки
  for i := length(N1) downto 1 do
    begin
      tmp1 := StrToInt(N1[i]) + StrToInt(N2[i]);;
      if flag then
        inc(tmp1);

      tmp2 := tmp1 mod 2;
      Result := IntToStr(tmp2) + Result;

      tmp2 := tmp1 div 2;
      if (tmp2 = 0) then
        flag := false
      else
        flag := true;
    end;

  // если осталась неперенесенная единица
  if flag then
    Result := '1' + Result;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  tmp: string;
begin
  tmp := BinaryAdd(edit1.Text, edit2.Text);
  ShowMessage(tmp);
end;

Последний раз редактировалось StealthMaster; 16.12.2009 в 20:33..
 
Ответить с цитированием