Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program exercice3;
- Uses Wincrt;
- Var
- msg,cle: String;
- f: Text;
- Type
- mat = Array ['A'..'F','A'..'G'] Of Char;
- Procedure creation (Var f:Text);
- Begin
- Assign (f,'C:\bac\prog\Révision\revi.txt');
- End;
- Function verif1 (ch:String): Boolean;
- Var
- test: Boolean;
- i: Integer;
- Begin
- i := 0;
- Repeat
- i := i+1;
- test := ch[i] In ['a'..'z','0'..'9',' '];
- Until (i=Length(ch)) Or (test=False);
- verif1 := test;
- End;
- Function verif2 (ch:String): Boolean;
- Var
- test: Boolean;
- i: Integer;
- Begin
- i := 0;
- Repeat
- i := i+1;
- test := ch[i] In ['A'..'Z'];
- Until (i=Length(ch)) Or (test=False);
- verif2 := test;
- End;
- Procedure saisie (Var msg,cle:String);
- Begin
- Repeat
- Writeln ('Saisir le msg: ');
- Readln (msg);
- Until (Length (msg)<=18) And (verif1(msg));
- Repeat
- Writeln ('Saisir la clé: ');
- Readln (cle);
- Until (Length(cle)=6) And (verif2(cle));
- End;
- Function crypt (M1:mat;c:Char): String;
- Var
- i,j: Char;
- test: Boolean;
- Begin
- test := False;
- i := '@';
- Repeat
- i := Succ(i);
- j := '@';
- Repeat
- j := Succ(j);
- test := c=M1[i,j];
- Until (j='F') Or (test);
- Until (i='F') Or (test);
- crypt := i+j;
- End;
- Procedure remplir (Var M2:mat;cle,msgi:String);
- Var
- j,i: Char;
- x: Integer;
- Begin
- For j:='A' To 'F' Do
- M2['A',j] := cle[Ord(j)-64];
- x := 0;
- For i:='B' To 'G' Do
- For j:='A' To 'F' Do
- Begin
- x := x+1;
- If x<=Length(msgi) Then M2[i,j] := msgi[x]
- Else M2[i,j] := ' ';
- End;
- End;
- Procedure tri (Var t:mat);
- Var
- n,i,j: Char;
- aux: Char;
- echange: Boolean;
- Begin
- n := 'F';
- Repeat
- echange := False;
- For j:='A' To Pred(n) Do
- If Ord(t['A',j])>Ord (t['A',Succ(j)]) Then
- Begin
- For i:='A' To 'G' Do
- Begin
- aux := t[i,j];
- t[i,j] := t[i,Succ(j)];
- t[i,Succ(j)] := aux;
- echange := True;
- End;
- End;
- n := Pred(n);
- Until echange=False;
- End;
- Procedure traitement (Var f:Text;msg,cle:String);
- Var
- i,j: Char;
- x: Integer;
- M1,M2: mat;
- msgi: String;
- ch:string;
- Begin
- Reset (f);
- For i:='A' To 'F' Do
- For j:='A' To 'F' Do
- Readln (f,M1[i,j]);
- Close (f);
- msgi := '';
- For x:=1 To Length(msg) Do
- If msg[x]<>' ' Then msgi := msgi+crypt(M1,msg[x])
- Else msgi := msgi+' ';
- remplir (M2,cle,msgi);
- tri (M2);
- ch:='';
- For j:='A' To 'G' Do
- For i:='B' To 'F' Do
- ch:=ch+M2[i,j];
- writeln (ch);
- End;
- Begin
- creation (f);
- saisie (msg,cle);
- traitement (f,msg,cle);
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement