ISN2

publicité
TP 2 : Vendredi 13 Septembre 2013
Codage des nombres entiers relatifs
Continuons à coder notre monde …
Partie du programme : Représentation de l’information
Représentation binaire :
Compétence :
Un ordinateur est une machine qui manipule
des valeurs numériques représentées sous
forme binaire.
Manipuler à l’aide d’opérations élémentaires
les trois unités de base : bit, octet, mot.
Numérisation :
Compétence :
L’ordinateur manipule uniquement des valeurs
numériques. Une étape de numérisation des
objets du monde physique est donc
indispensable.
Coder un nombre, un caractère au travers d’un
code standard, un texte sous forme d’une liste
de valeurs numériques.
Numériser une image ou un son sous forme d’un
tableau de valeurs numériques.
La mémoire des ordinateurs est constituée d’une multitude de petits circuits électroniques qui, chacun, ne
peuvent être que dans 2 états : hors tension ou sous tension.
Comme il a fallu donner un nom à ces états, on a décidé de les appeler 0 et 1.
Un tel circuit à 2 états s’appelle un circuit mémoire un bit.
Le nombre entier naturel 13, représenté en base 2 par :
est donc représenté dans la mémoire d’un
ordinateur par le mot 1101, c’est-à-dire par 4 circuits mémoire un bit respectivement dans les états 1, 0, 1, 1.
Les circuits mémoire un bit sont souvent groupés par huit (octet) et on utilise des nombres exprimés en
langage binaire sur un, deux, quatre ou huit octets soit 8, 16, 32 ou 64 bits.
Sur un octet, on peut représenter les nombres entiers naturels allant de 0 à :
Sur deux octets, on peut représenter les nombres entiers naturels allant de 0 à :
Sur quatre octets, on peut représenter les nombres entiers allant de 0 à
Sur huit octets, i.e. 64 bits : on peut représenter tous les nombres entiers naturels allant de 0 à
.
Dans le langage Python, on ne peut manipuler que des nombres entiers relatifs : tous les entiers sont signés.
Il faut étendre aux entiers relatifs la représentation binaire des entiers naturels.
 1ère solution naturelle : réserver un bit pour le signe et utiliser les autres pour représenter sa valeur
absolue.
Ainsi, avec des mots de 16 bits, si on utilise 1 bit pour le signe et 15 bits pour la valeur absolue, on pourrait
représenter les entiers relatifs allant de :
== - 32 767 à
=
= 32 767.
Inconvénient de cette méthode (entre autres) : existence de deux zéros l’un positif et l’autre négatif !
 Solution choisie : la notation en complément à 2.
On va représenter un entier relatif par un entier naturel. Si on utilise des mots de 16 bits, on va pouvoir
représenter les entiers relatifs de -32 768 à 32 767 en procédant ainsi :
Si l’entier relatif x est positif ou nul : on le représente comme l’entier naturel x.
Si l’entier relatif x est strictement négatif : on le représente comme l’entier naturel x +
nombre entier compris entre -32 768 + 65 536 = 32 768 et -1 + 65 536 = 65 535.
= x + 65 536,
Schéma :
-32 768 ; -32 767 ; …….. ; -1 0 ; 1 ; ……….… ; 32 767 ; 32 768 ; 32 769 ; ………… ; 65 535
Comment est codé le nombre entier relatif -1 ?
Il est représenté dans l’ordinateur comme l’entier naturel 65 535 l’est soit :
1111 1111 1111 1111.
SYNTHESE : Plus généralement, avec des mots de n bits, on peut représenter les entiers relatifs compris
entre
et
On représente l’entier relatif x positif ou nul comme l’entier naturel x.
On représente l’entier relatif x strictement négatif comme l’entier naturel x + .
Ainsi, un entier positif est représenté par un mot dont le premier bit sera 0, et un entier négatif par un mot
dont le premier bit sera 1.
Expliquons le dernier cas dans le cas des nombres codés sur 16 bits :
32 768 =
donc tout nombre entier compris entre 32 768 et 65 535 a forcément son bit le plus fort égal à
1.
Exemple : 32 770 = 32 768 + 2 =
= 1000 0000 0000 00102.
Au contraire, un entier positif codable sur 16 bits, varie entre 0 et 32 767 : 32 767 <
Donc si on prend par exemple, 16 384 =
= 0100 0000 0000 00002.
 Comment savoir si l’entier sera codé sur 16 bits ? 32 bits ?
