RosettaCodeData/Task/Increment-a-numerical-string/Oberon/increment-a-numerical-string.oberon
2023-07-01 13:44:08 -04:00

36 lines
758 B
Text

MODULE addstr;
IMPORT Out, Strings;
VAR str1, str2 : ARRAY 9 OF CHAR;
num, pos : INTEGER;
carry : BOOLEAN;
ch : CHAR;
BEGIN
str1 := "9999";
Out.Char ('"'); Out.String (str1); Out.String ('" + 1 = ');
num := Strings.Length (str1) - 1;
pos := num;
IF str1 [0] = '9' THEN INC (pos) END;
str2 [pos + 1] := 0X;
carry := TRUE;
REPEAT
ch := str1 [num];
IF carry THEN
ch := CHR (ORD (ch) + 1)
END;
IF ch > '9' THEN
carry := TRUE;
ch := '0'
ELSE
carry := FALSE
END;
str2 [pos] := ch;
DEC (num);
DEC (pos)
UNTIL num < 0;
IF carry THEN str2 [0] := '1' END;
Out.String (str2);
Out.Ln
END addstr.