AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Konversion von dezimal zu binär

Ein Thema von diavy · begonnen am 31. Mai 2012 · letzter Beitrag vom 2. Jun 2012
Antwort Antwort
Seite 2 von 3     12 3      
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Konversion von dezimal zu binär

  Alt 1. Jun 2012, 00:57
Außerdem ist k für 32 Digits > MaxInt
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.064 Beiträge
 
Delphi XE2 Professional
 
#12

AW: Konversion von dezimal zu binär

  Alt 1. Jun 2012, 02:29
Das ist aber kein fair play: Du machst Dir die Tatsache zunutze, dass die Dezimalzahl intern ohnehin schon als Binärzahl konvertiert vorliegt. Du konvertierst nicht die Dezimalzahl in eine Binärzahl, sondern liest die bereits vorhandenen Bits der Binärdarstellung aus. Ich glaube nicht, dass das im Sinne des Aufgabenstellers ist.

Trotzdem geht es natürlich auch ohne die Power Funktion, man muss dazu nur die Zahl wiederholt durch zwei dividieren und die aufeinanderfolgenden Divisionsreste zu einem Binärzahlenstring zusammenhängen.
Das ist aber eine merkwürdige Argumentation.
Alle Daten ob Strings, Integers, oder Extended-Werte sind letztendlich binäre Daten.
Wenn jemand sein Wissen darüber nutzt, um zu einer Lösung zu kommen, dann ist das nicht unfair sondern vernünftig.

Der TE hatte ja seine "number" als Extended deklariert.

Die unten stehende Funktion nutzt die binäre Darstellung im Extended-Wert um ohne weitere Umwege den Extended in einen Binärstring umzuwandeln.
Sie ist für Werte von 0 bis 2^64-1 ausgelegt.
Bei Werten außerhalb dieses Bereiches wird eine Exception ausgelöst.

Ich hab die Funktion "auf die schnelle" geschrieben und nicht wirklich voll ausgetestet. Bitte keine Schimpfe wenn da Bugs drin sind.
Delphi-Quellcode:
FUNCTION ExtendedToBin(const v:extended):string;
type
   TExt=packed record M:UInt64; E:word; end;
const
   Bias=$3FFF; Sign=$8000; MaxE=Bias+63;
   sErr='Fehler bei Umwandlung in Binärstring.';
var
   e:word; i:integer;
begin
   e:=TExt(v).E;
   if e>0 then begin
      if (e>=Sign) or (e<Bias) or (e>MaxE) then raise Exception.Create(sErr);
      dec(e,Bias);
      if (e<63) and (((UInt64(1) shl (63-e) - 1) and TExt(v).M)<>0) then
         raise Exception.Create(sErr);
   end;
   SetLength(result,e+1);
   for i:=1 to e+1 do
      result[i]:=Chr($30 or Ord(TExt(v).m and (UInt64(1) shl (64-i))<>0));
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....

