Szyfr cezara - wyjaśnienie paru linijek

0

Witam, mam program, którym zastosowuje szyfr, gdzie znak zostaje przesunięty o 3 dalej w alfabecie.

program cezar;

{$APPTYPE CONSOLE}

uses
  SysUtils;

  const k = 2;// liczba przesuniecia

  var
  tekst:string;
  i,j,a:integer;
begin


writeln('Podaj tekst: ');
readln(tekst);
j:=length(tekst);
writeln('Ncisnij 1:zaszyfrowac albo 2:odszyfrowac? ');
readln(a);
case a of
  1:begin
    for i:=1 to j do
    begin
    if (ord(tekst[i])+k<=122) then tekst[i]:=chr(ord(tekst[i])+k)
    else
    tekst[i]:=chr(ord(tekst[i])+k-122+96);
    end;
    writeln(tekst);
    end;

  2:begin
     for i:=1 to j do
     begin
       if (ord(tekst[i])-k>=97) then tekst[i]:=chr(ord(tekst[i])-k)
       else
       tekst[i]:=chr(ord(tekst[i])-k+26);
     end;
     writeln(tekst);
   end;
end;
readln;

  { TODO -oUser -cConsole Main : Insert code here }
end.

Chciałbym bardzo prosić o dokładniejsze wytłumaczenie tej linijki:

begin
    for i:=1 to j do
    begin
    if (ord(tekst[i])+k<=122) then tekst[i]:=chr(ord(tekst[i])+k)
    else
    tekst[i]:=chr(ord(tekst[i])+k-122+96);
    end;
    writeln(tekst);
    end;

Rozumiem koncepcję programu, ale nie do końca rozumiem tą część, jest przesunięcie, ale czemu tam ma być naprzykład mniejsze bądź równe 122? Byłbym wdzięczny za odpowiedź

dodanie znaczników <code class="delphi"> - furious programming

0

Sprawdź tabele Ascii a pewnie się domyślisz skąd się wzięło 122 i 96:D http://pl.wikipedia.org/wiki/ASCII

0

Pewnie dlatego gdyż przy zastosowanym rozwiązaniu sprawdzne jest to z kod ASCII litery Z. Więcej w kod się nie zagłębiałem, gdyż nie został w ogóle sformatowany i nie jest wstawiony w odpowiednie do tego celu znaczniki.

0

Dziękuję bardzo za odpowiedź, teraz już rozumiem, oraz przepraszam za ten długi kod ale jestem nowicjuszem na tym forum

0

Ok, nie przejmuj się, bo kod nie jest za długi. Tylko odrzuca patrzenie na niego za pewne większość z nas, fakt że jest on niesformatowany. I nie jest wstawiony w odpowiednie znaczniki jak delpbi czy code=pascal, do kolorowania składni dzięki której byłby lepiej czytelny.

0
program cezar;
 
{$APPTYPE CONSOLE}
 
uses SysUtils;
 
const CodeKey = 2;// liczba przesunięcia

function code(const str:string;int key):string;
var I:Integer;
begin
  Result:=str;
  for I:=1 to Length(str) do if ('a'<=str[I])and(str[I]<='z') then Result[I]:=Chr(((Ord(str[I])-Ord('a')+26+k)mod(26))+Ord('a'))
end;
 
var  text,choice:string;
begin
  writeln('Podaj tekst: ');
  ReadLn(text);
  writeln('Nacisnij 1:zaszyfrowac albo 2:odszyfrowac? ');
  ReadLn(choice);
  if choice='1' then WriteLn(code(text,CodeKey));
  else if choice='2' then WriteLn(code(text,-CodeKey));
  else WriteLn('Nie ma takiej opcji');
  ReadLn;
end.
0

Dziękuję bardzo, ale myślę, że tamta wersja będzie dla mnie lepsza, gdyż niestety moja wiedza związana z pascalem jest na poziomie licealnym

1 użytkowników online, w tym zalogowanych: 0, gości: 1