AGB  ·  Datenschutz  ·  Impressum  







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

Eingaben prüfen (Pascal)

Ein Thema von chris_82 · begonnen am 24. Apr 2004 · letzter Beitrag vom 2. Mai 2004
Antwort Antwort
chris_82

Registriert seit: 26. Aug 2003
112 Beiträge
 
Delphi 6 Enterprise
 
#1

Eingaben prüfen (Pascal)

  Alt 24. Apr 2004, 00:50
Guten Abend,

ich darf mal wieder ein gutes altes Pascalprogramm schreiben.

Nun muss ich noch meine Eingaben abfangen, sprich ich habe ein Menü in dem verschieden Werde eingegeben werden, eigentlich alles Gleitkommazahlen. Bräuchte ich eine Funktion die prüft ob die eingabe in real liegt oder nicht. so nach dem Motto ist 0.00001 ein Teilmenge von Real, gibt es da ein Funktion?
....oop und nun...??
http://www.sengewald.info
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: Eingaben prüfen (Pascal)

  Alt 24. Apr 2004, 00:59
Zitat von chris_82:
...ich darf mal wieder ein gutes altes Pascalprogramm schreiben...
Aber das hat mit Pascal nichts zu tun. 8) Die Eingabe muß halt im Fehlerfalle abgefangen werden. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Eingaben prüfen (Pascal)

  Alt 24. Apr 2004, 01:31
Na, es muss ja nicht sofort eine Falscheingabe sein. Man könnte sich auch Eingaben denken, die zwar syntaktisch völlig okay sind, aber die der Datentyp nicht mehr in all ihrer Genauigkeit erfassen kann.

IMHO wäre es eine Variante, wenn du die Eingabe zunächst in den Zieldatentyp (hier wohl Real) konvertierst, und dann wieder zurück zu String. Wenn jetzt der gelesene, und der 2x konvertierte String noch gleich sind, so kann der eingegebene Wert ohne Rundungsfehler in ausreichender Genauigkeit in Real gespeichert werden.

(Auf fehlerhafte Eingaben muss natürlich im Vorfeld gesondert reagiert werden!)

mfg,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#4

Re: Eingaben prüfen (Pascal)

  Alt 1. Mai 2004, 01:04
das problem hatte ich auch schon oft: gibt es in pascal sowat in der art:

Code:
if try readln(InEinenInteger)=error
then machsnochmal;
//also wenn der benutzer KEINEN integer eingibt, muss ers nochmal machen, solang bis ers hinkriegt
gibts das?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: Eingaben prüfen (Pascal)

  Alt 1. Mai 2004, 04:09
Zitat von glkbkk:
das problem hatte ich auch schon oft: gibt es in pascal sowat in der art:

Code:
if try readln(InEinenInteger)=error
then machsnochmal;
//also wenn der benutzer KEINEN integer eingibt, muss ers nochmal machen, solang bis ers hinkriegt
gibts das?
Nein, aber das gibts in Pascal:
Delphi-Quellcode:
function SichereEingabe(Text: String): Integer;
var
  Wert, Code: Integer;
  WertEin: String;
begin
  repeat
    Write(Text+' ');
    Readln(WertEin);
    Val(WertEin,Wert,Code);
    if Code <> 0 then
      Writeln('Ungültige Eingabe');
  until Code=0;
  SichereEingabe := Wert;
end;
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#6

Re: Eingaben prüfen (Pascal)

  Alt 2. Mai 2004, 15:43
soweit ich sehe prüft das nur, ob das eingegebene <>'' ist, oder?
was ist, wenn ich zb 'vierzehn' eingebe?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von devnull
devnull

Registriert seit: 5. Okt 2003
362 Beiträge
 
Delphi 7 Personal
 
#7

Re: Eingaben prüfen (Pascal)

  Alt 2. Mai 2004, 16:43
Nein, wenn du 'vierzehn' eingibst, dann ist in der Variable WertEin (String) 'vierzehn' gespeichert.
Wenn du nun mit der Funktion val probierst, Zeichen (d.h. Buchstaben) umzuwandeln, dann wird in der
Variable Code (integer) der Fehlertyp zurückgegeben!
Du wirst solange 'gezwungen', eine korrekte, gültige Eingabe einzugeben, bis Code=0 ist!


Delphi-Quellcode:
function SichereEingabe(Text: String): Integer;
var
  Wert, Code: Integer;
  WertEin: String;
begin
  repeat
    Write(Text+' ');
    Readln(WertEin);
    Val(WertEin,Wert,Code); //Wenn Code <> 0, dann war in der Eingabe ein ungültiges Zeichen
    if Code <> 0 then
      Writeln('Ungültige Eingabe');
  until Code=0;
  SichereEingabe := Wert;
end;
mfg
devnull
-- Never change a running system --
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#8

Re: Eingaben prüfen (Pascal)

  Alt 2. Mai 2004, 16:49
aso, mir war die bedeutung von val nit so ganz klar...
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von devnull
devnull

Registriert seit: 5. Okt 2003
362 Beiträge
 
Delphi 7 Personal
 
#9

Re: Eingaben prüfen (Pascal)

  Alt 2. Mai 2004, 16:57
Findet man alles in der Hilfe:
> Hilfe->Index->Suchen

Code:
 Auszug aus der Hilfe
Val (Prozedur)
Interpretiert einen String als numerischen Wert.

Deklaration
procedure Val(S; var V; var Code: Integer);
Es gilt:
S   ist eine Variable des Typs String, die eine Zeichenfolge speichert, die einen numerischen Wert (mit Vorzeichen) ergibt.
V   ist eine Variable mit einem Integer- oder Real-Typ.
Code   ist eine Variable des Typs Integer.

Zielsystem
>Windows, Real, Protected
-- Never change a running system --
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#10

Re: Eingaben prüfen (Pascal)

  Alt 2. Mai 2004, 16:58
Zitat von dizzy:
IMHO wäre es eine Variante, wenn du die Eingabe zunächst in den Zieldatentyp (hier wohl Real) konvertierst, und dann wieder zurück zu String. Wenn jetzt der gelesene, und der 2x konvertierte String noch gleich sind, so kann der eingegebene Wert ohne Rundungsfehler in ausreichender Genauigkeit in Real gespeichert werden.
Wenn du auch das berücksichtigen willst, dann würde der Code so aussehen:
Delphi-Quellcode:
function SichereEingabe(Text: String): Integer;
var
  Wert, Code: Integer;
  WertEin, WertNeu: String;
begin
  repeat
    Write(Text+' ');
    Readln(WertEin);
    Val(WertEin,Wert,Code); //Wenn Code <> 0, dann war in der Eingabe ein ungültiges Zeichen
    if Code <> 0 then
      Writeln('Ungültige Eingabe')
    else
    begin
      Str(Wert,WertNeu);
      if WertNeu <> WertEin then
        Code := 1;
    end;
  until Code=0;
  SichereEingabe := Wert;
end;
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  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 21:38 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