Ну, на самом деле это выглядеть должно где-то так (пишу прямо тут, так что за компиляемость не ручаюсь, главное смысл):
Код:
// Где-то описана строка со всеми доступными символами, например, для 3 она будет содержать 'abc'
var
AllSymbols : String;
// процка, делающая замену
procedure ChangeSymbol(Idx : Integer; var S : String);
var
Ch : Char;
NextCh : Char;
begin
// текущий символ в позиции Idx
Ch := S[Idx];
// находим следующий символ
For I := 1 To Length(AllSymbols) Do
If AllSymbols = Ch Then
Begin
// если он последний, то следующий будет первый, иначе - следующий
If I = Length(Allsymbols) Then NextCh := AllSymbols[1] Else NextCh := Allsymbols[I+1];
Break;
End;
// если символ первый среди возможных, то надо поменять предшествующий - переход позиции
If NextCh := AllSymbols[1] Then ChangeSymbol(Idx-1,S);
// меняем символ
S[Idx] := NextCh;
end;
ну фактически тебе осталось написать инициализацию всех переменных и выталкивание этого добра в Мемо.