program cle_cryptage;
uses wincrt;
var
chcle,msg:string;
function verif(ch:string):boolean;
var
test:boolean;
i:integer;
begin i:=0;
repeat inc(i);
test:=ch[i] in ['A'..'Z',' '];
until (test=false) or (i=length(ch));
verif:=test;
end;
procedure saisie(var msg:string);
begin repeat
writeln('Donner une chaine composee de lettres Majuscules et des espaces');
readln(msg);
until (verif(msg)) and (pos(' ',msg)=0) and (msg[1]<>' ') and (msg[length(msg)]<>' ' end;
function verife(ch:string):boolean;
var
test:boolean;
i:integer;
begin i:=0;
repeat inc(i);
test:=ch[i] in ['0'..'9'];
until (test=false) or (i=length(ch));
verife:=test;
end;
procedure saisir(var chcle:string; msg:string);
begin repeat
writeln('Donner une chaine composee des chiffres et de longueur ',length(msg));
readln(chcle);
until (verife(chcle)) and (length(chcle)=length(msg));
end;
procedure cryptage (msg,chcle:string);
var
c,e,j,i:integer;
begin
WRITELN('Message Initial : ',msg);
WRITELN('La Cle de cryptage : ',chcle);
for i:=1 to length(msg) do if msg[i]<>' ' then
begin
val(chcle[i],c,e);
j:=c+(ord(msg[i])-ord('A')+1);
if j >26 then j:= j mod 26;
msg[i]:=chr(ord('A')-1+j) end;
WRITELN('Message Code : ',msg);
end;
begin
saisie(msg);
saisir(chcle,msg);
cryptage(msg,chcle);
end.