Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Konversion von dezimal zu binär (https://www.delphipraxis.net/168622-konversion-von-dezimal-zu-binaer.html)

diavy 31. Mai 2012 13:05

Konversion von dezimal zu binär
 
Hallo zusammen, ich hab mal wieder ein Problem.

Meine Aufgabe ist es, ein Programm zu schreiben, das ein Zahl(<>0) liest und diese dann in binär tranformiert.

Sprich: 43 --> 101011 wegen 1*2^5+0*2^4...

Vorneweg, ich habe delphi 6, da war die math.pas nicht dabei. Diese musste ich downloaden, da die Funktion n^i nicht funktionniert hat. Ich hab es dort gespeichert: C:\Program Files (x86)\Borland\Delphi6\Source\Rtl\Sys, um die Funktion 'power' verwenden zu können.

Als "Information" kommt nach Eingeben der Zahl '...raised too many consecutive exceptions....process stopped. use step or run to continue.'

Zum Script:

Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils,math;

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

begin
  { TODO -oUser -cConsole Main : Insert code here }
readln(number);
i:=0;
while number>power(2,i) do
        inc(i);
k:=i;
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.

Wär sehr nett wenn wer mir sagen könnte was ich falsch gemacht habe. :)
LG

DeddyH 31. Mai 2012 13:28

AW: Konversion von dezimal zu binär
 
Abgesehen davon, dass mir das unnötig kompliziert erscheint gegenüber einem Binärvergleich hast Du vergessen, das Array zu dimensionieren (SetLength).

himitsu 31. Mai 2012 15:05

AW: Konversion von dezimal zu binär
 
Zitat:

Zitat von DeddyH (Beitrag 1168939)
Abgesehen davon, ... hast Du vergessen, das Array zu dimensionieren (SetLength).

Für sowas schadet es nie, wenn man mal die Bereichsprüfung aktiviert.
Delphi-Quellcode:
{$Q+} => oder über die Projektoptionen und neuerdings auch via {$OVERFLOWCHECKS ON}

Dann wäre das fehlende SetLength sofort aufgefallen.


Und wenn du so wild rumrechnest, dann eventuell auch noch die Überlaufprüfung.
Delphi-Quellcode:
{$R+} => oder über die Projektoptionen und neuerdings auch via {$RANGECHECKS ON}




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.

diavy 31. Mai 2012 15:15

AW: Konversion von dezimal zu binär
 
Zitat:

Abgesehen davon, dass mir das unnötig kompliziert erscheint gegenüber einem Binärvergleich hast Du vergessen, das Array zu dimensionieren (SetLength).
Aber ich weiß doch nicht im Vorraus bis wohin der array geht oder? Die Größe ist doch abhängig von der eingegebenen Zahl?

Zitat:

Für sowas schadet es nie, wenn man mal die Bereichsprüfung aktiviert.
{$Q+} => oder über die Projektoptionen und neuerdings auch via {$OVERFLOWCHECKS ON}
Dann wäre das fehlende SetLength sofort aufgefallen.


Und wenn du so wild rumrechnest, dann eventuell auch noch die Überlaufprüfung.
{$R+} => oder über die Projektoptionen und neuerdings auch via {$RANGECHECKS ON}
Ich habe beides in den Afang des Codes eingefügt und ich bekomme trotzdem eine Fehlermeldung.

Zitat:

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.
Wenn ich number als integer eintrage erhalte ich: [Error] ex69.dpr(28): Incompatible types: 'Integer' and 'Extended'

himitsu 31. Mai 2012 15:25

AW: Konversion von dezimal zu binär
 
Es ist egal ob du vorher weißt wie lang es wird.
Spätestens wenn es benutzt werden soll, muß du die Größe anpassen, denn was es nicht gibt, das kann man nicht benutzen.
Notfalls eben mehrmals, wenn man es vorher nicht weiß.

Zitat:

und ich bekomme trotzdem eine Fehlermeldung.
Schön daß wir wissen welche. :roll:

