AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Hexadezimal in Binär

Ein Thema von Marcel2906 · begonnen am 18. Aug 2011 · letzter Beitrag vom 18. Aug 2011
Thema geschlossen
Seite 1 von 2  1 2   
Marcel2906

Registriert seit: 17. Aug 2011
Ort: Warendorf
112 Beiträge
 
Delphi 2010 Professional
 
#1

Hexadezimal in Binär

  Alt 18. Aug 2011, 10:39
Hey Leute,

ich bins wieder
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.
 
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Hexadezimal in Binär

  Alt 18. Aug 2011, 10:47
Hier im Forum suchenIntToBin
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
 
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Hexadezimal in Binär

  Alt 18. Aug 2011, 11:02
Hallo,

Also deinen Code umgewandelt würde folgendes ergeben:
Delphi-Quellcode:
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] = '0then
        b := b + '0000'
      else
      if e[i] ='1then
        b := b + '0001'
      else
      if e[i] = '2then
        b := b + '0010'
      else
      if e[i] = '3then
        b := b + '0011'
      else
      if e[i] = '4then
        b := b + '0100'
      else
      if e[i] = '5then
        b := b + '0101'
      else
      if e[i] = '6then
        b := b + '0110'
      else
      if e[i] = '7then
        b := b + '0111'
      else
      if e[i] = '8then
        b := b + '1000'
      else
      if e[i] = '9then
        b := b + '1001'
      else
      if e[i] = 'Athen
        b := b + '1010'
      else
      if e[i] = 'Bthen
        b := b + '1011'
      else
      if e[i] = 'Cthen
        b := b + '1100'
      else
      if e[i] = 'Dthen
        b := b + '1101'
      else
      if e[i] = 'Ethen
        b := b + '1110'
      else
      if e[i] = 'Fthen
        b := b + '1111';
    end;

    writeln(b);
    writeln('');

    writeln('Beenden?[y]');
    readln(y);
  until y='y';
end.
ALLERDINGS:

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.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
 
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Hexadezimal in Binär

  Alt 18. Aug 2011, 11:05
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).
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
 
Marcel2906

Registriert seit: 17. Aug 2011
Ort: Warendorf
112 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Hexadezimal in Binär

  Alt 18. Aug 2011, 12:01
vielen dank, ich werde mich mal weiter informieren um es zu optimieren
 
Marcel2906

Registriert seit: 17. Aug 2011
Ort: Warendorf
112 Beiträge
 
Delphi 2010 Professional
 
#6

AW: Hexadezimal in Binär

  Alt 18. Aug 2011, 12:49
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.
 
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#7

AW: Hexadezimal in Binär

  Alt 18. Aug 2011, 12:51
Du hast es fast schon richtig stehen gehabt
"c := h[a];"
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
 
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Hexadezimal in Binär

  Alt 18. Aug 2011, 13:10
Und wenn man c nicht als String, sondern als Char deklariert, lässt sich sogar case verwenden.
Delphi-Quellcode:
var c: char;
...
c := Upcase(h[a]); //vorsichtshalber in Großschreibung wandeln
case c of
  'A': d := 10;
  'B': d := 11;
  //usw.
end;
Es geht natürlich auch noch kürzer und einfacher mit Ord(), aber ich lass das erstmal so stehen.
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
 
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#9

AW: Hexadezimal in Binär

  Alt 18. Aug 2011, 13:31
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.
 
Marcel2906

Registriert seit: 17. Aug 2011
Ort: Warendorf
112 Beiträge
 
Delphi 2010 Professional
 
#10

AW: Hexadezimal in Binär

  Alt 18. Aug 2011, 14:08
ich hab es jetzt mal mit case versucht, aber nun klappt mein code nicht mehr.

Vorher:

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:= 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.
Nachher:

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
Was muss ich anders machen??
 
Thema geschlossen
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:44 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