Vous êtes sur la page 1sur 5

Lycée Pilote de Sousse Année scolaire : 2011/2012

Matière : Informatique Devoir de Synthèse Durée : 1H30Min


Mr. Med Abdallah Mani N° 2 Classe : 4 Tech
Nom & Prénom : ……………………………………………………. Note : ……. / 20

Exercice 1. (4.5 pts)


Critiquez le choix de la structure itérative à chaque cas, proposez une boucle
plus convenable et développez votre solution

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=[i1, maxt[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 :
ii+1 Max=[i1, maxt[1]]Répéter
[] Si t[i]>max alors
jusqu'à (i=n) Max t[i]
FinSI
ii+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;

procedure saisie(var fch:string;var fn:integer);


var
test:boolean;
i:integer;
begin
repeat
writeln('Donner une chaine :');
readln(fch);
test:=true;
for i:=1 to length(fch) do
if not (fch[i] in [' ','A'..'Z','a'..'z']) then
test:=false;
until (test);
fn:=length(fch);

end;

procedure espace(var fch:string;var fe:tabs;var fne:integer);


var
i,j:integer;
begin
j:=1;
for i:=1 to length(fch) do
if(fch[i]=' ')then
begin
fe[j]:=i;
j:=j+1;
end;
fne:=j-1;
while(pos(' ',fch)<>0) do
begin
delete(fch,pos(' ',fch),1);
end;

end;

procedure binair(fch:string;var fb:tab;var fn:integer);


var

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;

procedure rotation(var fb:tab;fn:integer);


var
j,i,k:integer;
chx,chxx:string[8];
begin
for i:=1 to fn do
begin
chx:=fb[i];
k:=0;
for j:=1 to 8 do
if chx[j]='1' then
k:=k+1;
chxx:=copy(chx,1,k);
delete(chx,1,k);
chx:=chx+chxx;
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;

procedure asci(fb:tab;fn:integer;var fchrr:string);


var
c,i,j:integer;
chx:string[8];
begin
fchrr:='';
for i:=1 to fn do
begin
chx:=fb[i] ;
c:=0;
for j:=1 to 8 do
if chx[j]='1' then
c:=c+exp(8-j);
fchrr:=fchrr+chr(c);
end;
end;

procedure inser(fe:tabs;fne:integer;var fchrr:string);


var
i:integer;
begin
for i:=1 to fne do
insert(' ',fchrr,fe[i]);
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

Vous aimerez peut-être aussi