Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   umwandlung von dualzahlen zu dezimalzahlen (https://www.delphipraxis.net/72132-umwandlung-von-dualzahlen-zu-dezimalzahlen.html)

nullahnung 26. Jun 2006 10:22


umwandlung von dualzahlen zu dezimalzahlen
 
wir sitzen schon länger an einem projekt wo wir dualz. in dezimalz. umwandeln sollen und wir haben keine ahnung wie das geht :shock: vielleicht hat jemand eine ahnung wie das geht? :coder2:
es wäre schön wenn wir so schnell wie möglich hilfe bekommen.unser lehrer hat das nicht richtig erklärt und wir sollen das jetzt alleine machen denn er ist krank :kotz:

Mavarik 26. Jun 2006 10:28

Re: umwandlung von dualzahlen zu dezimalzahlen
 
Hi!

Villeicht habe ich in der Schule nicht aufgepasst?! :gruebel:

Was sind Dualz. 01010001 ??? Binär???? :drunken:

Frank :coder:

pszopp 26. Jun 2006 10:44

Re: umwandlung von dualzahlen zu dezimalzahlen
 
Wilkommen in der DP,

Ich gehe mal davon aus, dass die Dual-Zahl als String vorliegt:

Delphi-Quellcode:
uses Math

...

function BinToInt(const BinStr : String) : Integer;
var lk : Integer;
begin

  Result := 0;
  for lk := length(BinStr) downto 1 do begin
    if (BinStr[lk] = '1') then
      Result := Result + Round(Power(2, (length(BinStr) - lk)));
  end; // for lk

end; // BinToInt
Dieses kleine Code-Schnipsel durchläuft die Binäre Zahl von rechts nach links.
Wenn eine eins gefunden wird, wird das Ergebis um die passende Deziamlzahl erhöht.


Viele Grüße,
pszopp

TheAn00bis 26. Jun 2006 10:45

Re: umwandlung von dualzahlen zu dezimalzahlen
 
Ja, Dualzahlen sind Binärzahlen.

Die Umwandlung ist eigentlich ganz einfach. Die erste Stelle von rechts steht für 2^0, die nächste für 2^1, dann für 2^2 usw.
Daher musst du nur überprüfen, ob an dieser Stelle eine 1 steht oder eine 0, dementsprechend addierst du das 2^x zum bereits errechneten.

Ich hab einfach mal eine kleine Funktion geschrieben, die das (glaube ich) richtig macht:

Delphi-Quellcode:
function DualnachDez(pDualZahl: String): Integer;
var i: integer;
begin
  result := 0;
  for i:=length(pDualZahl) downto 1 do
    if pDualZahl[i] = '1' then
      result:=result+trunc(Power(2,length(pDualZahl)-i));
end;
edit: Hehe, etwas zu spät. Lustig, wie ähnlich die Funktionen sind.
Pszopp, Power gibt einen extended-Typ zurück, du musst also noch "trunc" hinzufügen.

edit2: Auf Hinweis von Pszopp geändert. Danke. :)

Mavarik 26. Jun 2006 10:51

Re: umwandlung von dualzahlen zu dezimalzahlen
 
Viel einfacher!

Delphi-Quellcode:
  B := 0;
  For i:=1 to length(S) do
    begin
      B := B shl 1;
      if S[i] = '1' then
        B := B or 1;
    end;
Grüsse Frank :coder:

PS.: Sehe schon alles keine ASM programmierer hier! :zwinker:

pszopp 26. Jun 2006 10:53

Re: umwandlung von dualzahlen zu dezimalzahlen
 
Zitat:

Zitat von TheAn00bis
Pszopp, Power gibt einen extended-Typ zurück, du musst also noch "trunc" hinzufügen.

Hast Recht, schon korrigiert.
Dein Exponent in der Power-Funktion scheint falsch zu sein :spin:

TheAn00bis 26. Jun 2006 11:40

Re: umwandlung von dualzahlen zu dezimalzahlen
 
Zitat:

Zitat von pszopp
Dein Exponent in der Power-Funktion scheint falsch zu sein :spin:

Danke, geändert.

Zitat:

Zitat von Mavarik
Viel einfacher!

Delphi-Quellcode:
  B := 0;
  For i:=1 to length(S) do
    begin
      B := B shl 1;
      if S[i] = '1' then
        B := B or 1;
    end;

Das sieht interessant aus, aber verstehen tue ich es nicht. Würdest du das mal erklären?
Die Informationen der Hilfe über "shr" und "or" bringen mich nicht weiter.

morri 26. Jun 2006 12:01

Re: umwandlung von dualzahlen zu dezimalzahlen
 
shl und shr und or bearbeiten eine integerzahl bitweise.

or fügt also beispielsweise der dez. zahl 3 (=11) ein einser bit hinzu. also: 111 (=dez. 7)

Mavarik 26. Jun 2006 12:09

Re: umwandlung von dualzahlen zu dezimalzahlen
 
Zitat:

Zitat von TheAn00bis
Das sieht interessant aus, aber verstehen tue ich es nicht. Würdest du das mal erklären?
Die Informationen der Hilfe über "shr" und "or" bringen mich nicht weiter.

Ganz einfach...

Ein shl !!! nicht shr!!!

Ein shl ist ein binäres schieben der Bits nach links ohne CarryFlag und ohne Übertrag ins 0-te bit...

und bewirkt ein MUL 2.

Ein or 1 setzt einfach das 0-te bit auf 1. Somit wird, wenn im String eine 1 ist das Bit gesetzt und vor dem
nächsten setzen nach links geschoben... ggf. Müsste abgeprüft werden ob der String nicht länger als 8 für bytes
bzw. 16 für Words... Je nach Datentyp...

