Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   der zahl-in-bits-umwandler (https://www.delphipraxis.net/91688-der-zahl-bits-umwandler.html)

dajuhsa 8. Mai 2007 17:52


der zahl-in-bits-umwandler
 
Liste der Anhänge anzeigen (Anzahl: 1)
hi, ich hab hier mal ein kleines programm geschrieben um kleine und mittlere Zahlen in Zahlen der Zweierreihe, also in bits umzuwandeln. z.B. 13 zu 1101.
Sobald einer irgendeinen nutzwert feststellt soll er es mir bitte sagen :nerd:

Delphi-Quellcode:
procedure TForm2.MaxBestimmen(Zahl:integer);
begin
 if Zahl<2 then begin max := 1;anz:=1 end
 else
 if Zahl&lt;4 then begin max := 2;anz:=2 end
 else
 if Zahl&lt;8 then begin max := 4;anz:=3 end
 else
 if Zahl&lt;16 then begin max := 8;anz:=4 end
 else
 if Zahl&lt;32 then begin max := 16;anz:=5 end
 else
 if Zahl&lt;64 then begin max := 32;anz:=6 end
 else
 if Zahl&lt;128 then begin max := 64;anz:=7 end
 else
 if Zahl&lt;256 then begin max := 128;anz:=8 end
 else
 if Zahl&lt;512 then begin max := 256;anz:=9 end
 else
 if Zahl&lt;1024 then begin max := 512;anz:=10 end
 else
 if Zahl&lt;2048 then begin max := 1024;anz:=11 end
 else
 if Zahl&lt;4096 then begin max := 2048;anz:=12 end
 else
 if Zahl&lt;8192 then begin max := 4096;anz:=13 end
 else
 if Zahl&lt;16384 then begin max := 8192;anz:=14 end
 else
 if Zahl&lt;32768 then begin max := 16384;anz:=15 end
 else
 if Zahl&lt;65536 then begin max := 32768;anz:=16 end
 else
 if Zahl&lt;131072 then begin max := 65536;anz:=17 end
 else showmessage('die Zahl ' + inttostr(Zahl) + ' ist zu hoch, geben sie eine Zahl zwischen 1 und 131071 ein')
end;

procedure TForm2.Button1Click(Sender: TObject);var j:integer;
begin
FormCreate(Sender);
MaxBestimmen(StrToInt(Edit1.Text));
Wert := StrToInt(Edit1.Text);
BitsBestimmen;
for j:= 1 to 17 do begin
 if j = 1 then Edit1.Text := '';
 Edit1.Text := Edit1.Text + Bit[j]
end;
end;

procedure TForm2.BitsBestimmen; var i: integer;
begin
 for i := 1 to anz do begin
  if wert>=max then begin Bit[i] := '1';dec(wert,max) end
  else Bit[i] := '0';
  if max&gt;1 then max := max div 2
 end;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
i := 1;
j := 1;
Bit[1] := '';
Bit[2] := '';
Bit[3] := '';
Bit[4] := '';
Bit[5] := '';
Bit[6] := '';
Bit[7] := '';
Bit[8] := '';
Bit[9] := '';
Bit[10] := '';
Bit[11] := '';
Bit[12] := '';
Bit[13] := '';
Bit[14] := '';
Bit[15] := '';
Bit[16] := '';
Bit[17] := '';
max:=0;
wert:=0;
end;

procedure TForm2.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if Key = 13 then Button1Click(Sender)
end;

CCRDude 8. Mai 2007 17:55

Re: der zahl-in-bits-umwandler
 
Ungerade Anzahlen von Bits hab ich noch nie wirklich verwendet gesehen, die kleinste Einheit dürften Nibbles (4 bit) sein. Außerdem, wofür gibts Schleifen?

Delphi-Quellcode:
function ByteToBits(const ByteValue: byte): string;
var i: integer;
begin
   Result := '';
   for i := 7 downto 0
    do if (ByteValue and (1 shl i))>0
     then Result := Result + '1'
      else Result := Result + '0';
end;

markusj 8. Mai 2007 18:00

Re: der zahl-in-bits-umwandler
 
Hi fast-Nachbar *gg*,

Um ehrlich zu sein: der Code hat Null Nutzwert ... es gibt deutlich effektivere Varianten, such mal nach Bits, zerlegen und Byte ... afair kommt der Code von negaH und ist a) kürzer und b) schneller:
Ich hätte ja gesagt, lass uns mal bei nem Bier darüber reden, aber naja, ...

Ich finds gerade net, also der Auszug aus meinem Projekt:
Delphi-Quellcode:
type TBits = array[1..8] of boolean;
Delphi-Quellcode:
function ByteToBits(input : byte) : TBits;
  var i : byte;
  begin
  i := 1;
  while input <> 0 do
   begin
   result[i] := odd(input);
   inc(i);
   input := input shr 1;
   end;
  while i <= 8 do
   begin
   result[i] := false;
   inc(i);
   end;
  end;
WICHTIG: TBits verträgt sich nicht mit dem TBits aus der VCL!

mfG
Markus

PS: Du kannst das ganze durch ändern der Variablen und Schleifendurchläufe auch auf Zahlen > Byte anwenden

dajuhsa 8. Mai 2007 19:08

Re: der zahl-in-bits-umwandler
 
is eigentlich auch nicht wirklich als nützlich gedacht, aber ich bin halt net so ein guter programmierer und wollte mal wissn wie ihrs findet :)

markusj 8. Mai 2007 20:44

Re: der zahl-in-bits-umwandler
 
Ich sags mal so ... es is ne nette Übung für Fallunterscheidungen, jetzt könntest du mal zu schleifen übergehn *g*

mfG
Markus

dajuhsa 18. Mai 2007 19:41

Re: der zahl-in-bits-umwandler
 
wenn du die letzten paar zeilen meinst, wo alles in '' geändert wird:
ich hätte ja ne schleife gemacht, aber ich hatte lust 'n Büschn was zu schreiben :bouncing4: :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz