![]() |
Hexadezimal in Binär
Hey Leute,
ich bins wieder :-D Nun soll ich ein Programm schreiben, dass Hexadezimalzahlen in Binärzahlen umschreibt. Ich habe schon viel gesucht, aber nicht meinen Lösungsweg gefunden den ich wählen möchte. Und zwar soll es so ablaufen. Ich gebe eine Hexadezimalzahl ein und jede/r Zahl/Buchstabe wird von links nach rechts ins Binärsystem umgeschrieben und hintereinander geschrieben. Mit meinem Code kann ich bis jetzt lediglich eine einstellige Hexadezimalzahl umwandeln. Gibt es einen Befehl der die Eingabe von links nach rechts durchgeht?? Mein Code:
Code:
program HexToBin;
{$APPTYPE CONSOLE} uses SysUtils; var h:integer; e,y,b:string; begin repeat writeln('Gebe Hexadezimalzahl ein:'); readln(e); if e='0' then begin b:='0000'; end; if e='1' then begin b:='0001'; end; if e='2' then begin b:='0010'; end; if e='3' then begin b:='0011'; end; if e='4' then begin b:='0100'; end; if e='5' then begin b:='0101'; end; if e='6' then begin b:='0110'; end; if e='7' then begin b:='0111'; end; if e='8' then begin b:='1000'; end; if e='9' then begin b:='1001'; end; if e='A' then begin b:='1010'; end; if e='B' then begin b:='1011'; end; if e='C' then begin b:='1100'; end; if e='D' then begin b:='1101'; end; if e='E' then begin b:='1110'; end; if e='F' then begin b:='1111'; end; writeln(b); writeln(''); writeln('Beenden?[y]'); readln(y); until y='y'; end. |
AW: Hexadezimal in Binär
|
AW: Hexadezimal in Binär
Hallo,
Also deinen Code umgewandelt würde folgendes ergeben:
Delphi-Quellcode:
ALLERDINGS:
program HexToBin;
{$APPTYPE CONSOLE} uses SysUtils; var h:integer; e,y,b:string; begin repeat writeln('Gebe Hexadezimalzahl ein:'); readln(e); b := ''; for i:= 1 to Length(e) do begin if e[i] = '0' then b := b + '0000' else if e[i] ='1' then b := b + '0001' else if e[i] = '2' then b := b + '0010' else if e[i] = '3' then b := b + '0011' else if e[i] = '4' then b := b + '0100' else if e[i] = '5' then b := b + '0101' else if e[i] = '6' then b := b + '0110' else if e[i] = '7' then b := b + '0111' else if e[i] = '8' then b := b + '1000' else if e[i] = '9' then b := b + '1001' else if e[i] = 'A' then b := b + '1010' else if e[i] = 'B' then b := b + '1011' else if e[i] = 'C' then b := b + '1100' else if e[i] = 'D' then b := b + '1101' else if e[i] = 'E' then b := b + '1110' else if e[i] = 'F' then b := b + '1111'; end; writeln(b); writeln(''); writeln('Beenden?[y]'); readln(y); until y='y'; end. Du solltest unabhängig von Groß- und Kleinschreibung prüfen. Außerdem ist diese Lösung alles andere als ideal - Allerdings an deine Kenntnisse angepasst. Das ganze wäre mit einem Case wahrscheinlich auch um einiges Übersichtlicher. Einfacher wäre es aber auch den Hex-String in ein Integer umzuwandeln (IntToStr('$' + HexString)) und diese Zahl dann in einer Funktion in eine Binärzahl umzuwandeln. Zu diesem Zweck hat DeddyH ja schon eine Antwort gegeben. |
AW: Hexadezimal in Binär
Japp. Und vielleicht sollte man vorher noch überprüfen, ob die Eingabe überhaupt eine gültige Hexadezimaldarstellung einer Zahl ist und auch verarbeitet werden kann (sie kann ja gültig sein, aber so groß, dass sie jeden verarbeitbaren Zahlenbereich sprengt).
|
AW: Hexadezimal in Binär
vielen dank, ich werde mich mal weiter informieren um es zu optimieren :lol:
|
AW: Hexadezimal in Binär
ich hab mich auch mal an Hex to Dez gewagt.
Nun fehlt mir ein Befehl, falls es diesen überhaupt gibt. Dort wo die Kommentare sind, fehlt mir der Befehl. Ich wäre sehr dankbar für jeden Tipp
Code:
program HexToDez;
{$APPTYPE CONSOLE} uses SysUtils; var a,b,d: integer; h,c,y: string; begin repeat writeln('Bitte Hexadezimalzahl eingeben:'); readln(h); a:= 1; // c:= Wert von h an Stelle [a]; <------------------hier b:=c; while a < length(h) do begin a:=a+1; //c:=Wert.Stelle[a] <-----------und das selbe nochmal hier if c='A' then begin d:=10; c:=d; end; if c='B' then begin d:=11; c:=d; end; if c='C' then begin d:=12; c:=d; end; if c='D' then begin d:=13; c:=d; end; if c='E' then begin d:=14; c:=d; end; if c='F' then begin d:=15; c:=d; end; b:=b*16+c end; writeln(b); writeln(''); writeln('Beenden? [y]'); readln(y); until y='y'; end. |
AW: Hexadezimal in Binär
Du hast es fast schon richtig stehen gehabt :)
"c := h[a];" |
AW: Hexadezimal in Binär
Und wenn man c nicht als String, sondern als Char deklariert, lässt sich sogar case verwenden.
Delphi-Quellcode:
Es geht natürlich auch noch kürzer und einfacher mit Ord(), aber ich lass das erstmal so stehen.
var c: char;
... c := Upcase(h[a]); //vorsichtshalber in Großschreibung wandeln case c of 'A': d := 10; 'B': d := 11; //usw. end; |
AW: Hexadezimal in Binär
Wenn Du für das erste Zeichen keine Extrabehandlung einbaust, kann man alles in der Schleife machen, d.h. nur einmal die verschachtelte if-Anweisung bzw. case.
Man muß dann nur b vor der Schleife auf 0 setzen. |
AW: Hexadezimal in Binär
ich hab es jetzt mal mit case versucht, aber nun klappt mein code nicht mehr.
Vorher:
Code:
Nachher:
program HexToDez;
{$APPTYPE CONSOLE} uses SysUtils; var a,b,d: integer; h,c,y: string; begin repeat writeln('Bitte Hexadezimalzahl eingeben:'); readln(h); a:= 1; c:= h[a]; if c='A' then begin d:=10; c:=IntToStr(d); end; if c='B' then begin d:=11; c:=IntToStr(d); end; if c='C' then begin d:=12; c:=IntToStr(d); end; if c='D' then begin d:=13; c:=IntToStr(d); end; if c='E' then begin d:=14; c:=IntToStr(d); end; if c='F' then begin d:=15; c:=IntToStr(d); end; d:=StrToInt(c); b:=d; while a < length(h) do begin a:=a+1; c:=h[a]; if c='A' then begin d:=10; c:=IntToStr(d); end; if c='B' then begin d:=11; c:=IntToStr(d); end; if c='C' then begin d:=12; c:=IntToStr(d); end; if c='D' then begin d:=13; c:=IntToStr(d); end; if c='E' then begin d:=14; c:=IntToStr(d); end; if c='F' then begin d:=15; c:=IntToStr(d); end; d:=StrToInt(c); b:=b*16+d; end; writeln(b); writeln(''); writeln('Beenden? [y]'); readln(y); until y='y'; end.
Code:
program HexToDez1;
{$APPTYPE CONSOLE} uses SysUtils; var a,b,d: integer; h,y: string; c:char; begin repeat writeln('Bitte Hexadezimalzahl eingeben:'); readln(h); a:= 1; c:= UpCase(h[a]); case c of 'A': d := 10; 'B': d := 11; 'C': d := 12; 'D': d := 13; 'E': d := 14; 'F': d := 15; end; d:=StrToInt(c); b:=d; while a < length(h) do begin a:=a+1; c:=h[a]; case c of 'A': d := 10; 'B': d := 11; 'C': d := 12; 'D': d := 13; 'E': d := 14; 'F': d := 15; end; d:=StrToInt(c); b:=b*16+d; end; writeln(b); writeln(''); writeln('Beenden? [y]'); readln(y); until y='y'; end. Habe Case noch nie benutzt :pale: Was muss ich anders machen?? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 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