Nja, dieses Kompilerschalter baut Prüfcodes ein, welche z.B. prüfen ob man auf "nichtvorhandenen" Array-Felder zugreifen will
und erzeugt dann Exception mit einer "ordentliche" Fehlermeldung.
Ohne diese Prüfung passiert sonstewas, wenn man nicht auf ein existierendes Feld zugreift. (z.B. ein Bei Google suchenBuffer Overrun)




Tja, Konsolenprogramme haben halt ein paar Nachteile. (die VCL initialisiert und benutzt ein paar nette Features, vorallem in Bezug auf die Fehlerbehandlung)

Bau mal Folgendes um deinen Code drumrum (zwischen "begin" und "end.").
Delphi-Quellcode:
try
  // hier dein Code
except
  on E: Exception do begin
    WriteLn('Error (', E.ClassName, ') : ', E.Message);
    ReadLn;
  end;
end;
(in "halbwegs" aktuellen Delphis ist sowas ähnliches schon direkt in der Vorlage für ein neues Konsolenprogram mit drin)

diavy 31. Mai 2012 16:24

AW: Konversion von dezimal zu binär
 
Zitat:

Es ist egal ob du vorher weißt wie lang es wird.
Spätestens wenn es benutzt werden soll, muß du die Größe anpassen, denn was es nicht gibt, das kann man nicht benutzen.
Notfalls eben mehrmals, wenn man es vorher nicht weiß.
Wie soll ich das verstehen spätestens die Größe anzupassen wenn man es benutzt? Kann ich eine variable mitten im Programm anders deklarieren?

Zitat:

Schön daß wir wissen welche.
Mir ist gerade aufgefallen dass nur bei manchen Eingaben die Fehlermeldung kommt(soweit ich das erkannt habe bei ungeraden Zahlen)(project raised exception class ERangeError with messade 'Range check error'. Process stopped. Use Step or Run to continue.). Bei geraden Zahlen bekomm ich ein Resultat, jedoch um eine Stelle falsch (12:01100 ;24:011000).

Zitat:

Delphi-Quellcode:
try
  // hier dein Code
except
  on E: Exception do begin
    WriteLn('Error (', E.ClassName, ') : ', E.Message);
    ReadLn;
  end;
end;
(in "halbwegs" aktuellen Delphis ist sowas ähnliches schon direkt in der Vorlage für ein neues Konsolenprogram mit drin)
Leider ist meine Delphi-Version nicht halbwegs aktuell. Ich kann dir leider nicht folgen was 'except' folgt, was ist das Ziel davon und was setzt es um?

DeddyH 31. Mai 2012 16:41

AW: Konversion von dezimal zu binär
 
Du ermittelst doch, wie viele Elemente Dein Array braucht. Sobald Du das weißt, forderst Du mit SetLength dementsprechend Speicher an. Und try-except-Blöcke sind absolute Grundlagen, die sollte man kennen.

himitsu 31. Mai 2012 17:24

AW: Konversion von dezimal zu binär
 
Zitat:

'Range check error'
Siehst du ... das war jetzt die aktivierte Bereichsprüfung.
Ein "Fehler in der Bereichsprüfung" ist doch viel verständlicher, als eine wilde "Zugriffsverletzung", welche je nach Position und Art des Zugriffs manchmal garnicht erkannt wird oder sich sonstwie auswirkt.


- es werden zufällig an dieser Stelle gefunde Daten gelesen ... welche von anderen Variablen
- es exisitert an dieser Stelle nix oder es ist schreibgeschützt (bei einem Schreibzugriff) = Zugriffsverletzung
- man weist der Variable was zu, an dieser Stelle existiert was Fremdes (andere Variable), dadurch wird dieses überschrieben ... und dann kann später (auch erst viel später) das Programm sonstwie reagieren, jenachdem was dort überschrieben wurde.



Und wenn man dazu noch den Debugger verwendet, dann sagt einem Delphi sogar die Fehlerstelle, welche in deinem Fall zuerst
Delphi-Quellcode:
square[i]:=1;
sein wird, weil das Array viel zu klein ist, da du verggessen hast die Größe zu setzen. :angle2:




[OH]Wie soll ich das verstehen spätestens die Größe anzupassen wenn man es benutzt? Kann ich eine variable mitten im Programm anders deklarieren?[/OH]
Nein, das hat auch niemand gesagt.

SetLength ändert die Größe des "dynamischen" Arrays, welches du in der Variable "square" deklariert hast.
> "dynamisch änderbar", also zur Laufzeit über Delphi-Referenz durchsuchenSetLength


PS: Strg+C in Fehlerdialogen = Kopieren der Fehlermeldung

Popov 31. Mai 2012 19:27

AW: Konversion von dezimal zu binär
 
Ich hab jetzt nicht ganz verstanden was das Problem ist, der Array oder wie man konvertiert. Ich hab mal auf die Schnelle eine Funktion erstellt, gebe das Ergebnis aber als String aus. Wer es anders will, bitte anders machen:

Delphi-Quellcode:
function IntToBinStr(Value: Integer; Digits: Byte = 32): String;
var
  i, k: Integer;
begin
  if Digits > 32 then Digits := 32; // 32 Bit Int, oder Value Typ ändern
  Result := '';
  k := 1;
  for i := 1 to Digits do //(4 * 8) = 32 Bit
  begin
    if (Value and k) = k then
      Result := '1' + Result else
      Result := '0' + Result;
    k := k * 2;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToBinStr(43));
end;
Es funktioniert auch ohne Power.

idefix2 31. Mai 2012 21:42

AW: Konversion von dezimal zu binär
 
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.

Bjoerk 31. Mai 2012 23:57

AW: Konversion von dezimal zu binär
 
Außerdem ist k für 32 Digits > MaxInt :wink:

Amateurprofi 1. Jun 2012 01:29

AW: Konversion von dezimal zu binär
 
Zitat:

Zitat von idefix2 (Beitrag 1169011)
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;

Luckie 1. Jun 2012 03:12

AW: Konversion von dezimal zu binär
 
Zitat:

Zitat von diavy (Beitrag 1168937)
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. :roll:

Popov 1. Jun 2012 04:06

AW: Konversion von dezimal zu binär
 
Zitat:

Zitat von idefix2 (Beitrag 1169011)
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.

Amateurprofi 1. Jun 2012 04:10

AW: Konversion von dezimal zu binär
 
Zitat:

Zitat von himitsu (Beitrag 1168961)
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.

Furtbichler 1. Jun 2012 06:30

AW: Konversion von dezimal zu binär
 
Zitat:

Zitat von Amateurprofi (Beitrag 1169024)
Zitat:

Zitat von himitsu (Beitrag 1168961)
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.

Amateurprofi 1. Jun 2012 10:53

AW: Konversion von dezimal zu binär
 
Zitat:

Zitat von Furtbichler (Beitrag 1169030)
Zitat:

Zitat von Amateurprofi (Beitrag 1169024)
Zitat:

Zitat von himitsu (Beitrag 1168961)
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.

Iwo Asnet 1. Jun 2012 13:03

AW: Konversion von dezimal zu binär
 
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.

idefix2 1. Jun 2012 14:48

AW: Konversion von dezimal zu binär
 
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.

diavy 1. Jun 2012 16:54

AW: Konversion von dezimal zu binär
 
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.

DeddyH 1. Jun 2012 17:08

AW: Konversion von dezimal zu binär
 
Dann schau Dir doch im Debugger an, welche Werte k und i zu diesem Zeitpunkt haben.

swkevin08 1. Jun 2012 18:46

AW: Konversion von dezimal zu binär
 
Hi,
das problem liegt an der 2 while-schleife. abbruchbedingung ist ja wenn "number <> 0". aber genau 0 wirds, mit deinem code, nur bei bestimmten fällen (z.b. bei 2^k). aber selbst dann funktioniert das nicht richtig weil du bei deiner ersten while-schleife nur ">" und nicht ">=" stehen hast.(siehe unten) aber selbst danach gibts noch ein paar fehler ;)

ich glaube du weißt wieso du die erste while-schleife benutzt?? - wenn nicht schau mal nach "euklidischer algorithmus". Du suchst ja den Exponent für den dein 2^k größer(gleich) deiner zahl ist. hier hast du auch einen kleinen fehler. wenn du "while number > power(2,1)" benutzt bekommst du den 2 höchsten exponent. schreib einfach "while number > power(2,i + 1)".

wenn du den gefunden hast weißt du auch deine länge vom array.. nicht, wie du geschrieben hast "setlength(square,k)" sondern "setlength(square,k + 1)".

ignorieren wir jetzt mal deine abbruchbedingung bei deiner while-schleife (while(number <> 0)). Warum hast du da nochmal ne while-schleife die das gleiche macht wie davor?? du hast doch jetzt den höchsten exponenten.

gruß

Amateurprofi 1. Jun 2012 20:05

AW: Konversion von dezimal zu binär
 
Zitat:

Zitat von idefix2 (Beitrag 1169095)
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.

Die Daten werden nicht zufällig in binärer Form gespeichert, sondern weil Entwickler es irgendwann einmal so konstruiert haben.
Es ist auch belanglos, ob das nun zufällig so ist oder nicht. Es ist so.

Und wie kommst du zu dem Wissen "aber das wäre eben auch kein Konversionsalgorithmus, der vom Lehrer gefordert wurde" ?

diavy schrieb "Meine Aufgabe ist es, ein Programm zu schreiben, das eine Zahl (<>0) liest und diese dann in binär transformiert."
Ich sehe da keine Einschränkung auf einen bestimmten Konversionsalgorithmus.
Und vor allem sehe ich da keinen Hinweis, dass man sein Wissen über die binäre Darstellung der Daten in der Lösung nicht verwenden darf.
Du ?

Amateurprofi 1. Jun 2012 20:20

AW: Konversion von dezimal zu binär
 
Zitat:

Zitat von DeddyH (Beitrag 1169122)
Dann schau Dir doch im Debugger an, welche Werte k und i zu diesem Zeitpunkt haben.

Hallo Deddy,
sorry aber was Recht ist sollte auch Recht bleiben.
Ich vermute, Bjoerk bezog sich auch die Zeile
k := k * 2;
Beim 32sten Durchlauf wird da ein Überlauf erzeugt, der nur dann nicht zu Problemen führt, wenn die Überlaufprüfung abgeschaltet ist. Bjoerk hat das völlig richtig erkannt.
Besser wäre es, hier zu schreiben
k := k shl 1;

DeddyH 2. Jun 2012 06:52

AW: Konversion von dezimal zu binär
 
Und was spricht dagegen, im Fehlerfall den Debugger zu bemühen? Ich verstehe Deinen Beitrag nicht, sry.

Amateurprofi 2. Jun 2012 08:22

AW: Konversion von dezimal zu binär
 
Zitat:

Zitat von DeddyH (Beitrag 1169163)
Und was spricht dagegen, im Fehlerfall den Debugger zu bemühen? Ich verstehe Deinen Beitrag nicht, sry.

Ich war davon ausgegangen, dass sich dein Beitrag auf #11 bezog, in dem Bjoerk darauf hinwies, dass k>MaxInt wird und hatte konsequenterweise deinen Beitrag so verstanden, er könne sich mit dem Debugger überzeugen, dass dem nicht so sei.

Jetzt, im Nachhinein, ist mir klar, dass sich dein Beitrag auf #20 bezog.
Tut mir Leid, bitte vergiss meinen Einwand in #24.

DeddyH 2. Jun 2012 08:45

AW: Konversion von dezimal zu binär
 
Achso, klarer Fall von Mistverständnis :mrgreen:. Kein Problem, kann passieren

mikhal 2. Jun 2012 09:00

AW: Konversion von dezimal zu binär
 
Vielleicht hilft auch diese Seite weiter, hier ist eigentlich kurz und knapp die Möglichkeit beschrieben, wie man mit dem Hornerschema Zahlensysteme umrechnet.

Grüße
Mikhal


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:17 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