USES crt ;
TYPE mot = string[255] ;
VAR message, cible : mot ;
choix : integer ;
FUNCTION CIRC(x:char):char ;
Var res : char ;
Begin
if x=' ' then res:=x
else if x='Z' then res:='A'
else if x='z' then res:='a'
else res:=succ(x) ;
CIRC:=res ;
End ;
FUNCTION CIRCINV(x:char):char ;
Var res : char ;
Begin
if x=' ' then res:=x
else if x='A' then res:='Z'
else if x='a' then res:='z'
else res:=pred(x) ;
CIRCINV:=res ;
End ;
PROCEDURE TRADUIT(m1:mot ; var m2:mot ; test:boolean) ;
Var c : char ;
i, j : integer ;
Begin
m2:='' ;
for i:=1 to length(m1) do
begin
c:=m1[i] ;
for j:=1 to i do
if test
then c:=CIRC(c)
else c:=CIRCINV(c)
;
m2:=m2+c ;
end ;
End ;
PROCEDURE CODE(m1:mot ; var m2:mot) ;
Begin
TRADUIT(m1,m2,true) ;
End ;
PROCEDURE DECODE(m1:mot ; var m2:mot) ;
Begin
TRADUIT(m1,m2,false) ;
End ;
BEGIN
clrscr ;
repeat
(* saisie du message *)
write('Message ? ') ; readln(message) ;
(* menu *)
repeat
writeln('-1- laisser ce message inchange') ;
writeln('-2- coder ce message') ;
writeln('-3- decoder ce message') ;
writeln('-4- changer de message') ;
writeln('-0- terminer') ;
readln(choix) ;
case choix of
1 : begin cible:=message
; writeln(cible) ; end ;
2 : begin CODE(message,cible)
; writeln(cible) ; end ;
3 : begin DECODE(message,cible)
; writeln(cible) ; end ;
end ;
until (choix=0) or (choix=4) ;
until choix=0 ;
END.
(********************)