LS1 Ueo11 C1
LS1 Ueo11 C1
LS1 Ueo11 C1
Contenu du semestre
- initiation à l’algorithmique
- notions de bases de programmation
variables simples, entrées sorties basiques
- choix et itérations
- tableaux 1D
Il faut tenir compte du fait que cet enseignement concerne aussi bien des étudiants qui se destinent a faire
de la biologie qu’a des étudiants qui s’orienteront vers les mathématiques ou l’informatique….
Il n’y a pas de note de TP mais la présence en TP est obligatoire (appel)
et vital pour comprendre l’enseignement et réussir aux contrôles !
1 – Généralités
1-1 L’informatique
Exemple d’informations :
Un ordinateur est une machine qui permet d'effectuer des traitements sur des données à
l'aide de programmes. Les données (les paramètres du problème, par exemple les notes des
étudiants du cours d'informatique) ainsi que le programme (par exemple le calcul de la moyenne
des notes) sont fournis à la machine par l'utilisateur au moyen de dispositifs de saisie (le clavier
par exemple). Le résultat du traitement est recueilli à la sortie de l'ordinateur (l'écran,
l’imprimante) sous forme de texte par exemple.
Nous allons étudier maintenant comment est codée l’information dans la mémoire
centrale et dans la mémoire auxiliaire.
2 - Le codage binaire de l’information
Toute l'information qui transite dans un ordinateur est codée avec des bits ( Binary digIT)
ne prenant que les valeurs 0 et 1. L’information est donc toujours discrète
Par exemple pour coder le nombre 13 en binaire, il faut les quatre chiffres binaires 1101. En
effet 13 peut être décomposé comme une somme de puissances de 2
13 = 8 + 4 + 1
=1*8+1*4+0*2+1*1 en décimal
= 1 * 23 + 1 * 22 + 0 * 21 + 1 * 20 on ne conserve que les coefficients
= 1 1 0 1 en binaire
Pour coder de l'information , que ce soient des nombres, (PI=3,141592...), du texte (ce
cours), des schémas, des images, des sons, des relations ("Pierre est le père de Jacques et le frère
de Marie"), les circuits électroniques d'un ordinateur ne peuvent utiliser que des informations en
binaire.
Montrons d'abord comment il est possible de coder n'importe quel nombre entier naturel
IN={0, 1, 2, 3, ... ,1 000, ..., 1 000 000, ...} en binaire.
Puis nous en ferons autant pour les entiers signés les décimaux et les caractères. Enfin il faudra
montrer que les images, les sons … peuvent aussi se coder en binaire.
20 = 1 21 = 2 22 = 2x2 = 4 23 = 2x2x2 = 8
24 = 16 25 = 32 26 = 64 27 =128
28 = 256 29 = 512 210 = 1024 = 1K 211 =2048 …….
Ex calculer la valeur binaire de 37 en base 10 :
37 2
1 18 2
0 9 2
1 4 2
0 2 2
0 1
37 == 2 x ( ( 2 x 9 ) + 0 ) + 1 == 2 x ( ( 2 x ( 2 x 4 + 1 ) ) + 1
== 1 x 25 + 1 x 22 + 1 x 20 == 1 x 25 + 0 x 24 + 0 x 23 + 1 x 22 + 0 x 21 + 1 x 20
soit en base 2 : 1 0 0 1 0 1
Le codage binaire a un inconvénient majeur pour l'être humain, son manque de lisibilité...
Quelle est la représentation décimale du nombre dont la représentation binaire est : 1001 1110 ?
Réponse : 1x27+ 0x26 + 0x25 +1x24 + 1x23 + 1x22 + 1x21 + 0x20
= 1x128 + 0x64 + 0x32 +1x16 + 1x8 + 1x4 + 1x2 + 0x1
= 158
Exercice : Combien de chiffres binaires faut-il pour représenter le nombre décimal 10000 ?
Reponse : 14
Exercice :
En utilisant la table d'addition binaire calculez en binaire les nombres suivants :
1001 + 10100
1111 + 1
1111 1111 + 1111 1111
2.3 Opérations logiques
En logique binaire une variable logique (booléenne) est VRAI (TRUE = 1) ou FAUSSE (FALSE
= 0). Une expression logique est constituée de plusieurs variables logiques combinées par des
connecteurs (opérateurs) logiques :
- NON [NOT]
- ET [AND]
- OU [OR]
0 OU 0 = 0 0 ET 0 = 0 NON 0 = 1
0 OU 1 = 1 0 ET 1 = 0 NON 1 = 0
1 OU 0 = 1 1 ET 0 = 0
1 OU 1 = 1 1 ET 1 = 1
– - (moins) –+ – =
– : opposé – - – <
– * – <=
– DIV – >
– MOD – >=
– /
Par exemple si on dispose d’un mot mémoire de 16 bits ( soit deux octets) pour représenter des
nombres par exemple alors les différents contenus possibles de la mémoire sont les suivants :
en fait il y a 216 = 65 536 codes différents et si on veut utiliser un mot mémoire pour coder des
informations on sait qu’avec un mot mémoire on ne peut coder que 65536 « choses »
différentes.
Supposons maintenant qu’on se pose le probléme de coder tous les entiers positifs ou nuls sur
ordinateur.
Le nombre d’éléments de cet ensemble est infini….pour coder tous les entiers il faudrait
donc un nombre infini de bits… et donc une mémoire centrale infinie….ce qui est impensable !
Si on prend un mot on ne peut coder que 65536 choses différentes et donc 65 536 entiers
sur l’infinité d’entiers possibles .
Le plus grand nombre entier non signé représentable est donc : 1111 1111 1111 1111
les entiers positifs strictement supérieurs à 65 535 ne sont donc pas représentables…..
Maintenant si on prend deux entiers codables par exemple 65 533 et 5 …… Si on veut faire la
simple somme et coder le résultat dans un mot on aura un résultat faux
Preuve :
Il reste donc dans le mot mémoire contenant le résultat 0000 0000 0000 0010 soit le
codage du nombre 2 ce qui n’est pas le bon résultat…..
Il y a eu ce qu’on appelle un dépassement de capacité et le résultat placé dans un mot est
faux !
Donc déjà on voit que quand on fait des calculs sur les entiers il faut prévoir les cas ou il
y aura dépassement de capacité.
Les difficultés à résoudre pour les entiers quelconques sont donc les suivantes : quels
entiers sont représentés et comment représenter les négatifs et par conséquent le signe.
Exercice TD :
Indiquer quels sont les entiers non signés représentables sur un double mot, soit 4 octets
Rep : ils vont de 0 à 232-1 soit de 0 à 4 294 967 295
2.4.3 Implémentation des entiers signés
Nous allons étudier la représentation des entiers signés sur deux octets
Le problème ici est que d’une part il faut représenter la valeur absolue et d’autre part le signe.
Quand on dispose d’un mot mémoire et qu’on fait l’hypothèse qu’il code un entier signé il faut
pouvoir reconnaître le signe (+ /-), et donc il est obligatoire qu’un bit sur les 16 bits disponibles
sera utilisé pour coder le signe. C’est le bit de gauche (dit de fort poids) qui est utilisé :
S’il vaut 1 alors le nombre codé est négatif
S’il vaut 0 alors le nombre codé est positif
Une représentation utilisée sur les premières machines consistait à coder d’une part le signe sur
un bit , d’autre part la valeur absolue sur les 15 bits restants :
On code donc le signe 0/1 puis sur 15 bits la valeur absolue qui va donc de 0 à 215-1 (=32 767)
Inconvénients de ce codage :
Une méthode très répandue est la méthode du complément à 2. On travaille MODULO 216
On représente Bin(216 + n) = 65 536 - 547 = 64 989
= 1111 1101 1101 1101
Une vérification de l'expression calculée consiste à effectuer une somme bit à bit de 547
et de –547
Exercice :
Trouver les représentations binaires en complément à deux sur deux octets des nombres suivants
:
31000; -31000 . faire l’addition binaire des deux représentations …conclusion par rapport
au codage signe+ valeur absolue ?
-33000 est-il représentable ? pourquoi peut on représenter -32 768
quel est le codage de 0 (essayer +0 et –0)
On appelle notation normalisée d'un réel celle où le premier chiffre significatif est placé
immédiatement après la virgule (ou le point décimal).
Exemple : 1989 = 0.1989 E4
Pour stocker ce nombre en mémoire, il suffit de stocker les informations :
exposant 4 et la partie décimale appelée mantisse 1989
Tout nombre réel peut être représenté dans une base quelconque :
a = 0.M * Be
avec B : base ; e : exposant ; M : mantisse (qui peut être une suite infinie de chiffres...)
En notation normalisée on a les conditions :
(1/B) <= | M | < 1 ou bien M=0
en base 2 a = 0.M * 2e
exemple : 1101,1 qui vaut 13,5 en décimal s’écrit suivant cette convention :
Les réels sont représentés en machine selon un standard défini par l' IEEE
Un réel est décomposé en
signe + - s
exposant caractéristique E
partie décimale mantisse F
x = (-1) s * 2E-127 * 1, F
0.8 = 20 x 0.8
0.8 x 2 = 1.6 donc 0.8 = 1.6 / 2 = 2-1 x 1.6 = 2-1 x 1 + 2-1 x 0.6
0.6 x 2 = 1.2 donc 0.8 = 2-1 x 1 + 2-2 x 1.2
0.2 x 2 = 0.4 donc 0.8 = 2-1 x 1 + 2-2 x 1 + 2-3 x 0.4
0.4 x 2 = 0.8 donc 0.8 = 2-1 x 1 + 2-2 x 1 + 2-3 x 0 + 2-4 x 0.8
0.8 x 2 = 1.6 donc ... on retrouve une expression déjà rencontrée qui va se répéter infiniment
0.8 = (-1) x 1. 10011001100110011.... x 2-1
0
Exercice : Montrer que le nombre décimal 0.1 n’a pas de représentation finie en binaire.
Combien de nombres réels sont ils représentés sans erreur ?
Textes
Les textes peuvent être représentés en binaire à condition d'associer à chaque lettre de l'alphabet
une représentation numérique, par exemple son rang dans l'ordre alphabétique : A serait codé1 ;
B,de rang 2 serait codé 10 en binaire; C codé 11, etc. Mais ce codage est insuffisant car il faut
aussi pouvoir coder les signes de ponctuation . , ; ? ! , distinguer les minuscules des
MAJUSCULES, les caractères accentués, etc.
La table ASCII (American Standard Code for Interexchange Information) propose un codage de
128 caractères différents sur 7 bits. Dans la table ASCII la lettre A est codée 65, B est codé 66, C
est codé 67, ... Z est codé 90, a est codé 97, b est codé 98, ... 0 est codé 48, 1 est codé 49, ... 9 est
codé 57, ...
Les caractères accentués des langues européennes ont nécessité l'ajout d'un huitième bit de
codage, d'où la table ASCII étendue avec 256 caractères.
Exercice : Donner le contenu binaire d’un octet contenant le code ASCII du ‘a’
C’est la valeur 97 en base 10 soit 1100001 en binaire
D’ou 01100001
1 octet ou byte :
ensemble de 8 bits
1 mot mémoire :
le mot mémoire est une unité de stockage de base pour un ordinateur.
Chaque ordinateur dispose d’une taille de mot mémoire particulière en général les PC actuels ont
des mots mémoire de 32 bits soit 4 octets, mais certaines machines ont des mots mémoire plus
grands.
La taille d’une mémoire centrale ou d’un autre support d’information s’exprime en nombre
d’octets. Ced nombre est toujours une puissance de 2
Ex : 1 Koctet -> kilo octets -> 1024 octets -> 210 octets
1 Moctets -> méga octets -> 1024 koctets -> 220 octets
1 Goctets -> gigaoctets -> 1024 Moctets -> 230 octets
1 Toctets -> teraoctets ………
quelques mots clé du langage C ( ensupposant être sur une machine à mots de 16 bits ?)