Program działa w następujący sposób.
Jest tabela zawierająca większość znaków z klawiatury. Program sprawdza każdy ze znaków w stringu na wejściu, czy zgadza się z jednym ze znaków w tablicy. Jeśli tak jest, do stringu na wyjściu dodawany jest znak, będący na miejscu w tabeli o X większym, niż obecny (różnicę podaje użytkownik).
Jeśli miejsce tabeli nie istnieje, bo na przykład wybraliśmy znak na miejscu 10 a w tabeli jest 12 miejsc, wybierany jest znak na miejscu 0 + różnica, w naszym przypadku 2 (12 - 10 = 2; 0 + 2 = 2).
Przy zmianie znaków do przodu (dodawanie) wszystko działa tak jak powinno. Jednak przy odejmowaniu pierwsze znaki (ich liczba jest zależna od różnicy) z nieznanego powodu się powtarzają.
Proces zmiany znaków wygląda następująco:
Kod z lewej strony powoduje wspomniany błąd. Kod z prawej działa tak jak powinien.
W kodzie z lewej występuje dodatkowa właściwość, której zadaniem jest jedynie przekazanie danych do messagebox'a, wyświetlającego miejsce w tablicy poszczególnych liter.
Tablica wygląda następująco:
To cały kod, jeśli chodzi o liczby na wejściu (liczba odpowiedzialna za przesunięcie znaków), są od 0 do 25. Im większa liczba tym większy błąd przy przesunięciu.
Wie ktoś dlaczego tak się dzieje? I dlaczego kod dodający działa tak jak powinien, w przeciwieństwie do nie różniącego się praktycznie niczym kodu odejmującego?