Decodage_en_utilisant_l__analyse_frequentielle

publicité
ALGORITHMIQUE : UTILISATION D’UNE BOUCLE POUR…DE…A ET DES VARIABLES DU TYPE LISTE
I. Boucle POUR…DE…A
Il est possible de demander à un ordinateur de répéter une même tâche autant de fois que l’on veut.
Cela se fait grâce à ce qu’on appelle en informatique une boucle.
Exemple
On souhaite créer un algorithme qui affiche la racine carrée de tous les entiers allant
de 1 jusqu’à 50.
On pourrait commencer l’algorithme comme ci-contre, en allant jusqu’à sqrt(50).
On se rend compte immédiatement que cette méthode est beaucoup trop longue :on
serait obligés de répéter 50 fois le même genre de lignes de codes.
Grâce à une boucle POUR…DE…A, on peut faire un algorithme beaucoup plus
court comme indiqué ci-contre.
Explications :
 Il faut introduire une nouvelle variable n qui va servir à représenter tous les
entiers de 1 à 50 (n est appelé compteur de la boucle).
 Voici comment l’ordinateur interprète le code de la boucle elle-même :
1ère étape : l’ordinateur affecte à la variable n la valeur 1. Puis il effectue les opérations comprises entre DEBUT_POUR et FIN_POUR en remplaçant n par 1.
Autrement dit, racine va prendre la valeur sqrt(1) et l’ordinateur affiche le résultat.
2ème étape : l’ordinateur augmente automatiquement de 1 la valeur de n qui vaut maintenant 2. Puis il effectue à nouveau les
opérations comprises entre DEBUT_POUR et FIN_POUR en remplaçant n par 2. Autrement dit, racine va prendre la valeur
sqrt(2) et l’ordinateur affiche le résultat.
L’ordinateur continue ainsi le processus jusqu’à ce qu’il ait traite le cas où n vaut 50. On obtient bien ainsi la liste des racines
carrées des entiers de 1 jusqu’à 50.
II. Variables du type LISTE
Les listes AlgoBox sont des listes numérotées de nombres. Si on sélectionne pour variable une variable du type LISTE, il faut
indiquer dans le champ rang du terme de la liste le numéro du terme de la liste auquel on souhaite affecter une valeur.
Exemple
On souhaite créer un algorithme qui affiche la liste des racines carrées de tous les
entiers allant de 1 jusqu’à 50 en utilisant une variable du type LISTE et une boucle
POUR…DE…A.
Un algorithme possible est indiqué ci-contre.
list[n] représente le nième terme de la liste. n est le rang du terme du nième terme
de la liste.
Voici comment l’ordinateur interprète cet algorithme :
 1ère étape : l’ordinateur affecte à la variable n la valeur 1. Puis il remplace n par
1. Autrement dit, list[1] (c’est-à-dire le 1er terme de la liste) va prendre la valeur sqrt(1) et l’ordinateur affiche le résultat.
 2ème étape : l’ordinateur augmente automatiquement de 1 la valeur de n qui vaut maintenant 2. Puis il remplace n par 2.
Autrement dit, list[2] (c’est-à-dire le 2ème terme de la liste) va prendre la valeur sqrt(2) et l’ordinateur affiche le résultat.
L’ordinateur continue ainsi le processus jusqu’à ce qu’il ait traite le cas où n vaut 50. On obtient bien ainsi la liste des racines
carrées des entiers de 1 jusqu’à 50.
Décodage d’un message en utilisant l’analyse fréquentielle
1. Voici un algorithme qui calcule les pourcentages d’apparition de chaque lettre d’un texte codé.
 La variable textecode représente le message codé.
 La variable longueur représente le nombre de lettres du message codé.
 La variable stat est une liste de 26 nombres : le 1er terme de la liste sera le nombre d’apparition du A, le 2ème sera le nombre
d’apparitions du B, etc.
Regardons ce que fait l’ordinateur si le texte codé est ABACA.
Cette boucle permet d’initialiser la liste stat. On
attribue la valeur 0 à chaque terme de la liste
stat.
Cette instruction demande de taper le texte codé (en lettres majuscules, sans espace).
Ces instructions permettent d’attribuer le nombre de lettres
du message codé à la variable longueur.
Pour chaque lettre du texte codé :
on détermine son code ascii (textecode.charCodeAt(0) donne le
code ascii de la 1ère lettre, …, textecode.charCodeAt(longueur-1)
donne le code ascii de la dernière lettre) ; puis on calcule p qui
représente le rang de la lettre dans l’alphabet. stat[p] représente le
nombre d’apparitions de la p-ième lettre du texte codé.
Pour le rang de chaque lettre de l’alphabet :
on détermine la lettre qu’il représente, puis le pourcentage d’apparition de cette lettre dans le message codé.
2. Voici le message trouvé sur le papier froissé :
V EV FXQULD FJO OD EV YLEED VJ QXIO MXLIU MQDIOQD EV ODJCLDTD FXQULD QXJEDQ UXJU
OQXLU MDIOVIU ODJC PLEXTDUQDF VJ MQDTLDQ SDJ UXJQIDQ V HVJZWD QXJEDQ ZLIB
PLEXTDUQDF DIYLQXI VQQLYD VJ ZWVUDVJ ODVJ MQDIOQD ED ZWDTLI ZXTTJIVE V OQXLUD
UQXLFLDTD TVLFXI FJQ EV HVJZWD
Taper, puis lancer l’algorithme précédent. Compléter alors le tableau suivant (les pourcentages seront arrondis à 10-2) :
Lettre
Pourcentage
d’apparition
Lettre
Pourcentage
d’apparition
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
3. Des études statistiques sur un ensemble de textes permettent de mettre en évidence le pourcentage d’utilisation de chaque
lettre. Voici les résultats obtenus :
Lettre
Pourcentage
d’utilisation
Lettre
Pourcentage
d’utilisation
A
B
C
D
E
F
G
H
I
J
K
L
M
8,40
1,06
3,03
4,18
17,26
1,12
1,27
0,92
7,34
0,31
0,05
6,01
2,96
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
7,13
5,26
3,01
0,99
6,55
8,08
7,07
5,74
1,32
0,04
0,45
0,30
0,12
A l’aide des deux tableaux précédents, décrypter le message.
Exercices d’algorithmique
Exercice 1
Écrire un algorithme qui affiche la liste des carrés des entiers naturels allant de 5 à 35. On utilisera une boucle
POUR…DE…A. La liste devra être présentée en colonne.
Exercice 2
Écrire un algorithme qui demande de saisir les valeurs de deux entiers relatifs n et p avec n  p et qui affiche la somme de
tous les entiers compris entre n et p.
Téléchargement