Ich würde sagen schneller geht es nicht... kein Trunc kein Powser ...

Grüsse Frank :coder:

Mavarik 26. Jun 2006 12:12

Re: umwandlung von dualzahlen zu dezimalzahlen
 
Zitat:

Zitat von morri
shl und shr und or bearbeiten eine integerzahl bitweise.

or fügt also beispielsweise der dez. zahl 3 (=11) ein einser bit hinzu. also: 111 (=dez. 7)

Nööö

X := 3;

X := X or 1;

X = 3;

Frank :coder:

morri 26. Jun 2006 12:15

Re: umwandlung von dualzahlen zu dezimalzahlen
 
ja ok.
war jetzt eher auf das Beispiel bezogen. Da stand noch ein shl davor!

Sorry.
Ohne macht es bei 3 kein sinn.

Mavarik 26. Jun 2006 12:22

Re: umwandlung von dualzahlen zu dezimalzahlen
 
Zitat:

Zitat von morri
ja ok.
war jetzt eher auf das Beispiel bezogen. Da stand noch ein shl davor!

Sorry.
Ohne macht es bei 3 kein sinn.

Achso.... OK wollte nur ausschliessen, dass ein or ein Bit "einfügt"

Frank

bit4bit 26. Jun 2006 16:53

Re: umwandlung von dualzahlen zu dezimalzahlen
 
Hallo allerseits,

ich wollte nur mal darauf aufmerksam machen, dass nullahnung folgendes Problem haben:
Zitat:

... wir sitzen schon länger an einem projekt wo wir dualz. in dezimalz. umwandeln sollen
Ihr habt da aber alle ne völlig andere Baustelle aufgemacht!

Wenn ich das richtig sehe, müssen die nullahnungs z.B. aus der Dualzahl String "100110101" den String mit der entsprechenden Dezimalzahl "309" erzeugen.

Ich denke mal, dass die Benutzung der Delphi Funktion zur Ausgabe einer Variable wohl nicht als Lösung im Sinne der gestellten Aufgabe gelten dürfte , oder ?

TheAn00bis 26. Jun 2006 17:03

Re: umwandlung von dualzahlen zu dezimalzahlen
 
Danke, Mavarik! Ist eigentlich wirklich genial, man bearbeitet den Integer praktisch einfach auf Dual-Ebene. Ist nicht nur die schnellste Variante sondern - einmal verstanden - auch die logischste.


@bit4bit: Ich sehe das Problem nicht, aber wenn Nullahnung seine Frage als nicht beantwortet sieht wird er bestimmt noch einmal nachfragen. :)

nullahnung 26. Jun 2006 18:56

Re: umwandlung von dualzahlen zu dezimalzahlen
 
hey danke für die vielen antworten und tipps werde versuchen diese schon mal umzusetzten hoffe ich komme weiter. :-D

morri 27. Jun 2006 09:02

Re: umwandlung von dualzahlen zu dezimalzahlen
 
Zitat:

Wenn ich das richtig sehe, müssen die nullahnungs z.B. aus der Dualzahl String "100110101" den String mit der entsprechenden Dezimalzahl "309" erzeugen.

Ich denke mal, dass die Benutzung der Delphi Funktion zur Ausgabe einer Variable wohl nicht als Lösung im Sinne der gestellten Aufgabe gelten dürfte , oder ?
Kannst du mir kurz erklären, was du uns sagen willst?

Wenn ich wirklich eine function bauen will ist das doch jetzt auch kein Problem mehr.
Einfach den Quelltext in eine Function einbauen und das ergebnis zurückgeben
:gruebel:

DP-Maintenance 27. Jun 2006 13:56

DP-Maintenance
 
Dieses Thema wurde von "sakura" von "Projekte" nach "Sonstige Fragen zu Delphi" verschoben.
Ist ja kein Projekt im Sinne der DP-Sparte ;)

bit4bit 27. Jun 2006 20:11

Re: umwandlung von dualzahlen zu dezimalzahlen
 
@ morri

Also die Fragestellung

Zitat:

... wir sitzen schon länger an einem projekt wo wir dualz. in dezimalz. umwandeln sollen ...

verstehe ich so, dass eine Dualzahl in eine Dezimalzahl umgewandelt werden soll.

Eine Dualzahl besteht aus einer Reihe von Ziffern die "0" oder "1" sein können.

Eine Dezimalzahl besteht aus einer Reihe von Ziffern die "0" bis "9" sein können.

Alle bisherigen Lösungen erzeugen aus einem String von Nullen und Einsen den Wert dieser Dualzahl, der entweder in einer Floating Point oder in einer Integer Variable abgespeichert wird.

Der Wert einer Zahl ist weder dual noch dezimal, es ist einfach ein Wert.

Die interne Darstellung eines Wertes in einer Integer oder Floating Point Variablen benutzt eine Reihe von Bits, die jeweils zwei verschieden Zustände annehmen können. Diese beiden möglichen Zustände repräsentieren die Nullen bzw. Einsen einer Dualzahl.

Um jetzt den Wert einer Variablen als Dezimalzahl zu erhalten, muss also ein String von Ziffern zwischen "0" und "9" erzeugt werden.

Mit den Funktionen IntToStr und FloatToStr lässt sich ein Wert in einen String umwandeln, der eine Dezimalzahl darstellt.

Die Aufgabe lautet IMHO aber, diese Umwandlung in einen solchen String durchzuführen ohne die Funktionen IntToStr und FloatToStr zu benutzen.

Kann natürlich nur der Lehrer von Nullahnung entscheiden ...

Mavarik 28. Jun 2006 09:21

Re: umwandlung von dualzahlen zu dezimalzahlen
 
Wohl eher nicht.... :warn:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 Uhr.

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