program Ex_08_s1;
uses wincrt;
const p=17;
q=19;
e=5;
type
tab=array[1..256] of integer;
var t:tab;
n,i:integer;
msg:string;
function verif (ch:string):boolean;
var
test:boolean;
begin i:=0;
repeat inc(i);
test:=upcase(ch[i]) in ['A'..'Z'];
until (test=false) or (i=length(ch));
end;
procedure saisie (var msg:string);
begin repeat
writeln('Donner un message en lettres : ');
readln(msg);
until verif(msg);
end;
function expo(x,m:integer):longint;
var
j,xx:longint;
begin xx:=x;
for j:=2 to m do xx:=xx*x;
expo:=xx;
end;
procedure ordre(msg:string;var t:tab; var n:integer);
var
ex:longint;
begin
n:=length(msg);
for i:=1 to n do begin
t[i]:=ord(upcase(msg[i]))-64;
t[i]:= expo(t[i],e) mod (p*q) end;
end;
procedure affiche(t:tab;n:integer);
begin
writeln('Le tableau de code obtenu');
for i:=1 to n do write(t[i],' | ');
end;
begin
saisie(msg);
ordre(msg,t,n);
affiche(t,n);
end.