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;¢