I’m having an issue with my programming assignment where I cycle through a string and sum the integer value of character. As the following code states. Now I pass a string into this subroutine. For example given
num := '8888';
Expected Output would be
32
Resulting output is
-12
I’m using fpc pascal compiler on a Linux environment. Any insight as to why this is occurring would be much appreciated
procedure subRoutine1(num : string);
var
i : byte;
value : integer;
sum : integer;
begin
sum := 0;
for i := 0 to length(num) do
begin
value := Integer(num[i]) - 48;
sum := sum + value;
end;
writeln(sum);
end;
The bug is that the loop should start with with 1, not 0.
Pascal strings have the first byte containing the length of the string.
in other words, num[0] contains the value 4 (string is 4 characters long)which gives -44 after subtracting 48, throwing off your expected sum value.
So your program iterates over the following values
Also as suggested in other answers, do use the Ord() function rather than a cast to Integer, i.e. use