1 - Fabien Herbaut

publicité
Activités : sur le thème du codage
Ce type d’activité est une étape préliminaire quasi-obligatoire dans la mesure où le choix du codage
(et par là même du décodage) est la première problématique à résoudre pour pouvoir transmettre
de l’information à un disque dur.
Toutefois, il n’est pas nécessaire d’accorder une activité uniquement sur ce sujet. Le choix de codage
peut être introduit en même temps que le chiffrement choisi.
Problématique : Transmission de données via un ordinateur.
Objectifs : sensibilisation à l’outil informatique.
Connaissances mise en œuvre : dénombrement, écriture binaire.
I.
Activité I : Dénombrement et écriture en base 2.
Pour fonctionner, un ordinateur n’utilise que des 0 et des 1. Dans ce contexte, une variable
pouvant prendre uniquement les valeurs 0 ou 1 s’appelle un bit.
Ce terme de vocabulaire provient des mots anglais « Binary Digit » signifiant « Chiffre Binaire ».
Une suite de huit bits est appelé un octet. Les informations sont transmises octet par octet.
Pour simplifier l’utilisation d’un ordinateur, il a alors fallu trouver des solutions pour coder les lettres
de l’alphabet (ainsi que les autres caractères : ponctuation, chiffres, caractères spéciaux, …), de telle
sorte qu’en tapant sur la touche « A » du clavier, l’information « A » soit transmise au disque dur.
Des organismes internationaux ont déterminé des codes standards :
- le code ASCII « American Standard Code for Interchange Information » code les caractères sur un
octet dont le dernier bit est 0.
- les codes UTF8, UTF16 et UTF32 codent les caractères respectivement sur 8, 16 et 32 bits.
1.
2.
3.
4.
5.
Combien dénombre-t-on d’octets différents ?
Combien de caractères pouvons-nous coder sur un octet ?
Combien de caractères peuvent être coder avec le code ASCII ?
Combien de caractères peuvent être coder en UTF8, UTF16, UTF32 ?
Quel avantage a-t-on à utiliser 16 bits au lieu de 8 ? Quel en est l’inconvénient majeur ?
Afin de nous simplifier la compréhension du codage nous pouvons utiliser une numérotation
décimale, qui nous est bien plus naturelle.
Pour cela, on effectue une correspondance :
L’octet 00000000 s’écrit 0 en écriture décimale. De même 00000001 correspond à 1, ensuite
00000010 correspond à 2, puis 00000011 à 3, 00000100 à 4…
1.
2.
3.
4.
5.
Quel octet correspond à 14 ?
Quel nombre décimal correspond à l’octet 00010011 ?
Quel est le plus grand entier représenté par un octet ?
Soit 𝑛 un entier positif, conjecturer l’écriture de 2𝑛 par une suite de bits.
Démontrer cette conjecture par récurrence. ( ?)
Problématique : Transmission de données via un ordinateur.
Objectifs : sensibilisation à l’outil informatique.
Connaissances mise en œuvre : tableur excel, algorithmique, Boucle « For »,
listes et chaine de caractères
II.
Activité 2 : Découverte du code ASCII
Pour découvrir le code ASCII, vous pouvez :
- trouver la correspondance sur internet (avec wikipedia par exemple)
- utiliser certains logiciels qui permettent de connaitre le code ASCII d’un caractère en écriture
décimale.
I.


C’est le cas du tableur Excel :
La fonction CODE(x) prend en entrée un caractère x et renvoie son code ASCII.
La fonction CAR(x) prend en entrée un nombre entier x et renvoie le caractère correspond en
code ASCII.
Vous pourrez ainsi répondre à ces questions :
1. Par quels entiers sont codées les majuscules de l’alphabet latin ?
2. Quel est le code ASCII de la touche SPACE ?
3. Que donne le code des premiers entiers ?
4. Par la suite, le code ASCII a été étendu en utilisant la totalité des bits de l’octet.
Quels types de caractère ont été ajoutés ?
II.


