home *** CD-ROM | disk | FTP | other *** search
/ Compy Shop Magazin 1989 March / Compy_Shop_Magazin_1989_03___de_Side_A.atr / val.i < prev    next >
Text File  |  2023-02-26  |  2KB  |  1 lines

  1. FUNCTION Val(Data: String): Real;¢¢   VAR ¢     Neg, Len, Point, Loop: Integer;¢     Hold , Front, Back: Real;¢     Po: String;¢¢¢  FUNCTION Check: Boolean;¢  ¢     VAR ¢       h: Char;¢       Count, Loop: Integer;¢¢    BEGIN¢      Check:= True;¢      Count:= 1;¢      FOR Loop:= (Point+1) TO Len DO BEGIN¢        h:= Data[Loop];¢        IF h='.' THEN BEGIN¢          Check:= False;¢          Count:= Count+1¢         END¢       END;¢      IF Count>1¢        THEN WRITE (Count,' Punkte ? -')¢        ELSE BEGIN¢          FOR Loop:= 1 TO Len DO BEGIN¢            h:= Data[Loop];¢            IF NOT((h>='0') AND (h<='9') OR (h='.')) THEN Check:= False¢           END¢         END¢     END;¢¢¢  FUNCTION ValOne(VAR h: Char): Integer;¢¢    BEGIN¢      CASE h OF¢        '0': ValOne:= 0;¢        '1': ValOne:= 1;¢        '2': ValOne:= 2;¢        '3': ValOne:= 3;¢        '4': ValOne:= 4;¢        '5': ValOne:= 5;¢        '6': ValOne:= 6;¢        '7': ValOne:= 7;¢        '8': ValOne:= 8;¢        '9': ValOne:= 9¢       END¢     END;¢¢        ¢  BEGIN¢    Neg:= 1;¢    IF Data[1]='-' THEN BEGIN¢      Data[1]:= '0';¢      Neg:= -1¢     END;¢    Len:= Length (Data);¢    Po[1]:= '.';¢    FOR Loop:= 2 TO MaxString DO Po[Loop]:= ' ';¢    Point:= Index (Data,Po);¢    Again:= False;  (*must be global*)¢    IF Check ¢      THEN BEGIN¢        Front:= 0;¢        For Loop:= 1 TO (Point-1) DO BEGIN¢          Hold:= ValOne (Data[Loop]);¢          Front:= Front+Hold*Potenz(10,(Point-Loop-1))¢         END;¢        Back:= 0;¢        FOR Loop:= (Point+1) TO Len DO BEGIN¢          Hold:= ValOne (Data[Loop]);¢          Back:= Back+Hold*Potenz(10,(Point-Loop))¢         END;¢        IF Point=0 THEN Back:= Back*Potenz(10,Len);¢        Val:= (Front+Back)*Neg¢       END¢      ELSE BEGIN¢        Writeln ('Zahl ?');¢        Again:= True¢       END¢   END;¢