RosettaCodeData/Task/A+B/Action-/a+b.action
2023-07-01 13:44:08 -04:00

62 lines
1.1 KiB
Text

BYTE FUNC Find(CHAR ARRAY s CHAR c BYTE POINTER err)
BYTE i
FOR i=1 TO s(0)
DO
IF s(i)=c THEN
err^=0 RETURN (i)
FI
OD
err^=1
RETURN (0)
INT FUNC Decode(CHAR ARRAY s BYTE start,stop BYTE POINTER err)
CHAR ARRAY tmp(20),tmp2(20)
INT value
IF s(start)='+ THEN
start==+1
FI
SCopyS(tmp,s,start,stop)
value=ValI(tmp)
;Check if conversion failed
IF value=0 AND s(start)#'0 THEN
err^=1 RETURN (0)
FI
;Check if value is out of range
IF value<-1000 OR value>1000 THEN
err^=1 RETURN (0)
FI
err^=0
RETURN (value)
PROC Main()
CHAR ARRAY s(20)
BYTE pos,err,err2,value
INT a,b,sum
DO
PrintE("Enter two integer numbers between -1000 and 1000, separated by a space or Q for quit")
InputS(s)
IF s(0)=1 AND (s(1)='Q OR s(1)='q) THEN
EXIT
FI
pos=Find(s,' ,@err)
IF err=0 THEN
a=Decode(s,1,pos-1,@err)
b=Decode(s,pos+1,s(0),@err2)
err=err OR err2
FI
IF err=0 THEN
sum=a+b
PrintF("Their sum is %I%E",sum)
ELSE
PrintE("Invalid input!")
FI
PutE();
OD
RETURN