Autor Beitrag
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Mi 20.02.08 16:57 
(a)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button1Click(Sender: TObject);
var
  a ,b : integer;
  c : extended;
  s : string;
begin
  s := Edit1.Text;
  a := Length(s);
  C := 0;
  for b := 1 to a do
    begin
      c := c + StrToInt(s[b]) * power(2 , (-1 + b) );
    end;

 label3.caption := 'Ergebnis : ' + FloatToStr(c);
end;

sollte Dein Problem beheben
(b) Power (2,X) läßt sich ganzzahl-Ebene mit 1 shl x einfacher und schneller erledigen, daraus folgt
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button1Click(Sender: TObject);
var
  a ,b, c : integer;
begin
  a := Length(Edit1.Text);
  c := 0;
  for b := 0 to a-1 do
    if Edit1.Text[a+1]='1' then Inc(c,1 shl b); 

 label3.caption := 'Ergebnis : ' + IntToStr(c);
end;

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!


Zuletzt bearbeitet von Kroko am Mi 20.02.08 16:59, insgesamt 2-mal bearbeitet
mhxcm
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 54



BeitragVerfasst: Mi 20.02.08 16:57 
user profile icon-Nala- hat folgendes geschrieben:
Andersherum ist allerdings viel mehr schreibarbeit...

Angenommen wir haben die Dezimalzahl : 38

Dann würde ich mir zuerst eine liste machen in der ich die ganzen 2^... ergebnissen :
2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64

da hör ich auf mit der liste .. da die 64 größer ist als die 38

Also weiß ich schonmal, dass unsere zahl 6 stellen hat...

ich fange also an : 1(für 2^5)
(ich rechne : 38 - 32 = 6)
es geht weiter: 1(für 2^5) 0 (für 2^4, da die 16 noch zu groß ist) 0 (für 2^3, da die 8 noch zu groß ist) 1 (für 2^2)
(ich rechne : 6 - 4 = 2)

es geht weiter: 1(für 2^5) 0 (für 2^4, da die 16 noch zu groß ist) 0 (für 2^3, da die 8 noch zu groß ist) 1 (für 2^2)
1(für 2^1)
(ich rechne : 2 - 2 = 0) -> alle restlichen stellen sind 0.

letzendlich ist die Binärzahl = 100110

ziemlich kompliziert...


Nur mal so nebenbei, auf em Papier würde ich das so rechnen:

38 / 2 = 19 Rest 0
19 / 2 = 9 Rest 1
9 / 2 = 4 Rest 1
4 / 2 = 2 Rest 0
2 / 2 = 1 Rest 0
1 / 2 = 0 Rest 1

wenn du jetzt den Rest von unten nach oben liest hast du deine Binärzahl... klappt hundertpro immer ;)

mfg

_________________
1100101 heißt ich Liebe dich ich möchte bei dir sein! (search Song:"Das Modul - 1100101") ;)
-Nala- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: Mi 20.02.08 21:08 
@Kroko:

Ich habe es mit deinem ersten Quelltext versucht. Gebe ich aber die Zahl 10 oder irgendeine Zahl mit einer 0 am Ende ein so ist das ergebnis immer 1.
Wie kann man diesen Fehler beheben ?
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Mi 20.02.08 21:21 
oh Mist, verkehrt herum den String durchlaufen,
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Button1Click(Sender: TObject);
var
  a ,b, c, h : integer;
begin
  a := Length(Edit1.Text);
  c := 0;
  H := 1;
  for b := a downto 1 do
  begin
    if Edit1.Text[b]='1' then Inc(c,h);
    H := H shl 1// H*2 
  end
 label3.caption := 'Ergebnis : ' + IntToStr(c);
end;

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
-Nala- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: Mi 20.02.08 23:21 
Ja! Es funktioniert :D.
Vielen Dank !

Wenn ich das Programm jetzt auch noch so haben möchte, dass es außerdem noch von Dezimal nach Binär rechnen Kann, wie muss ich das einbinden? Kann man das wieder durch so eine For-Schleife machen ?
Wenn ja wie ?
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Do 21.02.08 08:45 
Dez+Dez = dez -umwandeln nach binär

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
-Nala- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: Do 21.02.08 19:53 
??? das versteh ich nich ...
Kannst du mir das nochmal genauer erklären?
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Do 21.02.08 20:31 
Einmal nach Suche bei Google INTTOBIN googeln, und das erste Ergebnis nehmen:

BinToInt und IntToBin in den Delphi-FAQsen

Da der Server aber anscheinend öfters Probleme hat ;) hier nochmal der Quelltext:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
function IntToBin(i: Int64): String;
var x: Integer;
begin
  if i > 0 then
  begin
    Result := '';
    x := 1;
    while i >= x do
    begin
      Result := IntToStr((i and x) div x) + Result;
      x := x shl 1;
    end;
  end
  else
    result := '0';
end;

function BinToInt(b: String): Int64;
var x, lg: Integer;
begin
  b := Trim(Copy(b, Length(b) - 6364));
  lg := Length(b);
  Result := 0;
  for x := lg downto 1 do
    Result := Result + (StrToInt(b[x]) shl (lg - x));
end;

Anmerkung: Der Text ist etwas umformuliert. Ganz zufrieden bin ich zwar immer noch nicht, aber die Variablennamen wollte ich jetzt nicht auch noch ändern ;)
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Fr 22.02.08 07:42 
hi
Da will ich auch mal meinen Senf zu geben....
Du möchtest eine integer nach binär haben, dann bau eine Funktion.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
Function TMyForm.IntToBinSTR(Zahl : Integer): String// der kommt in ein Editfeld
Var CalcWert : Integer;
    ReWert   : String;
Begin
  Rewert:='';
  CalcWert:=Zahl;
  Repeat // Schleifenbeginn
    If (CalcWert=Trunc(Calcwert/2)*2then Rewert:='0' +Rewert
    else Rewert:='1' +Rewert // String baut von hinten nach vorn auf
    Rewert:=Trunc(Rewert/2);
  until Rewert:=0;
  While Length(Rewert)  <8 then ReWert:='0'+Rewert;// auffüllen für vollständiges Byte
  Result:=ReWert;
End;

Dahinter steckt einfach nur die Teilung einer Zahl durch 2, wie bereits schon irgendwo erklärt. Der Rest aus dieser Division, 1 oder 0. wird in den Bytestring eingetragen und die Teilung solange wiederholt, bis das Ergebnis 0 ist. Das Auffüllen erfolgt nur, weil bei einer Zahl 2 z. b. das Ergebnis nur '10' wäre, ein Byte hat jedoch 8 Bit. Bei einem Word muß die Größe auf 16 Bit entsprechend angepaßt werden. Sieht halt schöner aus.
Der Aufruf
Edit1.Text:=IntToBinStr(2);
sollte '00000010' für ein Byte ergeben.
Gruß oldmax

_________________
Zier dich nich so, ich krieg dich schon....
-Nala- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: Fr 22.02.08 13:25 
Vielen Dank für die vielen Antworten !
Nun läuft das Programm :D:D

hier könnt ihr es herunterladen :

www.file-upload.net/...-rumwandler.exe.html