Rien dans la représentation binaire n’indique comment il faut interpréter un mot mémoire donné.
Le même mot peur être lu de différentes façons.
Il faut donc garder à part une trace des conventions de codage qu’on a décidé d’utiliser.
Dans les versions Python 2.x, le type int désigne en principe des entiers relatifs représentés sur 32 bits, cad 4
octets : les valeurs possibles sont donc de – 2 147 483 648 à 2 147 483 647.
Mais, si on travaille sur une machine 64 bits, la représentation des entiers sera également faite sur 64 bits :
on dispose donc des entiers de -9 223 372 036 854 775 808 à 9 223 372 036 854 775 807 !!!
L’ensemble des valeurs de type int dépend donc de la machine sur laquelle un programme Python est
exécuté.
Exercices :
1°) Quels entiers relatifs peut-on coder sur huit bits ?
2°) Trouver les représentations sur huit bits des entiers relatifs 0 et -128, 127, 101 et -94 :
3°) Déterminer les valeurs des entiers relatifs codés sur huit bits par :
0001 0111 et 1000 1100
4°) Calculer la représentation sur huit bits de l’entier relatif 11, puis celle de son opposé :
Remarque : on inverse tous les bits et on ajoute 1

Dépassement de Capacité : Que se passe-t-il quand on atteint les limites ?
On suppose une représentation sur 32 bits.
a = 260
a * a = 67 600
a * a * a = 17576000
a * a * a * a = 4569760000
Ce dernier résultat, en binaire est codé par : 1 00010000 01100001 00000001 00000000.
Si on reste dans une représentation en 32 bits, le bit le plus à gauche est perdu ! On ne mémorise que
00010000 01100001 00000001 00000000 qui vaut 274 792 704. Ce n’est pas le résultat attendu !!
On appelle ce phénomène dépassement arithmétique (overflow en anglais)
En Python, on retiendra que, la seule limite pour la représentation des entiers, qu’ils soient naturels ou
relatifs, est la mémoire disponible sur la machine. L’exemple précédent ne se produira pas !
Dans les versions Python 2.x, lorsque la capacité des entiers machines (32 ou 64 bits) a été dépassée, les
nombres sont suivis du marqueur L, qui explicite qu’on passe dans un autre type appelé long.
On aurait donc plutôt comme ligne : 4569760000L
En Python 3.x, les types int et long ont été fusionnés, et on retient que les entiers sont toujours de taille
illimitée, le marqueur L n’est plus utilisé.
Types de données, structures de contrôles, fonctions
version Python 3.3.2.
Une boîte ne sait pas comment elle s’appelle. C’est à nous de lui donner un nom, et une forme.
Un ordinateur peut bien faire des choses, mais il faut d’abord les lui expliquer.
Un ordinateur est fait pour exécuter des calculs longs et répétitifs.
Partie du programme : Algorithmique
Algorithmes simples :
Compétence :
Comprendre un algorithme et expliquer ce qu’il
fait.
Modifier un algorithme existant pour obtenir
un résultat différent.
Concevoir un algorithme.
Programmer un algorithme.
Partie du programme : Langages et programmation
Types de données :
Nombre entier ;
Virgule flottante ;
Booléen ;
Caractère ;
Tableau ;
Chaîne de caractères.
Fonctions :
Notion de fonction ;
Portée des variables et passage d’arguments ;
Compétence :
Choisir un type de données en fonction d’un
problème à résoudre.
Compétence :
Concevoir l’entête d’une fonction, puis la
fonction elle-même.
I/ Algorithmique :
 Diaporama
II/ Programmation en Python :
(source : Université du Sud Toulon Var)
1°) Les variables :
2°) Les types de données :
Version Python 2.x
3°) L’affectation :
4°) Instruction d’entrée ou de sortie :
VERSION 2.x
En Python 3.x, input() renvoie
toujours une chaîne de caractères !
VERSION 2.x
En Python 3.x, mettre des
parenthèses : print( …. )
5°) Les structures de contrôle :
Version 2.x
Boucle FOR
Syntaxe à venir
6°) Les fonctions :
Exemples :
x=7
print(x)
x une variable globale
def f() :
y=8
return y
La variable y est ici locale
7°) Allons-y !
Pour exécuter les instructions Python, nous allons utiliser l’environnement spécialisé IDLE.
Cet environnement se compose d’une fenêtre appelée console, shell ou terminal Python.
L’invite de commande se compose de 3 chevrons : il suffit de saisir à la suite une instruction puis de taper
sur la touche entrée du clavier.
>>> print (’’Bonjour !‘’)
Bonjour !
>>>
On peut utiliser la console Python comme une calculatrice :
>>> 3 * 5
15
>>> a = 0
>>> if a = = 0 :
print (‘’C’est vrai’’)
else :
print (“C’est faux”)
C’est vrai
>>> for i in range(1,3) :
print(i)
1
2
Ainsi, on peut exécuter les instructions au fur et à mesure.
Pour exécuter un programme plus long, sous l’environnement IDLE, il suffit d’ouvrir un fichier texte en
choisissant l’entrée NewWindow dans le menu File puis on sauvegarde son fichier sous un nom de la forme
toto.py, enfin la commande RunModule du menu Run vous permettra de lancer l’exécution du contenu de
votre fichier dans la console Python.
Voici un premier programme
a=4
b=7
print("A vous de jouer")
x = int(input())
y = int(input())
if x == a and y == b :
print("coulé")
else :
if x == a or y ==b :
print("en vue")
else :
print("A l'eau")