C’est également le cas d’AlgoBox :
La fonction 𝐶ℎ𝑎𝑖𝑛𝑒.charCodeAt(𝑖) renvoie le code ASCII (décimal) du 𝑖 𝑖è𝑚𝑒 caractère de
la chaine de caractères 𝐶ℎ𝑎𝑖𝑛𝑒.
La fonction String.fromCharCode(𝑛) prend en entrée un entier 𝑛 et renvoie le caractère
correspondant en code ASCII.
C’est l’occasion d’utiliser :
- les listes et les chaînes de caractères (et les procédures associées comme Chaine.length qui
donne la longueur d’une chaine de caractères)
- les boucles « Pour … allant de …. à … », appelées plus généralement « boucle For »
Le but est de créer :
-un algorithme prenant en entrée une chaine de caractères et renvoyant son code ASCII.
- un algorithme prenant en entrée une liste d’entiers et le traduisant en chaîne de caractères.
1. « Déclarer une variable » de type Chaine. On l’appellera Texte.
« Déclarer une variable » de type Liste. On l’appellera Code.
2. On commence par tester la saisie et l’affichage de chaine de caractères.
Pour cela : - ajouter l’instruction « Lire Variable Texte »
- puis ajouter l’instruction « Afficher Variable Texte »
Tester l’algorithme obtenu.
3. Testons maintenant la procédure Chaine.length.
Pour cela : - « Déclarer une variable » de type nombre. On la notera 𝑛.
- utiliser l’instruction « affecter valeur à variable » et la procédure Chaine.length
pour que la variable 𝑛 représente le nombre de caractères de la chaine Texte.
- ajouter l’instruction « Afficher Variable 𝑛 »
Tester l’algorithme obtenu.
4. Testons maintenant la procédure Chaine.charCodeAt(rang)
Pour cela : - utiliser l’instruction « affecter valeur à variable » pour affecter au premier terme
de la liste Code le code ASCII du premier terme de la chaine de caractère Texte.
Attention : le rang du premier terme d’une liste est 1 alors que le rang du premier terme
d’une chaine est 0.
On affecte donc à la variable Code[1] la valeur Texte.charCodeAt(0).
- afficher la variable Code[1]
Tester l’algorithme obtenu et vérifier qu’il renvoie bien le code ASCII du premier caractère de
la chaine Texte.
5. Construisons maintenant une boucle « Pour… de… à » afin d’effectuer plusieurs fois le
même type d’instruction.
Pour cela : - « Déclarer une variable » de type nombre. On la notera 𝑖.
- ajouter une boucle « Pour … de … à » : Pour 𝑖 allant de 1 à 3 : les instructions
figurant à l’intérieur de la boucle seront alors effectuées trois fois. La première fois, la
variable 𝑖 vaudra 1, la deuxième fois elle vaudra 2 et la troisième fois elle vaudra 3.
- ajouter les deux instructions de l’étape précédente à l’intérieur de la boucle.
Tester l’algorithme obtenu. Que renvoie-t-il ?
6. Conserver l’algorithme précédent et ajouter une troisième instruction dans la boucle :
- « Afficher message » « . » (le message à affiché est un point).
Tester l’algorithme obtenu. Que renvoie-t-il ?
Quel est l’intérêt de cette nouvelle instruction ?
7. Conserver l’algorithme précédent et remplacer dans les instructions de la boucle :
- le rang 1 par le rang 𝑖.
- le rang 0 par le rang 𝑖 − 1.
Tester l’algorithme obtenu. Que renvoie-t-il ?
8. Conserver l’algorithme précédent et remplacer dans la boucle la valeur 3 par la variable 𝑛
représentant la longueur de la chaine Texte.
Tester l’algorithme obtenu. Que renvoie-t-il ?
9. Une fois l’algorithme souhaité construit, ajouter un message de bienvenue à l’utilisateur,
lui indiquant le but du programme et la marche à suivre.
Vous pouvez suivre le même type de démarche pour créer le second algorithme qui effectue
la démarche inverse : il renvoie une chaine de caractère à partir d’une liste de nombre.
Téléchargement