Einzelnen Beitrag anzeigen

ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Konvertierung Binär Dezimal

  Alt 8. Dez 2005, 17:35


...



...



...

Du wirst ein Array von Zahlen (0..9) anlegen müssen, in dem du die Berechnungen durchführst...


Delphi-Quellcode:
function binaraytostring(const bins:array of boolean):string;
var
  intarray:array of 0..9;
  value2add:array of 0..9;
  i,j,k,l,factor:integer;
  einsweiter:boolean;
  weiter:integer;
begin
  factor:=1;
  for i:=0 to length(bins)-1 do begin
    //in value2add den integerwert des bins speichern
    setlength(value2add,1);
    if bins[i]=true then
      value2add[0]:=1
    else
      value2add[0]:=0;
    //value2add multiplizieren
    for j:=2 to factor do begin
      for k:=length(value2add)-1 downto 0 do begin
        einsweiter:=value2add[k]>=5;
        value2add[k]:=(value2add[k]*2) mod 10;
        weiter:=(value2add[k]*2) div 10;
        l:=k+1;
        while einsweiter do begin
          if l=length(value2add) then
            setlength(value2add,l+1);
          if value2add[l]+weiter<10 then
          begin
            value2add[l]:=value2add[l]+weiter;
            einsweiter:=false;
          end else begin
            einsweiter:=true;
            value2add[l]:=value2add[l]+(weiter mod 10);
            weiter:=weiter div 10;
          end;
        end;
      end;
    end;
    //value2add zu intarray hinzufügen
    setlength(intarray,max(length(intarray),length(value2add)));
    for k:=length(value2add)-1 downto 0 do
    begin
        einsweiter:=value2add[k]+intarray[k]>=10;
        intarray[k]:=(value2add[k]+intarray[k]) mod 10;
        weiter:=(value2add[k]+intarray[k]) div 10;
        l:=k+1;
        while einsweiter do begin
          if l=length(intarray) then
            setlength(intarray,l+1);
          if intarray[l]+weiter<10 then
          begin
            intarray[l]:=intarray[l]+weiter;
            einsweiter:=false;
          end else begin
            einsweiter:=true;
            intarray[l]:=intarray[l]+(weiter mod 10);
            weiter:=weiter div 10;
          end;
        end;


    end;

    //stellenwert um 1 erhöhen
    factor:=factor+1;
  end;
  result:='';
  for i:=0 to length(intarray)-1 do
    result:=inttostr(intarray[i])+result;
end;
irgendwo is noch ein Fehler drin...

Beim verdoppeln von 16 kommt 22 raus...
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat