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
diavy

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

Konversion von dezimal zu binär

  Alt 31. Mai 2012, 14:05
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.655 Beiträge
 
Delphi 12 Athens
 
#2

AW: Konversion von dezimal zu binär

  Alt 31. Mai 2012, 14:28
Abgesehen davon, dass mir das unnötig kompliziert erscheint gegenüber einem Binärvergleich hast Du vergessen, das Array zu dimensionieren (SetLength).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.313 Beiträge
 
Delphi 12 Athens
 
#3

AW: Konversion von dezimal zu binär

  Alt 31. Mai 2012, 16:05
Abgesehen davon, ... hast Du vergessen, das Array zu dimensionieren (SetLength).
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}



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.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (31. Mai 2012 um 16:10 Uhr)
  Mit Zitat antworten Zitat
diavy

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

AW: Konversion von dezimal zu binär

  Alt 31. Mai 2012, 16:15
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'
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.313 Beiträge
 
Delphi 12 Athens
 
#5

AW: Konversion von dezimal zu binär

  Alt 31. Mai 2012, 16:25
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.

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)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (31. Mai 2012 um 16:28 Uhr)
  Mit Zitat antworten Zitat
diavy

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

AW: Konversion von dezimal zu binär

  Alt 31. Mai 2012, 17:24
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?
  Mit Zitat antworten Zitat
Amateurprofi

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

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
 
#8

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.087 Beiträge
 
Delphi XE2 Professional
 
#9

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
Benutzerbild von Luckie
Luckie

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

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
Antwort Antwort


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 23:09 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