Program odkóduje/zakóduje text zašifrovaný posunutím (každé písmeno sa nahradí písmenom, ktoré je v (cyklickej) anglickej abecede o n znakov ďalej, ostatné znaky ostanú bez zmeny

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Kategória: Matematika

Program: Sifra.pas
Súbor exe: Sifra.exe

Program odkóduje/zakóduje text zašifrovaný posunutím (každé písmeno sa nahradí písmenom, ktoré je v (cyklickej) anglickej abecede o n znakov ďalej, ostatné znaky ostanú bez zmeny.
{ SIFRA.PAS                                                          }
{ Program odkoduje/zakoduje text zasifrovany posunutim               }
{ (kazde pismeno sa nahradi pismenom, ktore je v (cyklickej)         }
{ anglickej abecede o n znakov dalej, ostatne znaky ostanu bez zmeny.}
{                                                                    }
{ Datum:16.11.2006                             http://www.trsek.com  }
 
program sifra;
 
const tmp_subor = 'subor.tmp';
 
var sm   : string;
    n    : integer;
    subor: string;
 
 
{ zakoduje/odkoduje subor }
procedure Zakoduj( subor:string; n:integer );
var f: file of char;
   f2: file of char;
   ch: char;
    p: integer;
 
begin
  Assign (f,subor);
  Assign (f2,tmp_subor);
  Reset  (f);
  Rewrite(f2);
 
  while( not(eof(f))) do
   begin
     { precitame }
     Read(f,ch);
 
     { budem kodovat male pismena ? }
     if( ch in ['a'..'z'])then
      begin
        p:=ord(ch)+n;
 
        { nad rozsah }
        while(p>ord('z'))do
          p:=p-ord('z')+ord('a')-1;
 
        { pod rozsah }
        while(p<ord('a'))do
          p:=ord('z')-(ord('a')-p)+1;
 
        ch:=chr(p);
      end;
 
     { budem kodovat velke pismena ? }
     if( ch in ['A'..'Z'])then
      begin
        p:=ord(ch)+n;
 
        { nad rozsah }
        while(p>ord('Z'))do
          p:=p-ord('Z')+ord('A')-1;
 
        { pod rozsah }
        while(p<ord('A'))do
          p:=ord('Z')-(ord('A')-p)+1;
 
        ch:=chr(p);
      end;
 
     { zapiseme }
     write(f2,ch);
   end;
 
   { zatvorime }
   close(f);
   close(f2);
end;
 
 
{ premenuje docastny subor na povodny }
procedure Premenuj( subor:string );
var f: file of char;
begin
  { zmazeme povodny }
  Assign(f,subor);
  Erase(f);
 
  { premenuje temp }
  Assign(f,tmp_subor);
  Rename(f,subor);
end;
 
 
{ hlavny }
BEGIN
  write('Zada meno suboru : ');
  readln(subor);
 
  write('Ake je posunutie : ');
  readln(n);
 
  write('Mam zakodovat, odkodovat (stlac z,o) : ');
  readln(sm);
 
  { vykona zakodovanie/odkodovanie }
  if( sm='z' )then begin
    Zakoduj(subor,n);
    Premenuj(subor);
    writeln('Subor zakodovany.');
  end
  else begin
    Zakoduj(subor,(-1)*n);
    Premenuj(subor);
    writeln('Subor zakodovany.');
  end;
 
  Readln;
END.