MPSI 831, PCSI 833 Lycée Masséna
Exercice 10. Lorsque l’utilisateur appuie simplement sur la touche Entrée, input renvoie une chaîne de caractères
vide. Reprendre l’exercice précédent en une fonction somme2(), qui permet à l’utilisateur d’entrer autant de nombres
qu’il le souhaite. Lorsqu’il appuie sur la touche Entrée sans avoir écrit de nombre, la fonction renvoie la somme.
>>> somme2()
58
74
132
Exercice 11. Reprendre l’exercice précédent en une fonction somme3(). Là, l’utilisateur entre les nombres en une
seule fois, séparés par des espaces (on pourra utiliser split, notamment).
>>> somme3()
85 78 140 25 7 63 6985 1
7384
(Même chose, on a tapé la première ligne au clavier, le nombre sur la seconde est la somme).
4 Retour sur les codes correcteurs d’erreurs
Les caractères ASCII sont représentables sur 7 bits. Usuellement en informatique la mémoire est découpée en blocs
de 8 bits (un tel bloc s’appelle un octet) : si on décide de représenter un caractère par octet, il reste un bit libre que
l’on peut utiliser comme bit de parité.
On rappelle que pour encoder une liste de bits par bit de parité, on lui rajoute un bit correspondant à la parité
du nombre de 1 dans la liste. Par exemple pour la liste [0, 1, 0] il y a un nombre impair de 1, donc on rajoute 1 à
la fin, pour obtenir [0, 1, 0, 1]. Inversement, [0, 1, 1] est encodée en [0, 1, 1, 0]. Il est très simple de tester
si après une transmission une erreur s’est produite : il s’agit simplement de compter le nombre de « 1 » dans la liste
reçue, s’il est impair une erreur s’est produite.
Revenons aux caractères ASCII : le caractère 'a'dont le code ASCII est 97, est représentable sur 7 bits en
binaire par 1100001 2. On peut donc lui adjoindre un bit de parité et le représenter comme la suite de 8 bits
[1, 1, 0, 0, 0, 0, 1, 1]. De même, un espace simple (' ') a pour code 32, représenté en binaire sur 7 bits
par 0100000 2, et avec bit de parité par la suite [0,1,0,0,0,0,0,1].
La suite demande d’écrire deux fonctions réalisant l’encodage d’un texte comme une suite de bits, et le décodage.
Elles ne sont pas immédiates à écrire et demandent de réfléchir. Vous êtes libres d’écrire toutes les fonctions auxiliaires
que vous voudrez pour arriver à vos fins.
Exercice 12. Écrire une fonction texte2chiffres(t) prenant en entrée une chaîne de caractères composée unique-
ment de caractères ASCII, et retournant une liste de 8`bits (avec `la longueur du texte) obtenue par concaténation
des listes de bits représentant chaque caractère, augmentées de leurs bits de parité respectifs.
>>> texte2chiffres("abc")
[1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0]
Indication : vous pouvez par exemple écrire des fonctions auxiliaires :
— convertissant un nombre en binaire sur 7 bits (en le supposant entre 0 et 127) ;
— convertissant un caractère en liste de bits et lui rajoutant un bit de parité,
et utiliser ces fonctions dans la fonction principale avec une boucle.
Exercice 13. Écrire une fonction chiffres2texte(L) réalisant l’inverse, en affichant une erreur à l’écran si au moins
une erreur de transmission a été détectée (c’est-à-dire qu’un paquet de 8 bits au moins a un nombre impair de « 1 »).
>>> L=texte2chiffres("abc")
>>> L
[1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0]
>>> chiffres2texte(L)
'abc'
>>> L[0]=0
>>> chiffres2texte(L)
erreur de transmission
Svartz Page 5/6 2016/2017