Hallo,
überleg dir mal was z nach deinen ganzen If-Anweisungen für einen Wert hat.
Du startest mit z = 1.
In der ersten If-Anweisung wird z = 2.
In der zweiten If-Anweisung wird, wenn z = 2 ist, z um 1 auf 3 erhöht.
In der dritten If-Anweisung wird bei z = 3, z auf 1 gesetzt.
Im nächsten Durchlauf der Schleife hat z am Anfang wieder eine 1.
Mit anderen Worten, vor den If-Anweisungen und nach den If-Anweisungen hat
z immer 1.
Du solltest die If-Anweisungen mit else verknüpfen, oder noch besser mit case.
Delphi-Quellcode:
z:=1;
for i := 1 to length(text) do
begin
a:= ord(text[i]);
a:=a+z;
case z of
1,2: inc(z); //bei 1 oder 2 um eins erhöhen
3 : z := 1; //bei 3 z auf eins setzen
end;