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

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

AW: Konversion von dezimal zu binär

  Alt 31. Mai 2012, 18:24
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 square[i]:=1; sein wird, weil das Array viel zu klein ist, da du verggessen hast die Größe zu setzen.




[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
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Konversion von dezimal zu binär

  Alt 31. Mai 2012, 20:27
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.
  Mit Zitat antworten Zitat
idefix2

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

AW: Konversion von dezimal zu binär

  Alt 31. Mai 2012, 22:42
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.

Geändert von idefix2 (31. Mai 2012 um 22:53 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

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

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

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
Popov
(Gast)

n/a Beiträge
 
#6

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

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Konversion von dezimal zu binär

  Alt 2. Jun 2012, 10:00
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
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  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 05:26 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