Beruflich Dokumente
Kultur Dokumente
Cas Proposition
Saisie d’un entier n positif : Critiques :
N=[] Tantque (n<0) faire Pas de valeur pour N pour la comparaison
N=donnée (’’Donner un entier positif :’’) Structure itératives proposées :
Fin Tantque Répéter jusqu’à
Développement de la boucle :
N=[]Répéter
N=Donnée(’’Donner un entier positif :’’)
Jusqu’à (N>0)
Effacement des chiffres dans une chaine : Critiques :
Ch=[] Pour i de 1 à long(ch) faire Ne supprime pas les chiffres successifs
[] Si ch[i] dans [‘’0’’..’’9’’] alors Structure itératives proposées :
Efface (ch,i,1) Répéter jusqu’à
FinSi Développement de la boucle :
FinPour i:=1;
repeat
if ch[i] in ['0'..'9'] then
begin
delete(ch,i,1) ;
i:=i-1;
end;
i:=i+1;
until(i>length(ch));
Calcul du maximum dans un tableau : Critiques :
Max=[i1, maxt[1]]Répéter Ne vérifie pas la dernière case du tableau
[] Si t[i]>max alors Structure itératives proposées :
Max t[i] Répéter jusqu’à ou Pour
FinSI Développement de la boucle :
ii+1 Max=[i1, maxt[1]]Répéter
[] Si t[i]>max alors
jusqu'à (i=n) Max t[i]
FinSI
ii+1
jusqu'à (i=n)
Page 1
Exercice 2. (1.5pts)
Rôle Déclaration Pascal (TYPE, CONST,
VAR)
Un type Mois contenant tous les numéros des Type
mois Mois=1..12 ;
Un type Voy contenant les six voyelles de Type
l’alphabet Voy=(a,e,i,o,y,u) ;
Un objet Newton contenant la constante de Const
newton de valeur 9.8 Newton=9.8 ;
Un Variable contenant une chaine de 10 Var
caractères Ch :string[10] ;
Un type Tab tableau contenant des entiers ayant Type
pour indices les caractères de l’alphabet Tab=array[‘A’..’Z’] of integer ;
Un objet contenant le texte PASCAL Const
Chc=’PASCAL’ ;
Problème. (3 pts)
Cryptage de Hauffman
Le chiffrement, aussi appelé cryptage, est le procédé grâce auquel on souhaite
rendre la compréhension d'un document impossible à toute personne qui n'a
pas la clé de chiffrement.
Le principe de l’algorithme de cryptage selon la clé de chiffrement de
Hauffman est le suivant :
1. L’utilisateur saisie une chaine contenant que des caractères
alphabétiques (minuscules et majuscules) et des espaces.
2. Sauvegarder les positions des espaces pour pouvoir les insérer après le
cryptage.
3. Convertir chaque caractère en sa représentation binaire sur 8 bits
4. Sur chaque représentation binaire de chaque caractère effectuer K
rotation à gauche (le nombre de rotation K représente le nombre de 1
dans la représentation binaire du caractère).
5. Convertir le nouveau chiffre binaire en caractère
6. Réinsérer les espaces dans la chaine
7. Afficher la nouvelle chaine cryptée.
Exemple :
Le caractère ‘’z’’ minuscule a la représentation binaire suivante :01111010
122 2 Le code binaire se lit de bas en haut
0 61 2 Le nombre de rotation k à faire est 5
1 30 2 Après rotation le code binaire devient : 01001111
0 15 2 Pour convertir en code ASCII = 26+23+22+21+20=79
1 7 2 0 1 0 0 1 1 1 1
1 3 2 2 7
2 6
25
24
23
22
21 20
1 1 2 Le caractère ‘’z’’ après cryptage devient ‘’O’’
1 0 La Chaine ‘’Bac Tech’’ devient ‘’’’.
Page 2
program devoir;
uses wincrt;
type
tab= array [1..256] of string[8];
tabs= array[1..256] of byte;
var
ch,chrr:string;
n,ne:integer;
e:tabs;
b:tab;
end;
end;
Page 3
di,i,j,asc:integer;
x,chx:string;
begin
for i:=1 to fn do
begin
asc:=ord(fch[i]);
chx:='';
di:=asc;
repeat
asc:=di;
di:=asc div 2;
str(asc mod 2,x);
chx:=x+chx;
until (di=0);
for j:=1 to 8-length(chx) do
chx:='0'+chx;
fb[i]:=chx;
end;
end;
function exp(fx:byte):byte;
var
i,x:integer;
begin
x:=1;
for i:=1 to fx do
x:=x*2;
exp:=x;
Page 4
end;
begin
saisie(ch,n);
writeln('La chaine d''origine est :',ch);
espace(ch,e,ne);
n:=n-ne;
binair(ch,b,n);
rotation(b,n);
asci(b,n,chrr);
inser(e,ne,chrr);
writeln('La chaine cryptée est :',chrr);
end.
Page 5