Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Gültige Eingabezahlen von Delphi --> Pascal


herman - Do 07.04.05 14:35
Titel: Gültige Eingabezahlen von Delphi --> Pascal
Hallo ich brauche hilfe bei einer umsetzung eines delphi in pascal programms. die sprachen sind sich ja recht ähnlich habe ich gesehen. trotzdem gelingt es mir nicht den folgenden code in pascal zu schreiben. da ich gewisse befehle nicht kenne

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
program integerzahl;
uses crt;
var x:integer;


function isinteger(s:string):boolean;
var q:integer;
    c:char;

    begin
      q:=1;
      while length(s) > 0 do
      begin
        c:=s[1];
        case q of
        1 : if c in ['+','-'then q:= 2 else
            if c in ['0'..'9'then q := 3 else q := 99;
        2 : if c in ['0'..'9'then q := 3 else q := 99;
        3 : if c in ['0'..'9'then q := 3 else q := 99;
      end;

      delete(s,1,1);
    end;
    result := (q = 3);
end;


Bitte um hilfe danke

mfg

Moderiert von user profile iconTino: Überflüssige Absätze entfernt.
Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.


jaenicke - Do 07.04.05 14:40

:welcome:

Wo liegt denn dabei genau das Problem, d.h. welche Befehle fehlen dir denn?

Und Delphi-Quelltext bitte in [delphi]...[/delphi] Tags setzen (geht auch mit dem Knopf Delphi oben), damits einfacher zu lesen ist...


herman - Do 07.04.05 14:43

danke für hinweis

die befehle result und delete sind mir unbekannt

und eigentlich wollt ich noch wissen was ich am rest noch ändern muss damit der code auch in pascal die gewünschten ergebnisse liefert

mfg


HolgerB - Do 07.04.05 15:00

Hallo,

result wurde erst mit Delphi 1.0 eingeführt. Daher musst du den Namen der Funktion verwenden.


Delphi-Quelltext
1:
IsInteger := False;                    


Den Namen der Funktion darfst du in Pascal glaube ich erst am ende der Funktion verwenden um eine Rekursion (selbstaufruf) zu vermeiden. GGf. musst Du das Ergebnis in einer Variable zwischenspeichern.

Delete muss ich auch erst nachschauen.

Gruß
Holger

Moderiert von user profile iconAXMD: Code- durch Delphi-Tags ersetzt.


jaenicke - Do 07.04.05 15:38

Delete löscht aus dem übergebenen String von der als zweites übergebenen Position die als drittes übergebene Anzahl an Zeichen, in diesem Fall also das erste Zeichen, das ja gerade analysiert worden ist...


HolgerB - Do 07.04.05 15:55

Ich fürchte Delete musst du selber bauen.

Mit Left und Right kannst Du einen String abschneiden und mit + wieder zusammen bauen.

Oder hießen sie Leftstring und Rightstring? Egal, steht in der Hilfe.

Gruß
Holger


jaenicke - Do 07.04.05 16:02

Ähh, welche Pascal-Version ist das eigentlich? In meinem TP für Windows ist Delete dabei, bei TP 7 hab ich nicht nachgesehen.


delfiphan - Fr 08.04.05 01:54

Was ist denn das für n Chaoscode? Sowas programmiert man viel einfacher mit einer For-Schleife und ohne Delete. Oder noch einfacher machst du ein Val und rufst den Errorcode ab. Ob Val ein explizit geschriebenes, positives Vorzeichen verträgt, weiss ich jedoch nicht.


hansa - Fr 08.04.05 02:23
Titel: Re: Gültige Eingabezahlen von Delphi --> Pascal
Bitte Kommentare beachten : darin zerpflücke ich Deinen Quelltext ! :mrgreen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
program integerzahl;
uses crt;           (* überflüssig *)
var x:integer;      (* überflüssig *)
 

function isinteger(s:string):boolean;
var q:integer;
    c:char;

    begin
      q:=1;
      while length(s) > 0 do
      begin
        c:=s[1];
        case q of
        1 : if c in ['+','-'then q:= 2 else
            if c in ['0'..'9'then q := 3 else q := 99;
        2 : if c in ['0'..'9'then q := 3 else q := 99;
        3 : if c in ['0'..'9'then q := 3 else q := 99;
      end;

      delete(s,1,1);
    end;
    result := (q = 3);
end;


Ne, war doch nicht so schlimm. Wahrscheinlich nur altlasten. 8)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
function isinteger(s:string):boolean;
var q:integer;
    c:char;
begin
  q:=1;
  while length(s) > 0 do begin
    c:=s[1];
    case q of
      1 : if c in ['+','-'then
            q:= 2 
          else
            if c in ['0'..'9'then
              q := 3 
            else 
              q := 99;
      2 : if c in ['0'..'9'then 
            q := 3 
          else
            q := 99;
      3 : if c in ['0'..'9'then 
            q := 3 
          else 
            q := 99;
    end;
    delete(s,1,1);
  end;
  result := (q = 3);
end;


Ich habe den Source etwas abgeändert. Eine Zeile zu verschwenden für einzelnes begin, das ist zwar Borland Style Guide konform, aber nicht bei mir. :mrgreen: Und siehe einer mal an : es ist zeilenmäßig mehr geworden aber die Zeilen sind auch kürzer und man sieht etwas entscheidendes. :shock: q ist immer 1. Insofern ist das nichts anderes als das hier :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
function isinteger(s:string):boolean;
var q:integer;
    c:char;
begin
  q:=1;
  while length(s) > 0 do begin
    c:=s[1];
    case q of
      1 : if c in ['+','-'then
            q:= 2 
          else
            if c in ['0'..'9'then
              q := 3 
            else 
              q := 99;
    end;
    delete(s,1,1);
  end;
  result := (q = 3);
end;


Dann geht es weiter : q bleibt immer noch 1 :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
function isinteger(s:string):boolean;
var q:integer;
    c:char;
begin
  q:=1;
  while length(s) > 0 do begin
    c:=s[1];
    if c in ['+','-'then
      q:= 2 
    else
      if c in ['0'..'9'then
        q := 3 
    else 
      q := 99;
    delete(s,1,1);
  end;
  result := (q = 3);
end;


Und jetzt sehe ich noch, daß es bereits zu spät ist. 8) Letzte Kurzanalyse : q rausschmeißen !! Bool-Variable verwenden und diese als Resultat IsInteger zuweisen.

[Edit] Stimmt so auch nicht, aber ich lasse das mal trotzdem hier so stehen. Es ist doch Chaoscode. Als Sphagetti-Code kann man es allerdings kaum bezeichnen, ich würde sagen es sind Rigatoni mit zu viel Käse. :mrgreen: