AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hex to Bin -> Falsche eingabe

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

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

Hex to Bin -> Falsche eingabe

  Alt 19. Aug 2011, 07:39
Hey Leute,

ich habe ein Programm geschrieben, dass Hexadezimalzahlen in Dezimalzahlen umrechnet.
Aber ein wichtiges Element bekomme ich nicht hin.
Und zwar bräuchte ich ein Art Befehl, der sagt.

Code:
If c = g bis z then
writeln('Fehler')
beginne von vorne.
gibt es so etwas?

Hier mein Code:

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:= Upcase(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:=upcase(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.

Geändert von Marcel2906 (19. Aug 2011 um 10:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Code erweitern

  Alt 19. Aug 2011, 07:44
Welcher Teil ist denn das Problem?
Die Bedingung fürs IF? Oder das "beginn von vorne"?
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#3

AW: Code erweitern

  Alt 19. Aug 2011, 07:52
Moin...
nur im Fehlerfalle "beginne von vorne" oder grundsätzlich. In diesem Falle wie oft ?
  Mit Zitat antworten Zitat
Marcel2906

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

AW: Code erweitern

  Alt 19. Aug 2011, 07:54
Also beginne von vorne hab ich keine Idee zu, das andere würde ich so versuchen:

Code:
if c=g..z then
begin
writeln('Fehler')
//beginne von vorne
end;
Nur in diesem Fehlerfall soll er von vorne beginnen, so dass man wieder eine neue Zahl eingeben kann.
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#5

AW: Code erweitern

  Alt 19. Aug 2011, 08:04
Meinst Du sowas hier:
Delphi-Quellcode:
repeat
  writeln('Bitte Hexadezimalzahl eingeben:');
  readln(h);
  a:= 1;
  c:= Upcase(h[a]);
  if not (c in ['0'..'9','A'..'F']) then
    writeln('Fehler');
until c in ['0'..'9','A'..'F'];
  Mit Zitat antworten Zitat
Marcel2906

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

AW: Code erweitern

  Alt 19. Aug 2011, 08:12
dann bekomm ich die fehlermedlung:

Zitat:
[DCC Fehler] HexToDez.dpr(20): E2010 Inkompatible Typen: 'string' und 'AnsiChar'
kann ich zu einem repeat auch mehrere untils machen??
Da ich ja schon ein repeat und until in meinem code habe und du noch ein until hinzugefügt hast...
  Mit Zitat antworten Zitat
ensaron

Registriert seit: 29. Aug 2008
Ort: 10369 Berlin
63 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Code erweitern

  Alt 19. Aug 2011, 09:05
Delphi-Quellcode:
repeat
  EingabeEinlesenUndPruefen;
  writeln('Beenden? [y]');
  readln(y);
until y='y';
Delphi-Quellcode:
procedure EingabeEinlesenUndPruefen;
var
  erfolgreich: Boolean;
  eingabe: string;
  i: Integer;
begin
  erfolgreich := True;
  repeat
    writeln('Bitte Hexadezimalzahl eingeben:');
    readln(eingabe);
    for i := 1 to Length(eingabe) do
    begin
      if not (AnsiChar(eingabe[i]) in ['0'..'9','A'..'F','a'..'f']) then
      begin
        Writeln('Fehlerhafte Eingabe!');
        erfolgreich := False;
        Break;
      end;
    end;
  until erfolgreich;
  WandleHexInDez(eingabe);
end;
Versuch es mal so. Musst nur noch die eigentliche Umwandlung und Ausgabe in eine procedure "WandleHexInDez" packen.

Zitat:
kann ich zu einem repeat auch mehrere untils machen??
Nein.
  Mit Zitat antworten Zitat
gammatester

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

AW: Code erweitern

  Alt 19. Aug 2011, 09:13
Deine erfolgreich -Logik ist falsch; es sei denn, Du betrachtest aus unerfindlichen Gründen einen Leerstring als gültige Hexzahl.
  Mit Zitat antworten Zitat
Marcel2906

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

AW: Code erweitern

  Alt 19. Aug 2011, 09:36
Ich hab es jetzt mal Versucht, aber ich habe vorher noch nie mit 'procedure' gearbeitet, deswegen klappt es auch wahrscheinlich nicht. Hier mein Code:

Code:
program HexToDez;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type

procedure EingabeEinlesenUndPruefen(Sender: HexToDez)
procedure WandleHexInDez(Sender: HexToDez);

var
y: string;

begin
 repeat
  EingabeEinlesenUndPruefen;
  writeln('Beenden? [y]');
  readln(y);
 until y='y';
end;

procedure EingabeEinlesenUndPruefen;
 var
  erfolgreich: Boolean;
  eingabe: string;
  i: Integer;

begin
erfolgreich := True;
 repeat
  writeln('Bitte Hexadezimalzahl eingeben:');
  readln(eingabe);
   for i := 1 to Length(eingabe) do
    begin
     if not (AnsiChar(eingabe[i]) in ['0'..'9','A'..'F','a'..'f']) then
      begin
       Writeln('Fehlerhafte Eingabe!');
       erfolgreich := False;
       Break;
      end;
     end;
 until erfolgreich;
WandleHexInDez(eingabe);
end;

procedure WandleHexInDez;
var
a,b,d: integer;
h,c,y: string;

begin
 writeln('Bitte Hexadezimalzahl eingeben:');
 readln(h);
 a:= 1;
 c:= Upcase(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:=upcase(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('');
writeln('Zahl im Dezimalsystem:');
writeln(b);
writeln('');
end;
end.
  Mit Zitat antworten Zitat
ensaron

Registriert seit: 29. Aug 2008
Ort: 10369 Berlin
63 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Code erweitern

  Alt 19. Aug 2011, 09:44
Ok den Fall einer leeren Eingabe sollte man natürlich noch behandeln.
Und die Initialisierung von "erfolgreich" gehört natürlich in die Schleife, sonst wird nach einer falschen Eingabe keine andere Eingabe mehr als richtig betrachtet.

Delphi-Quellcode:
..
repeat
  erfolgreich := True;
  writeln('Bitte Hexadezimalzahl eingeben:');
  readln(eingabe);
  if not length(eingabe) >= 1 then
    erfolgreich := False;
..
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:11 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