Une expression est une suite de caractères définissant une valeur.
En Python, les expressions sont classées en fonction de leur type :
 type int (integer) : comme l’expression 1 + 3, dont la valeur est un nombre entier.
 type float (floating point number) : comme 1.5 + 1.64 dont la valeur est le nombre à virgule
3,14.
 type boolean comme l’expression booléenne x == 3 dont la valeur est False ou True suivant
l’état d’exécution du programme.
 type str comme "coulé" dont la valeur est une chaîne de caractères.

Il est constitué de différentes instructions :
 des affectations : du type v = e où v est une variable et e une expression ;
 des instructions d’entrée : du type v = int(input( )) où v est une variable ;
 des instructions de sortie de la forme : print(e) où e est une expression ;
 des séquences de la forme : p suivi de q où p et q sont deux instructions ;
 des tests de la forme :
if e :
p
else :
q
L’instruction x = y + 3 fait intervenir une variable x et une expression y + 3.
On attribue une valeur à chaque expression : pour celles qui ne comportent pas de variable, on obtient la
valeur en effectuant les opérations qui y figurent (par exemple : 2 * 3) ; pour celles qui comportent des
variables, cela dépendra des valeurs contenues par les variables lors de l’état d’exécution du programme.
Exercice 1 :
Instruction ou expression ?
x
x=y
print(x + 3)
x = int(input())
x == a

Les expressions sont formées en utilisant les opérations élémentaires suivantes :
+
*
//
%
+
*
/
pow
sqrt
pi
Addition entière
Soustraction entière
Multiplication entière
Quotient de la division euclidienne
Reste de la division euclidienne
Addition décimale
Soustraction décimale
Multiplication décimale
Division décimale
Puissance
Racine
sin
cos
exp
log
abs
min
max
floor
random
==
!=
<=
<
>=
>
len
s[n]
chr
ord
+
not
and
or
Sinus
Cosinus
Exponentielle
Logarithme népérien
Valeur Absolue
Minimum
Maximum
Partie entière
Nombre aléatoire décimal entre 0 et 1, selon la loi uniforme
Egal
Différent
Inférieur ou égal
Inférieur strictement
Supérieur ou égal
Supérieur strictement
Longueur d’une chaîne de caractères
n-ième élément de la chaîne de caractères s
Prend en argument un entier n et retourne une chaîne de
caractères qui contient un unique caractère dont le code ASCII
est n.
Fonction inverse de la précédente, qui prend en argument une
chaîne de caractères s constituée d’un seul caractère et
retourne le code ASCII de ce caractère.
Concaténation. S’applique à deux chaînes de caractères et
construit une unique chaîne formée de la première, suivie de
la seconde.
Non
Et (variante : &)
Ou (variant : |)
 L’indentation :
En Python, l’indentation est partie intégrante de la syntaxe, dans la plupart des autres langages, ce sont des
accolades qui sont utilisées pour lever les ambiguïtés.
Exercice 2 :
Exercice 3 :
Pour chaque question, exécutez les commandes et commentez-les :
>>> 3+2
>>> s=12
>>> m=24
>>> s=s+m
>>> 3*s
>>> s=5
>>> s**2
>>> n=13
>>> n/2
>>>n//2
>>> n%2
Exercice 4 :
Ci-dessous un programme écrit en langage Python
1.
2.
3.
4.
Quel est le type des variables a et b ?
(lignes 1 et 2)
Quelles valeurs sont retournées dans les variables c et d ? (lignes 5 et 6)
Expliquer le rôle de la structure conditionnelle (lignes 3 à 6 )
Proposer une chaîne de caractères à insérer dans le print() de la ligne 7 qui permettrait à l’utilisateur
de comprendre à quoi sert ce programme .
Exercice 5 :
1. Quel est le type des variables a et b ? (lignes 1 et 2)
2. Expliquer brièvement ce que fait ce programme et compléter les … des lignes 4 et 5.
3. Ce programme comporte des erreurs d’écriture aux lignes 2 à 6
Réécrire le programme sur votre copie en les corrigeant.
4. Proposer une troisième alternative (cohérente) et l’insérer dans la structure conditionnelle.
Exercice 6 :
Téléchargement