Bonsoir à tous les membres de ce forum.

Je suis un étudiant en 1ère année de Programmation. Je dois exécuter un TP dont la teneur est :
Faites un programme basé sur le chiffre de César. Chaque lettre est remplacée par celle qui vient n rangs (n>=2) après elle. Pour les chiffres, il faut adopter le même principe. Les signes de ponctuation restent inchangés et les caractères blancs (espaces) sont remplacés par l'étoile. Un menu doit permettre de saisir le texte du message, d'afficher le message à l'écran, de l'enregistrer dans un fichier, de le crypter, d'afficher le résultat du cryptage, d'enregistrer le message dans un fichier de sortie, de lire un message crypté contenu dans un fichier, de pouvoir le décrypter, d'afficher le message (originel) décrypté, de pouvoir l'enregistrer dans un fichier de sortie.

Recommandations :
Chaque méthode sera écrite sous la forme d'une procédure dont les paramètres minimaux sont un fichier texte en entrée et un fichier texte en sortie.
Jusqu'à maintenant, je n'ai réussi qu'à écrire deux (2) programmes (au lieu d'un programme contenant deux (2) procédures, du fait que je n'arrive pas à une conciliation) distincts pour le cryptage et le décryptage.

J'ai réussi à crypter uniquement l'alphabet (sans espace ni chiffre) avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
z:=(((ord(saisie[i])-97+decallage)mod 26)+97)
.
Je sais qu'il faut faire une sorte de table dans laquelle il faut regrouper les chiffres et les lettres de l'alphabet. Si le caractère saisi fait partie de l'alphabet, il faut appliquer la formule précédente sinon
Code : Sélectionner tout - Visualiser dans une fenêtre à part
chaine_sortie:=chaine_entrée
Dès qu'un espace est rencontré, il doit être replacé par une étoile (j'ai écrit cette instruction mais l'espace est automatiquement chiffré en fonction du décalage). J'espère avoir été exhaustif dans l'exposé de mon problème. Merci d'avance à tous ceux qui essayeront de m'aider.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Program cryptage;
 
uses crt;
 
type alphanum=record
 
     bet:'a'..'z';
 
     num:'0'..'9';
 
     end;
 
var msg,result,saisie:string;var F,crypt:Text;var sai,ais:alphanum;
 
var i,j,z,decallage:integer;var clair:boolean;
 
begin
 
clrscr;
 
Assign(F,'C:\TP\clair.txt');
 
  Rewrite(F);
 
  write('Entrez le message … crypter:');
 
  readln(saisie);
 
 writeln('Le message … crypter est:',saisie,'.');
 
 write(F,saisie);
 
Assign(crypt,'C:\TP\crypt.txt');
 
  rewrite(crypt); begin
 
write('Choisissez un d‚calage compris entre 2 et 36:');
 
  read(decallage);if decallage=1 then writeln
 
  ('Veuillez rep‚ter l''op‚ration en respectant le d‚calage pr‚vu.');
 
if decallage=1  then repeat read(decallage) until decallage>=2;end;
 
           for i:=1 to length(saisie) do
 
           begin
 
         if (saisie[i]=sai.bet) and (saisie[i]=sai.num) then
 
    z:=((ord(saisie[i])+decallage)mod 36) else msg:=saisie[i];msg:=msg+chr(z);
 
     if ord(saisie[i])=32 then msg:=msg+'*';result:=result+msg;end;
 
Writeln(crypt,result);readln;
 
     begin
 
 writeln('Avec un d‚callage de ',decallage,' rangs,','votre message devient:',result,'.');readln;
 
 close(crypt);
 
  close(F);end;
 
  End.
.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Program decryptage;
 
uses crt;
 
var result,res,res1:string;var crypt,decrypt:Text;
 
var g,tail,dec,decallage,y:integer;
 
begin
 
clrscr;
 
 Assign(crypt,'C:\crypt.txt');
 
 reset(crypt);
 
 while not eof(crypt) do
 
 readln(crypt,result);
 
 writeln('Le message crypt‚ est:',result,'.');
 
Assign(decrypt,'C:\TP\decrypt.txt');
 
  rewrite(decrypt);
 
  write('Entrez le d‚calage utilis‚ pour le cryptage de ce message:');
 
  read(dec);
 
 tail:=length(result);
 
  for g:=1 to tail do
 
  begin
 
  y:=(((ord(result[g])-97-dec)mod 26)+97);res:=res+chr(y);
 
if ord(result[g])=42 then res:=res+'';end;res1:=res1+res;
 
readln; Writeln(decrypt,res1);
 
begin
 
writeln('Le message (originel) d‚crypt‚ est:',res1,'.');readln;
 
  close(decrypt);
 
 close(crypt); end;
 
 End.