Geändert von Amateurprofi ( 1. Jun 2012 um 04:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

AW: Konversion von dezimal zu binär

  Alt 1. Jun 2012, 04:12
Vorneweg, ich habe delphi 6, da war die math.pas nicht dabei.
Aber die dcu musst dabei sein und mehr brauchst du nicht.

Zitat:
da die Funktion n^i nicht funktionniert hat
"Funktioniert nicht" ist keine ausreichende Fehlerbeschreibung.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#14

AW: Konversion von dezimal zu binär

  Alt 1. Jun 2012, 05:06
Das ist aber kein fair play: Du machst Dir die Tatsache zunutze, dass die Dezimalzahl intern ohnehin schon als Binärzahl konvertiert vorliegt.
Was hat das mit Fair Play zu tun? Selbst wenn die Zahl als Banane vorliegt und uns die braunen Flecken den Binärwert verraten, dann ist es eben so. Das einzige was ich gelesen habe ist, dass er es konvertieren will. Wenn er das über Wuppertal konvertieren will, dann soll er es vorher sagen.
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.064 Beiträge
 
Delphi XE2 Professional
 
#15

AW: Konversion von dezimal zu binär

  Alt 1. Jun 2012, 05:10
Und wegen dem "kompliziert":
Können sich auch ein paar Nachteile (Rechenfehler) ergeben, wenn man "Binäroperationen" (Auslesen der Bits für einen "Integer") über Fließkommazahlen und -Fließkommaperationen abwickelt (Extended), wo es diese gewünschten "Bits" so eigentlich nicht gibt.
Oh, doch, die gibt es.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#16

AW: Konversion von dezimal zu binär

  Alt 1. Jun 2012, 07:30
wo es diese gewünschten "Bits" so eigentlich nicht gibt.
Oh, doch, die gibt es.
"So" gibt es sie "eigentlich" nicht.
Sie existieren nur in der Phantasie der floating Points, wobei sich die Funktion 'Power' Mühe gibt, ihre Phantasiebits für sich zu behalten.

Und wir müssen doch wohl nicht ernsthaft über floating point, Rundungsfehler etc. diskutieren, oder? Du weisst Doch genau, wie himitsu es meinte.
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.064 Beiträge
 
Delphi XE2 Professional
 
#17

AW: Konversion von dezimal zu binär

  Alt 1. Jun 2012, 11:53
wo es diese gewünschten "Bits" so eigentlich nicht gibt.
Oh, doch, die gibt es.
"So" gibt es sie "eigentlich" nicht.
Sie existieren nur in der Phantasie der floating Points, wobei sich die Funktion 'Power' Mühe gibt, ihre Phantasiebits für sich zu behalten.

Und wir müssen doch wohl nicht ernsthaft über floating point, Rundungsfehler etc. diskutieren, oder? Du weisst Doch genau, wie himitsu es meinte.
Mag, sein, dass sie bei dir nur in der Phantasie existieren.
Bei mir ist ihre Existenz sehr real.
Wenn du dir mal die Mühe gemacht hättest den Code #12 anzusehen, dann wüßtest du, dass man auf die Bits eines Extendeds (wenn er im Bereich -2^64+1 bis 2^64-1 liegt) genau so einfach zugreifen läßt wie auf die eines Integers.
Wenn also jemand meint, beim Extended existieren diese Bits nur in der Phantasie, dann muss er eigentlich auch meinen, dass bei einem Integer die Bits nur in der Phantasie existieren.

Und zum "Und wir müssen doch wohl nicht ernsthaft über floating point, Rundungsfehler etc. diskutieren, oder?"
Ich habe mit keinem Wort Rundungsfehler angesprochen. Was soll also dieser Kommentar.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#18

AW: Konversion von dezimal zu binär

  Alt 1. Jun 2012, 14:03
Ich glaube, alle haben aneinander vorbeigeredet. Nimms nicht so schwer, es ist Freitag.

Du konvertierst über Extended (Floating Point!!!1!!11!) jemand schmeisst ein "Power(x,y)" da mit rein ("Rundungsfehler!!1!!Elf!!") und dann kommen die üblichen Automatismen.

Ach, und braune Flecken auf Bananen waren auch dabei. Allerdings kommentarlos.

Interessant, das Ganze.

Geändert von Iwo Asnet ( 1. Jun 2012 um 14:05 Uhr)
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#19

AW: Konversion von dezimal zu binär

  Alt 1. Jun 2012, 15:48
Zitat:
Was hat das mit Fair Play zu tun? Selbst wenn die Zahl als Banane vorliegt und uns die braunen Flecken den Binärwert verraten, dann ist es eben so. Das einzige was ich gelesen habe ist, dass er es konvertieren will. Wenn er das über Wuppertal konvertieren will, dann soll er es vorher sagen.
Zitat:
Alle Daten ob Strings, Integers, oder Extended-Werte sind letztendlich binäre Daten.
Wenn jemand sein Wissen darüber nutzt, um zu einer Lösung zu kommen, dann ist das nicht unfair sondern vernünftig.
Daten im Computer werden "zufällig" binär abgespeichert. Ein mathematischer Algorithmus zur Konversion einer Zahl von einem Zahlensystem in ein anderes hat aber mit der zufällig binären Zahlendarstellung im Speicher des Computers nichts zu tun. Wenn es im Internet zufällig eine Seite mit einer Tabelle der Binärdarstellung aller ganzen Zahlen zwischen 0 und 2^32 gäbe, dann könnte man auch ein Programm schreiben, das die Internetseite aufruft und den entsprechenden String auf der Seite findet. Oder man könnte eine array Konstante deklarieren, die für jede zahl den entsprechenden String enthält (das wäre eine Menge Schreibarbeit, aber auch theoretisch möglich). Dann würden diese Programme auch die richtige Binärdarstellung liefern, aber das wäre eben auch kein Konversionsalgorithmus, der vom Lehrer gefordert wurde.

Geändert von idefix2 ( 1. Jun 2012 um 15:51 Uhr)
  Mit Zitat antworten Zitat
diavy

Registriert seit: 11. Apr 2012
54 Beiträge
 
#20

AW: Konversion von dezimal zu binär

  Alt 1. Jun 2012, 17:54
Also vorneweg danke für die alternative Lösung aber ich wär ganz froh wenn ich das Programm mit meiner ursprünglichen Idee ans Laufen bekommen würde.

Habe mir den Ratschlag dass der array zu klein ist zu Herz genommen und micht über SetLength informiert (und es eingebaut). Klappen tut es immer noch nicht.

Delphi-Quellcode:
program ex69;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  math;

var
number:extended;
i,k:integer;
square:array of integer;

begin
  { TODO -oUser -cConsole Main : Insert code here }
{$Q+}
{$R+}
readln(number);
i:=0;
while number>power(2,i) do
        inc(i);
k:=i;
setlength(square,k);
while (number<>0) do
        begin
        while number>power(2,i) do
                inc(i);
        i:=i-1;
        number:=(number-(power(2,i)));
        square[i]:=1;
        end;
for i:=k downto 0 do
        writeln(square[i]);
readln;
end.
--> Debugger Exception Notification: Project ex69.exe raised exception class ErangeError with message 'Range check error'. Process stopped. Use Step or Run to continue.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:38 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