Advertisement
LOVEGUN

Night Coding Exercice 3 (Classe)

Feb 3rd, 2021
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.61 KB | None | 0 0
  1. Program exercice3;
  2. Uses Wincrt;
  3. Var
  4.   msg,cle: String;
  5.   f: Text;
  6. Type
  7.   mat = Array ['A'..'F','A'..'G'] Of Char;
  8. Procedure creation (Var f:Text);
  9. Begin
  10.   Assign (f,'C:\bac\prog\Révision\revi.txt');
  11. End;
  12. Function verif1 (ch:String): Boolean;
  13. Var
  14.   test: Boolean;
  15.   i: Integer;
  16. Begin
  17.   i := 0;
  18.   Repeat
  19.     i := i+1;
  20.     test := ch[i] In ['a'..'z','0'..'9',' '];
  21.   Until (i=Length(ch)) Or (test=False);
  22.   verif1 := test;
  23. End;
  24. Function verif2 (ch:String): Boolean;
  25. Var
  26.   test: Boolean;
  27.   i: Integer;
  28. Begin
  29.   i := 0;
  30.   Repeat
  31.     i := i+1;
  32.     test := ch[i] In ['A'..'Z'];
  33.   Until (i=Length(ch)) Or (test=False);
  34.   verif2 := test;
  35. End;
  36. Procedure saisie (Var msg,cle:String);
  37. Begin
  38.   Repeat
  39.     Writeln ('Saisir le msg: ');
  40.     Readln (msg);
  41.   Until (Length (msg)<=18) And (verif1(msg));
  42.   Repeat
  43.     Writeln ('Saisir la clé: ');
  44.     Readln (cle);
  45.   Until (Length(cle)=6) And (verif2(cle));
  46. End;
  47. Function crypt (M1:mat;c:Char): String;
  48. Var
  49.   i,j: Char;
  50.   test: Boolean;
  51. Begin
  52.   test := False;
  53.   i := '@';
  54.   Repeat
  55.     i := Succ(i);
  56.     j := '@';
  57.     Repeat
  58.       j := Succ(j);
  59.       test := c=M1[i,j];
  60.     Until (j='F') Or (test);
  61.   Until (i='F') Or (test);
  62.   crypt := i+j;
  63. End;
  64. Procedure remplir (Var M2:mat;cle,msgi:String);
  65. Var
  66.   j,i: Char;
  67.   x: Integer;
  68. Begin
  69.   For j:='A' To 'F' Do
  70.     M2['A',j] := cle[Ord(j)-64];
  71.   x := 0;
  72.   For i:='B' To 'G' Do
  73.     For j:='A' To 'F' Do
  74.       Begin
  75.         x := x+1;
  76.         If x<=Length(msgi) Then M2[i,j] := msgi[x]
  77.         Else M2[i,j] := ' ';
  78.       End;
  79. End;
  80. Procedure tri (Var t:mat);
  81. Var
  82.   n,i,j: Char;
  83.   aux: Char;
  84.   echange: Boolean;
  85. Begin
  86.   n := 'F';
  87.   Repeat
  88.     echange := False;
  89.     For j:='A' To Pred(n) Do
  90.       If Ord(t['A',j])>Ord (t['A',Succ(j)]) Then
  91.         Begin
  92.           For i:='A' To 'G' Do
  93.             Begin
  94.               aux := t[i,j];
  95.               t[i,j] := t[i,Succ(j)];
  96.               t[i,Succ(j)] := aux;
  97.               echange := True;
  98.             End;
  99.         End;
  100.     n := Pred(n);
  101.   Until echange=False;
  102. End;
  103. Procedure traitement (Var f:Text;msg,cle:String);
  104. Var
  105.   i,j: Char;
  106.   x: Integer;
  107.   M1,M2: mat;
  108.   msgi: String;
  109.     ch:string;
  110. Begin
  111.   Reset (f);
  112.   For i:='A' To 'F' Do
  113.     For j:='A' To 'F' Do
  114.       Readln (f,M1[i,j]);
  115.   Close (f);
  116.   msgi := '';
  117.   For x:=1 To Length(msg) Do
  118.     If msg[x]<>' ' Then msgi := msgi+crypt(M1,msg[x])
  119.     Else msgi := msgi+' ';
  120.   remplir (M2,cle,msgi);
  121.   tri (M2);
  122.     ch:='';
  123.     For j:='A' To 'G' Do
  124.       For i:='B' To 'F' Do
  125.         ch:=ch+M2[i,j];
  126.     writeln (ch);
  127. End;
  128. Begin
  129.   creation (f);
  130.   saisie (msg,cle);
  131.   traitement (f,msg,cle);
  132. End.
  133.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement