No, vida, s tímhle už se dá pracovat.
Pro zjištění délky stringu mi přijde jasnější použití funkce Length, než technický detail, že na indexu 0 je délka.
Pro procházení těch stringů by se hodilo, aby měly stejnou délku, tak bych je zarovnal. A ještě bych na začátek přidal jednu 0, aby tam bylo místo pro případný poslední carry. Na tom úplně nesejde, ale přijde mi to jako takové přímočaré zjednodušení pro začátečníky.
To sčítaní samotné je pak sčítání tří hodnot (nebo dvakrát sčítání dvou hodnot). Dvě číslice z těch sčítaných stringů a carry z předchozího sčítání. To si myslím, že nemusíš vypisovat a můžeš použít matematické operace.
Takže nevím, v jakém Pascalu děláš, ale toto projde ve FreePascalu.
uses
math, // max
strutils, // addchar
sysutils; // strtoint
// digit to integer
function d2i(c: char): integer;
begin
d2i := ord(c) - ord('0');
end;
// integer to digit
function i2d(i: integer): char;
begin
i2d := chr(ord('0') + i);
end;
var
a, b, c: string;
i, soucet, prenos: integer;
begin
// vstup
a := '111110';
b := '1011';
// priprava
a := addchar('0', a, max(length(a), length(b)) + 1);
b := addchar('0', b, length(a));
c := addchar('0', '', length(a));
prenos := 0;
// vypocet
for i := length(a) downto 1 do
begin
soucet := d2i(a[i]) + d2i(b[i]) + prenos;
c[i] := i2d(soucet mod 2);
prenos := soucet div 2;
end;
// kontrola
writeln(' ', a, ' ', strtoint('%' + a));
writeln('+ ', b, ' ', strtoint('%' + b));
writeln('= ', c, ' ', strtoint('%' + c));
end.