Académique Documents
Professionnel Documents
Culture Documents
Informatique (Vassal)
Informatique (Vassal)
Guillaume VASSAL
1 Introduction à l’informatique 1
1.1 Architecture d’un ordinateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Représentation des nombres en machine . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Introduction à l’algorithmique 9
2.1 Vocabulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2 Variables et affectations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 Les boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.4 Fonctions, méthodes et modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.5 Structures de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.6 Compléments d’algorithmique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Références 47
i
ii TABLE DES MATIÈRES
Chapitre 1
Introduction à l’informatique
Sommaire
1.1 Architecture d’un ordinateur . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 Présentation générale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2 Quelques mots sur les systèmes d’exploitation . . . . . . . . . . . . . . . . . . . 3
1.2 Représentation des nombres en machine . . . . . . . . . . . . . . . . . . . 4
1.2.1 Les nombres entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.2 Les nombres réels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.3 Problème de dépassement de capacité . . . . . . . . . . . . . . . . . . . . . . . 7
Définition 1.1.1
Le processeur, ou CPU a , est le composant de l’ordinateur qui exécute les programmes informa-
tiques. Un processeur construit en un seul circuit intégré est un microprocesseur.
a. Central Processing Unit, « Unité centrale de traitement ».
Un système à microprocesseur n’effectue que des opérations simples sur des séquences de signaux
électriques. Ces derniers ne peuvent prendre que deux états (potentiel électrique maximum ou mini-
mum) qui sont assimilés aux valeurs 1 et 0. C’est pourquoi un ordinateur de peut comprendre qu’une
suite de 0 et de 1, c’est-à-dire des nombres binaires. Ainsi, toutes les données qu’on utilise (nombres,
textes, images etc . . . ), mais aussi les instructions fournies à la machine sont codées en format binaire.
1
2 CHAPITRE 1. INTRODUCTION À L’INFORMATIQUE
Définition 1.1.2
Un chiffre binaire est l’unité de mesure en informatique désignant la quantité élémentaire d’in-
formations qu’on peut représenter, on l’appelle aussi un bit a .
a. Le mot bit est la contraction des mots anglais binary digit qui signifient « chiffre binaire ».
Définition 1.1.3
Un mot binaire est une suite de 0 et de 1.
Définition 1.1.4
Un octet est un regroupement de 8 bits codant une information.
Dans ce système de codage, un octet permet de représenter 28 , c’est-à-dire 256 valeurs différentes.
Un ou plusieurs octets permettent ainsi de coder des valeurs numériques ou des caractères.
Pour traiter une information, un microprocesseur seul ne suffit pas, il faut l’insérer au sein d’un
système minimum de traitement programmé de l’information. John Von Neumann est à l’origine d’un
modèle de machine universelle (1946) qui sert de base à la plupart des systèmes à microprocesseur
actuels. Elle est composée des éléments suivants :
— une unité centrale,
— une mémoire principale,
— des interfaces d’entrées et de sorties.
L’unité centrale est composée d’un le microprocesseur qui est chargé d’interpréter et d’exécuter
les instructions d’un programme, de lire ou de sauvegarder les résultats dans la mémoire et de com-
muniquer avec les unités d’échange. Toutes les activités du microprocesseur sont cadencées par une
horloge. On caractérise le microprocesseur par :
— sa fréquence d’horloge : en MHz 1 ou GHz 2 ,
1. Méga Hertz
2. Giga Hertz
1.1. ARCHITECTURE D’UN ORDINATEUR 3
Définition 1.1.5
Un système d’exploitation a est un ensemble de programmes qui dirige l’utilisation des capacités
d’un ordinateur par des logiciels d’applications.
a. aussi appelé OS pour Operating System
Le système d’exploitation est le premier programme exécuté lors de la mise en marche de l’ordi-
nateur, après l’amorçage 4 . Il offre une suite de services généraux qui facilitent la création de logiciels
et sert d’intermédiaire entre ces logiciels et le matériel informatique.
Il existe sur le marché des dizaines de systèmes d’exploitation différents. Les deux familles de
systèmes d’exploitation les plus populaires sont la famille Unix (dont Mac OS X, Linux, iOS et Android)
et la famille Windows.
C’est l’écriture en base 2, ou écriture binaire, de N . Les entiers n, a0 , . . . , an´1 sont uniques. On note
N “ an´1 ¨ ¨ ¨ a0 2 .
Un entier est représenté par un espace mémoire constitué d’octets (8 bits). Le nombre d’octets
pour une unité de stockage dépend de la machine, il peut valoir 1, 2, 3, 4 ou 8 octets à savoir 8, 16,
32 ou 64 bits. Si N “ an´1 ¨ ¨ ¨ a0 2 , les nombres ai sont les bits qui représentent l’entier.
Proposition 1.2.1
Si l’on dispose de n bits, on peut représenter 2n nombres entiers soit un nombre fini.
Il est donc clair qu’on ne peut pas représenter ni calculer tous les nombres dans une machine. A
titre d’exemple, avec 32 bits, on est limité à quelque milliards de nombres, le plus grand étant de cet
ordre de grandeur.
Exemple 1.2.2
Sur 3 bits, on peut représenter 8 entiers le plus grand étant 7 qui est représenté par la suite de
2 2
bits 111. Dans ce système, on ne peut pas additionner 4 “ 100 avec 5 “ 101 sinon on sort des
capacités de stockage.
Dans la suite de ce paragraphe, on décrit deux méthodes pour représenter les entiers relatifs.
Exemple 1.2.3
Dans un système à 8 bits, le nombre ´35 est représenté par la suite de bits 10010011 et le nombre
13 par 00001101.
Remarque 1.2.4
Un entier négatif a est représenté par la représentation standard de l’entier 2n´1 ` |a| “ 2n´1 ´ a.
Remarque 1.2.5
Par cette méthode, on représente 2n ´1 entiers puisque 0 possède deux représentations distinctes.
Complément à 2
La représentation en complément à 2 est la plus courante. Si l’on dispose de n bits on peut
représenter les entiers ´2n´1 , . . . , 0, . . . , 2n´1 ´ 1. Les nombres de 0 à 2n´1 ´ 1 sont représentés par
leur écriture binaire. Les nombres de ´2n´1 , . . . , ´1 sont représentés respectivement par les entiers
2n´1 , . . . , 2n ´ 1.
Soit pan´1 , . . . , a0 q est la suite de bits représentant N par la méthode complément à 2. Le bits an´1
donne le signe de a. En effet, si an´1 “ 1 alors a est strictement négatif, sinon il est positif.
Proposition 1.2.6
L’entier relatif x est représenté par :
1. la représentation standard si x ě 0,
2. la représentation standard de l’entier 2n ´ |x| “ 2n ` x, si x ă 0.
Proposition 1.2.7
Soit m un mot binaire. On note p l’entier naturel correspondant au mot m par la représentation
standard. L’entier correspondant au mot m en complément à 2 est :
1. p, si p ď 2n´1 ´ 1,
2. p ´ 2n , si p ě 2n´1 .
Exemple 1.2.8
On suppose n “ 8. Dans la convention complément 2 :
— le nombre ´1 est représenté par 11111111,
— le nombre 27 ´ 1 est représenté par 01111111,
— le nombre ´27 est représenté par 10000000.
— le nombre ´13 est représenté par 11110011.
Remarque 1.2.9
Dans la pratique, pour coder un entier négatif, il suffit de coder sa valeur absolue, d’échanger les
bits (on remplace les 0 par des 1 et inversement) puis d’ajouter 1.
Exemple 1.2.10
Sur un octet, la représentation de ´4 est 11111100.
6 CHAPITRE 1. INTRODUCTION À L’INFORMATIQUE
Remarque 1.2.11
Dans la pratique, pour représenter l’entier ´p, pour p P N, on peut effectuer la procédure suivante :
1. on donne le mot m représentant p de façon standard.
2. On échange les 0 et les 1 du mot m.
3. on ajoute 1 au mot obtenu.
Remarque 1.2.12
Par cette méthode, on représente bien 2n entiers relatifs dont 2n´1 entiers naturels (donc 2n´1
entiers strictement négatifs).
Remarque 1.2.13
Pour ajouter deux entiers représentés par la méthode complément 2, il suffit de les additionner
bit à bit. Il faut prendre garde au débordement (tous les entiers ne peuvent être représentés). Le
nombre 0 se représente de façon unique.
x “ m ˆ be , (1.1)
où m est la mantisse telle que 1 ď |m| ă b et e est l’exposant. La mantisse est un nombre décimal
2
exprimé dans la base b. Par exemple, en base 2, on écrit 11.101 “ 21 ` 20 ` 2´1 ` 2´3 “ 3.625.
La représentation en base 10 est utiliser dans les calculatrices tandis que la base 2 est utiliser pour
représenter les réels dans les ordinateurs.
Exemple 1.2.14
On considère le nombre réels x codé sur 32 bits par :
1 on 00011110
loomo loooomoooon 01010000000000000000000
loooooooooooooooomoooooooooooooooon .
signe exposant mantisse
Exemple 1.2.15
2 2
Pour x “ 3, 3125, on a x “ 11.0101 , mais aussi x “ 1, 65625 ˆ 21 “ `1.10101 ˆ 21 .
Exemple 1.2.16
Trouver la représentation sur 32 bits du réel 278. De même pour ´243, 25.
Missile Patriot
En février 1991, pendant la Guerre du Golfe, une batterie américaine de missiles Patriot, à Dha-
ran (Arabie Saoudite), a échoué dans l’interception d’un missile Scud irakien. Le Scud a frappé un
baraquement de l’armée américaine et a tué 28 soldats. La commission d’enquête a conclu à un calcul
incorrect du temps de parcours, dû à un problème d’arrondi. Les nombres étaient représentés en vir-
gule fixe sur 24 bits, donc 24 chiffres binaires. Le temps était compté par l’horloge interne du système
en 1/10 de seconde. Malheureusement, 1/10 n’a pas d’écriture finie dans le système binaire : 0, 1 (dans
le système décimal) 0, 0001100110011001100110011 . . . (dans le système binaire). L’ordinateur de bord
arrondissait 1{10 à 24 chiffres, d’où une petite erreur dans le décompte du temps pour chaque 1/10
de seconde. Au moment de l’attaque, la batterie de missile Patriot était allumée depuis environ 100
heures, ce qui avait entraîné une accumulation des erreurs d’arrondi de 0,34 s. Pendant ce temps, un
missile Scud parcourt environ 500 m, ce qui explique que le Patriot soit passé à côté de sa cible. Ce
qu’il aurait fallu faire c’était redémarrer régulièrement le système de guidage du missile.
Explosion d’Ariane 5
Le 4 juin 1996, une fusée Ariane 5, a son premier lancement, a explosé 40 secondes après l’allumage.
La fusée et son chargement avaient coûté 500 millions de dollars. La commission d’enquête a rendu son
rapport au bout de deux semaines. Il s’agissait d’une erreur de programmation dans un système. À un
moment donné, un nombre codé en virgule flottante sur 64 bits (qui représentait la vitesse horizontale
de la fusée par rapport à la plate-forme de tir) était converti en un entier sur 16 bits. Malheureusement,
le nombre en question était plus grand que 32768 (overflow), le plus grand entier que l’on peut coder
sur 16 bits, et la conversion a été incorrecte.
8 CHAPITRE 1. INTRODUCTION À L’INFORMATIQUE
Chapitre 2
Introduction à l’algorithmique
Sommaire
2.1 Vocabulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.2 Le langage Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2 Variables et affectations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.1 Affectations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.2 La structure conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3 Les boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.1 L’instruction while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.2 Les boucles for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.4 Fonctions, méthodes et modules . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4.1 Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4.2 Les méthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.4.3 Les modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.5 Structures de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5.1 Les chaines de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5.2 Les listes (suite) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.5.3 Les tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.5.4 Les dictionnaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.6 Compléments d’algorithmique . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.6.1 Prouver un algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.6.2 Complexité d’un algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1 Vocabulaire
2.1.1 Généralités
L’algorithmique est le domaine qui étudie les algorithmes. Le mot algorithme provient du nom du
mathématicien Al-Khawarizmi 1 qui est demeuré célèbre pour avoir introduit dans le monde arabo-
musulman et en Occident la numération décimale (rapportée des Indes).
Définition 2.1.1
Un algorithme est une procédure qui termine en un nombre fini d’étapes et qui a pour but
d’effectuer un calcul ou de résoudre un problème.
1. Al-Khawarizmi, né vers 783, originaire de Khiva dans la région du Khwarezm (Ouzbékistan actuel), est un mathé-
maticien, géographe, astrologue et astronome perse.
9
10 CHAPITRE 2. INTRODUCTION À L’ALGORITHMIQUE
Un algorithme est le squelette théorique d’un programme informatique. Il est indépendant de tout
codage particulier qui permettrait sa mise en oeuvre sur un ordinateur. Un algorithme est souvent
écrit dans ce qu’on appelle un pseudo-langage.
Exemple 2.1.2
Pour résoudre une équation du second degré ax2 ` bx ` c “ 0 sur R, on suit l’algorithme suivant :
if a “ 0 then return ERROR
else
∆ “ b2 ´ 4ac
if ∆ ă 0 then return ’Il n’y a pas de solution
? réelle.’ ?
´b ` ∆ ´b ´ ∆
else return ’Les solutions sont x1 “ et x2 “ ’
2a 2a
end if
end if
Définition 2.1.3
Un programme est la traduction d’un algorithme dans un langage de programmation « compré-
hensible » par la machine.
Un langage de programmation est une notation conventionnelle formelle destinée à formuler des
algorithmes et produire des programmes logiciels qui les appliquent. D’une manière similaire à une
langue naturelle, un langage de programmation est fait d’un alphabet, un vocabulaire et de règles de
grammaire dites aussi règles de syntaxe. Les plus populaires sont C, C++, Php, Pascal, Java, Fortran,
COBOL, OCaml, Python . . .
Un langage de programmation est mis en œuvre par un traducteur automatique : compilateur ou
interpréteur. Un compilateur est un programme informatique qui transforme dans un premier temps
un code source écrit dans un langage de programmation donné en un code cible qui pourra être
directement exécuté par un ordinateur (comme en C++ par exemple), tandis que l’interpréteur réalise
cette traduction « à la volée ».
Avant de se lancer dans la transcription d’un algorithme en programme informatique dans un
langage choisi, il faudra répondre à plusieurs questions. Tout d’abord l’algorithme donne-t-il le résultat
attendu ? Il faudra être capable de prouver l’algorithme. Quelles structures de données sont les plus
adaptées pour représenter les objets de l’algorithme ? Et enfin, quelle est la complexité de l’algorithme
(du programme) ? C’est-à-dire, en combien d’opérations, en moyenne, celui-ci termine-t-il ?
2. Un paradigme de programmation est un style fondamental de programmation informatique qui explique la manière
dont les solutions aux problèmes doivent être formulées.
2.2. VARIABLES ET AFFECTATIONS 11
Il y a deux façons de programmer en python : l’utilisation interactive où l’on écrit les instructions
dans une console (appelée aussi shell ou terminal) Python, ou on peut lancer un programme (ou script)
enregistré dans un fichier texte suffixé par .py.
La console Python et la fenêtre de l’environnement de développement se présentent de la façon
suivante :
À gauche, les fichiers dans lesquels vous écrivez vos scripts, en haut à droite, les différentes docu-
mentations et en bas à droite la ou les consoles Python.
La documentation officielle en ligne de Python : www.python.org/doc/.
Définition 2.2.1
1. Une variable permet de stocker des données pour les réutiliser ensuite.
2. Une affectation (ou assignation) crée une liaison entre un nom et une donnée. Les données
sont aussi appelée les valeurs.
Exemple 2.2.2
En Python, l’affectation se fait avec l’opérateur « “ ». Pour affecter la donnée 1 à la variable a,
on écrit a=1.
Exemple 2.2.3
Voici quelques exemples de types de données que l’on étudiera en détail par la suite. Pour connaitre
le type (ou la classe) d’un objet, on utilise la fonction type.
— Un entier : 2
— Un nombre à virgule flottante : 3.14
12 CHAPITRE 2. INTRODUCTION À L’ALGORITHMIQUE
Remarque 2.2.4
Pour supprimer une variable, on utilise l’instruction del.
Remarque 2.2.5
Le nom d’une variable (et aussi de fonction, d’une classe etc . . . ) doit respecter les règles syn-
taxiques suivantes :
1. Elle peut contenir des lettres, des chiffres, des underscore « _ », mais doit commencer par
une lettre.
2. La casse est importante : ma_variable ‰ Ma_VaRiAbLE.
3. Certains noms sont réservés par le langage : and, del, from, not . . . .
Remarque 2.2.6
On peut effectuer plusieurs affectations simultanément grâce au instructions suivantes :
1. a=b=1.
2. a, b, c = 2, 3, [2,5].
Précisons un peu ce qu’il se passe lord d’une affectation dans Python. On peut considérer que la
mémoire est divisée en deux parties : la table des symboles et la table des valeurs.
1. Les valeurs des différentes variables sont stockées dans la table des valeurs. Caque valeur possède
alors une adresse, qui est un nombre entier.
2. Dans la table des symboles, sont stockés les noms des variables auxquels on associe un type et
une adresse correspondant à la valeur de ces variables.
On peut résumer la situation par le schéma donné par la figure ci-dessous.
La fonction id permets d’obtenir l’adresse de la valeur d’une variable. Observons quelles situations
importantes.
1. Une valeurs peut être pointée par plusieurs noms de variables.
>>> a = 1
>>> b = a
>>> b, id(b), id(a)
(1, 7700768 , 7700768)
2. On peut écraser la valeur d’une variable par une autre.
2.2. VARIABLES ET AFFECTATIONS 13
>>> a = 1
>>> b = a
>>> a=2
>>> a, b, id(a), id(b)
(2, 1, 7700609 , 7700768)
3. Il faut être prudent lorsqu’une valeur est étiquetée par deux noms de variable.
>>> a = [1,2,3]
>>> b = a
>>> a[1]=0
>>> b
[1,0,3]
Définition 2.2.7
Une expression est une combinaison de variables et de littéraux a par l’intermédiaire d’opérateurs
et de fonctions.
a. Un littéral est une valeur écrite dans le programme. Il est d’un type donné qui détermine ce qu’il représente.
Remarque 2.2.8
1. Python évalue toujours les expressions. Pour répondre à l’instruction :
a=(5+int(3.7))/2,
x = x+1 (x Ð x ` 1 en pseudo-langage).
Dans cette instruction, l’ordinateur évalue la valeur de x+1 puis il affecte cette nouvelle
valeur à la variable x.
On termine cette section en donnant trois méthodes pour échanger les valeurs de deux variables.
On suppose que a et b sont deux variables.
1. Il faut faire attention à ne pas écraser la valeur d’une variable existante sans enregistrer sa valeur.
Pour échanger les valeurs des variables a et b, on peut :
>>> c=a
>>> a=b
>>> b=c
2. Pour échanger les valeurs des variables a et b, on peut effectuer des opérations mathématiques :
14 CHAPITRE 2. INTRODUCTION À L’ALGORITHMIQUE
>>> a=a+b
>>> b=a´b
>>> a=a´b
3. Enfin, une affectation parallèle permet de changer simultanément les valeurs des variables :
>>> a, b = b, a
Définition 2.2.9
Une expression est dite booléenne lorsqu’elle ne peut prendre que les deux valeurs True (Vrai) ou
False (Faux).
Remarque 2.2.10
Dans Python, l’indentation est syntaxique ! En effet, les lignes d’un même bloc d’instructions
doivent être aligné verticalement. On utilise généralement la touche « tabulation », configurée sur
2.2. VARIABLES ET AFFECTATIONS 15
>>> if a > 1:
... print (’le nombre est plus grand que 1’)
... if a <= 100:
... print (’Et il est plus petit que 100’)
... else :
... print (’le nombre est grand ’)
... print ("Difficile d’en dire plus !")
... else :
... print (’le nombre est plus petit que 1’)
Lors d’un choix multiple, on peut utiliser le mot clé elif, qui est la concraction de if et else.
C’est une syntaxe très utile pour effectuer une disjonction de cas lorsqu’il y a plus de deux issues. Par
exemple :
>>> if a > 0:
... print (’a est strictement positif’)
... elif a < 0:
... print (’a est strictement négatif’)
... else :
... print (’a est nul’)
Ce programme a aussi la syntaxe suivante :
>>> if a > 0:
... print (’a est strictement positif’)
... else :
... if a < 0:
... print (’a est strictement négatif ’)
... else :
... print (’a est nul’)
16 CHAPITRE 2. INTRODUCTION À L’ALGORITHMIQUE
Remarque 2.3.1
Il existe une méthode format qui permet d’insérer les valeurs de variable dans une chaine de
caractère. Par exemple, l’instruction print(’Il y a eu ’,n,’ passages dans la boucle’)
peut être remplacée par print(’Il y a eu {} passages dans la boucle’.format(n)). La
méthode format est utilisable pour plusieurs variable. Par exemple, si a et b sont deux variables
d’un programme, on peut écrire :
Il faut faire attention de ne pas créer des boucles infinies. Il est toujours possible d’interrompre
un programme qui boucle indéfiniment dans Python. Voici deux exemples de boucle qui ne terminent
pas :
1. n = 1
while n != 0:
n=n+1
print (’boucle infinie’)
while True :
print (’boucle infinie’)
On peut arrêter de force une boucle à l’aide de l’instruction break. On procède de la façon sui-
vante :
n=1
while True :
if n <10:
break
else :
2.3. LES BOUCLES 17
Remarque 2.3.2
2. En python, on peut remplacer l’instruction n=n+1 par n+=1. De même, les instructions n=n+3,
n=n-4, n=3*n, n=n**2 et n=n/5 s’écrivent aussi n+=3, n-=4, n*=3, n**=2 et n/=5 respectivement.
2. Le programme ci-dessous donne le plus petit entier naturel n tel que 1 ` 23 ` ¨ ¨ ¨ ` n3 ě M , pour
M “ 104 .
M =10 ∗∗ 4
n=1
S=1
while S<M:
n=n+1
S=S+n ∗∗ 3
print (n)
On peut aussi écrire :
M =10 ∗∗ 4
n=1
S=0
while S<M:
S=S+n ∗∗ 3
n=n+1
print (n ´1)
[2, 3, 4, 5]
>>> list (range (1, 8, 2))
[ 1, 3, 5, 7]
>>> list (range (9, 0, ´1)
[9, 8, 7, 6, 5, 4, 3, 2, 1]
Les boucles for sont des boucles inconditionnelle qui permettent de répéter un bloc d’instructions
n fois, où n est un entier déterminé à l’avance. La syntaxe d’une telle structure est la suivante :
n=5
for k in range (n):
print (k)
Les boucles for peuvent être utiliser avec d’autres objets pouvant être itérés. Par exemple, les
chaines de caractère et les listes sont des objets itétables. Voici deux exemples d’utilisation de l’ins-
truction for :
1. Avec une liste.
L = [2, 3.14 , ’deux ’, ’pi ’ ]
for l in L:
print (l)
2. Avec une chaine de caractère.
for l in ’mathématiques ’:
print (l)
On donne maintenant une autre version du calcul de la somme des carrés des 100 premiers entiers.
n=100
S=0
for i in range (1,n+1):
S=S+i ∗∗ 2
2.4. FONCTIONS, MÉTHODES ET MODULES 19
>>> hi()
Bonjours
Dans certains programmes, on a besoin d’interagir avec l’utilisateur. La fonction input() permet
de demander à l’utilisateur d’entrer une valeur qui pourra être utilisée au cours de la procédure.
>>> x = input ()
’Quoi ?’ # L ’ u t i l i s a t e u r r e n t r e u ne v a l e u r
>>> print (x)
Quoi ?
>>> x = input (’Donner un entier ’)
Donner un entier 6 # l ’ u t i l i s a t e u r entre 6
>>> x
’6’
>>> x = int(input (’Entrer un entier :’))
Enter un entier :6
>>> x
6
20 CHAPITRE 2. INTRODUCTION À L’ALGORITHMIQUE
Ici, on importe tout le contenu du module math, mais il est plus commode d’ajouter le raccourci
as m.
3. >>> from math import ∗
>>> floor (4.6)
4
Le symbole ˚ signifie qu’on importe tous les noms des fonctions présentes dans le module. Mais
ceci n’est pas conseillé puisqu’il peut y avoir interférence avec les noms de vos propres fonctions
ou des fonctions dans d’autres modules.
On énumère quelques modules intéressants dont certains seront développés plus tard dans ce cours :
— random : générer des nombres aléatoires.
— time : fonction clock qui permet de mesurer des temps d’exécution.
— Autre : turtle, sys, os, matplotlib, fraction, décimal etc . . .
m ∗ a ∗ t ∗ h ∗ é ∗ m ∗ a ∗ t ∗ i ∗ q ∗ u ∗e ∗ s ∗
On peut aussi écrire ce programme à l’aide d’une boucle while :
>>> c = ’mathématiques ’
>>> index = 0
>>> while index < len(c):
... print ( c[index ] + ’ ∗ ’, end = ’ ’)
m ∗ a ∗ t ∗ h ∗ é ∗ m ∗ a ∗ t ∗ i ∗ q ∗ u ∗e ∗ s ∗
Définition 2.5.1
Une liste est un ensemble de données dans lequel chacune des données est repérée par un indice.
a : b : c : 1 : 2 : 3 : True : False :
>>> 5 in tup
False
On note qu’il n’est pas possible d’utiliser l’instruction del ou la méthode remove() par exemple.
Définition 2.6.1
Les structures ou instructions itératives sont des instructions qui permettent de répéter un certain
nombre de fois une série d’instructions simples ou composées constituant un bloc.
Définition 2.6.2
Un invariant est une propriété logique sur les valeurs des variables qui caractérisent tout ou partie
de l’état interne du programme et qui doit être « toujours » vraie. Dans le cas d’un programme
itératif, l’invariant est l’l’invariant de boucle.
Définition 2.6.3
On appelle invariant de boucle un prédicat sur les arguments de la boucle qui doit être vraie
avant et après chaque passage dans la boucle.
Après la k-ème itération (après le k-ème passage dans la boucle), la valeur de res est égale à k!.
En effet, pour la condition initiale (res “ 1 “ 0!) la propriété est vraie (pas encore de passage
dans la boucle). Supposons qu’elle est vraie après le k-ème passage dans la boucle, avec k ă n.
Par hypothèse de récurrence, on a res “ k!, et lors du k ` 1-ème passage la variable res devient
2.6. COMPLÉMENTS D’ALGORITHMIQUE 27
res “ k! ˆ pk ` 1q “ pk ` 1q!, d’où la propriété au rang k ` 1. Ce qui prouve l’invariant pour tout k
dans J1, nK (il y a exactement n passages dans la boucle). Une fois la boucle terminée (elle s’arrête
nécessairement puisqu’elle est inconditionnelle) on obtient res “ n! (la boucle termine après la n-ème
itération), ce qui est bien le résultat cherché.
On donne une autre version de ce programme :
def fac2(n):
i = n
res = 1
while i > 0:
res = res ∗ i
i = i ´ 1
return res
Un invariant de boucle est « on a toujours res ˆ i! “ n! ».
On ne démontrera pas systématiquement l’invariant de boucle, mais il est souhaitable de le mettre
en commentaire dans le programme lorsque que celui-ci est itératif.
On s’intéresse à la somme des termes d’une liste de nombres.
def somme (L):
k = 0
s = 0
while k < len(L):
s = s + L[k]
k += 1
#I n v a r i a n t : s = somme p o u r i d e 0 à k d e s L [ i ]
return s
k
ÿ
L’invariant est le suivant s “ Lris. C’est évident pour les valeurs initiales des variables s et k. A
i“0
chaque passage dans la boucle, k est incrémenté de 1 et on ajoute à s le terme Lrks. La récurrence est
lenpLq´1
ÿ
immédiate et après le dernier passage dans la boucle, la valeur de k est lenpLq´1, ainsi s “ Lris
i“0
ce qui est le résultat attendu.
On cherche à fournir le quotient et le reste de la division euclidienne de deux entiers. Des erreurs
se sont glissés dans le programme ci-dessous. Les corriger en étudiant l’invariant de boucle. Puis
démontrer la terminaison et la correction de l’algorithme.
28 CHAPITRE 2. INTRODUCTION À L’ALGORITHMIQUE
Exemple 2.6.4
Donnons quelques exemples de taille de donnée :
1. Une chaine de n caractères ou une liste de n éléments sera une donnée de taille n.
2. Un tableau à n lignes et p colonnes sera une donnée de taille np.
3. La taille d’un entier n peut être donnée par son nombre de chiffres à savoir tlog2 pnqu, où
log2 est le logarithme en base 2.
4. Un nombre décimal peut être caractérisé par son exposant et la taille de sa mantisse (voir
le chapitre sur la représentation des nombres en machine).
Définition 2.6.5
un “ Θpvn q si, et seulement si, il existe c ą 0 tel que :
1
un ď vn ď cun , @n P N.
c
Les ordres de grandeur de complexité les plus importants sont les suivants :
— logarithmique : de l’ordre de lnpnq,
— linéaire : de l’ordre de n,
— quasi-linéaire : de l’ordre de n lnpnq,
— quadratique : de l’ordre de n2 ,
— polynomial : de l’ordre de nk , pour un entier k ě 2,
— exponentiel : de l’ordre de an , où a ą 1.
La complexité peut également dépendre de la nature des données. Par exemple, il est très facile de
savoir que 243112609 n’est pas premier alors que c’est difficile pour 243112609 ´ 1 qui sont pourtant des
entiers de taille équivalente. C’est pourquoi, il est courant de mesurer la complexité d’un programme
en moyenne mais aussi dans le pire des cas.
L’algorithme de recherche d’un élément dans une liste est le suivant :
def trouv (x,L):
res = False
30 CHAPITRE 2. INTRODUCTION À L’ALGORITHMIQUE
def som1(n):
s=0
for i in range (n+1):
s=s+fact (i)
return s
On donne une autre algorithme pour calculer la somme :
def som2(n):
s=1
f=1
for i in range (1,n +1):
s=s+f
f=f ∗ i
return s
Comparer le nombre de multiplications effectuées dans les algorithmes som1 et som2.
On donne deux algorithmes pour calculer un nombre a à une puissance entière n. La méthode
« naïve » est la suivante :
def puissance (a,n):
res = 1
for i in range (n):
res = res ∗ a
return res
Il est évident que cet algorithme a une complexité linéaire. On donne maintenant l’algorithme d’ex-
ponentiation rapide qui calcule aussi an . L’exponentiation rapide a pour but de calculer une puissance
entière d’un réel en faisant le moins de multiplications possibles. Soit a un réel et n un entier naturel.
2
On écrit n en base 2 : n “ dN ¨ ¨ ¨ d0 . On rappelle que les N chiffres de n dans son écriture en base 2
sont dans t0, 1u et n “ d0 ` d1 2 ` ¨ ¨ ¨ ` dN ´1 2N ´1 . On a 2N ´1 ď n ă 2N . Ainsi, on peut écrire :
N´1
an “ ad0 ˆ pa2 qd1 ˆ ¨ ¨ ¨ ˆ pa2 qdN´1 .
Par cette méthode, on effectue au plus N ˆ pN ´ 1q multiplications. On peut résumer cet algorithme
de calcul de la façon suivante :
n
#
n px2 q 2 si n est pair,
a “ n´1
xpx2 q 2 si n est impair.
La documentation en ligne des modules numpy et scipy est accessible à l’adresse http ://docs.scipy.org/doc/.
33
34 CHAPITRE 3. QUELQUES MODULES DE PYTHON ET APPLICATIONS
Chapitre 4
Sommaire
4.1 L’algèbre relationnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.1.1 Formalisme de l’algèbre relationnelle . . . . . . . . . . . . . . . . . . . . . . . . 35
4.1.2 Création d’une base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.2 Opérateurs sur le modèle relationnel . . . . . . . . . . . . . . . . . . . . . . 39
4.2.1 Projection et sélection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.2.2 Produit cartésien et jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.3 Requêtes SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.3.1 Requêtes d’agrégation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
On souhaite mettre en place un système en ligne pour recueillir les notes orales des élèves de MPSI.
On peut stoker ces données sous forme de tableau :
Notes =[( ’Prof1 ’, [(15 , ’élève1 ’, ’semaine1 ’),
(10, ’élève2 ’,’semaine1 ’)]),
(’Prof2 ’ ,[(9, ’élève3 ’,’semaine1 ’),
(11, ’élève4 ’,’semaine1 ’)]]
Cette façon de stoker les données est commode pour trouver les notes données par chaque colleur.
En revanche, la recherche de la liste des élèves ayant eu une note inférieure à 10 peut avoir un coût
en temps important. Les bases de données relationnelles vont répondre de manière efficace à notre
problème.
Le problème de certains choix de stockage de données est la redondance des informations enregis-
trées. La base de donnée représentée par le tableau suivant possède cette inconvénient.
Semaine Professeur Groupe Elève Note
1 Vas 2 Lamp 15
1 Vas 2 Maz 8
1 Tour 7 Guy 15
2 Tour 5 Kat 11
2 Vas 7 Guy 10
2 Vas 2 Maz 12
35
36 CHAPITRE 4. INITIATION AUX BASES DE DONNÉES
On considère A un ensemble fini. Les éléments de A sont appelés des attributs. On se donne
également un ensemble D (fini ou infini) et une application dom : A Ñ PpDq. On pose
Di “ dompAi q, pour tout Ai P A. L’ensemble Di sont appelé le domaine de Ai .
Définition 4.1.1
Un schéma relationnel est un sous-ensemble S “ tA1 , . . . , An u de A.
Définition 4.1.2
Soit S “ tA1 , . . . , An u un schéma relationnel. On appelle relation ou table associée au schéma
relationnel S un sous-ensemble fini de D1 ˆ ¨ ¨ ¨ ˆ Dn . On note R ou RpSq cette relation.
Remarque 4.1.3
Les éléments d’une relation sont alors des n-uplets (nuplet ou « tuple » en anglais), où n est le
nombre d’attributs dans le système relationnel.
Définition 4.1.4
Soit RpSq une relation associée au schéma relationnel S. Les éléments de RpSq sont les valeurs
ou les enregistrement de la relation. On note 7RpSq le nombre d’éléments (ou cardinal) de RpSq.
4.1. L’ALGÈBRE RELATIONNELLE 37
Exemple 4.1.5
La table Notes est une relation dont le système relationnel est constitué des attributs valeur,
nom, semaine et élève (ce sont les colonnes de la table). Les lignes sont les enregistrements de la
relation.
Remarque 4.1.6
Pour e P RpSq, on pourra noter e.A la composante de e associée à l’attribut A. Si K Ă S, on
notera epKq les valeurs de e pour les attributs de K. Dans notre cas, si on note e3 la troisième
ligne de la table Élève, on a e3 pnom,groupeq “ tLamp,2u et e3 .id “ 3.
Définition 4.1.7
[Base de donnée] Une base de données est un ensemble de relations accompagnées de leurs sys-
tèmes relationnels.
(a) E1 (b) E2
id nom prénom groupe id nom prénom groupe
1 Maz Max 1 3 Lamp Steevy 2
4 Kat Ben 2 4 Kat Ben 2
5 Alsander Guy 3 5 Alsander Guy 3
(c) E1 X E2
id nom prénom groupe
4 Kat Ben 2
5 Alsander Guy 3
Proposition 4.1.8
Deux relations R1 et R2 associées au même système relationnel S sont des sous-ensembles finis de
D1 ˆ ¨ ¨ ¨ ˆ Dn , où les Di sont les domaines des attribues de S. On peut alors utiliser les opérateurs
ensemblistes sur les relations portant sur un même système relationnel S. Par exemple, R1 Y R2 ,
R1 X R2 et R1 zR2 (aussi noté R1 ´ R2 ) sont des relations associées à S respectivement appelées la
réunion, l’intersection et la différence.
Définition 4.1.9
[Clé] Soit K Ă S. On dit que K est une clé pour R si pour toutes valeurs e1 et e2 dans R telles
que e1 pKq “ e2 pKq, on a e1 “ e2 .
(d) E1 Y E2 (e) E1 ´ E2
id nom prénom groupe id nom prénom groupe
1 Maz Max 1 1 Maz Max 1
3 Lamp Steevy 2
4 Kat Ben 2
5 Alsander Guy 3
Exemple 4.1.10
Dans la table « Elève », les attributs « nom, prénom » forment une clé. En revanche, l’attribut
« nom » seul n’est pas une clé.
Définition 4.1.11
[Clé primaire] Une clé primaire (ou identifiant) est une clé constituée d’un seul attribut.
Remarque 4.1.12
Soit RpSq une relation et A P S. Si A est une clé primaire, alors e ‰ e1 donne e.A ‰ e1 .A. En
d’autres termes, l’application suivante est injective :
pA : RpSq Ñ dompAq
e ÞÑ e.A
Exemple 4.1.13
Dans la table « Élève », l’attribut « id » est une clé primaire.
Exemple 4.1.14
Dans la table « Notes », il n’y a pas de clé primaire.
Remarque 4.1.15
Il est parfois pratique de rajouté un identifiant de type entier en tant qu’attribut qui jouera le
rôle de clé primaire.
Définition 4.1.16
[Clé étrangère] Une clé étrangère est l’attribut d’une relation dont le domaine est une clé primaire
d’une autre relation.
Exemple 4.1.17
Dans la table « Notes », les attributs « nom » et « id » sont tous les deux des clés étrangères.
Exemple 4.1.18
On considère les schémas relationnels donnés par les tables ??. On représente cette base de
données de la façon suivante :
Elèves(id, nom, prénom, groupes)
Colleurs(nom, prémon, matière)
Notes(valeur, 7 colleur, semaine, 7 élève)
Les clés choisies sont soulignées et les clés étrangères sont marquées d’un 7. On peut ajouter les
domaines des attributs :
INT : entier.
VARCHAR(n) : chaine de caractère d’au plus n caractères.
REAL, FLOAT
DATE . . .
4.2. OPÉRATEURS SUR LE MODÈLE RELATIONNEL 39
Exercice 4.1. On souhaite réaliser une base de données représentant les séances des films joués
dans différentes salles de cinéma. L’ensemble des attributs sera : titre, réalisateur, acteur, salle, co-
ordonnées, téléphone et horaire. Proposer un ensemble de schémas relationnels, de clés primaires et
étrangères permettant de réaliser cette base de données. Donner le domaine des attributs.
Exercice 4.2. On souhaite créer un atlas numérique des résultats sportifs aux Jeux Olympiques. La
base de données devra contenir :
Les dates, les villes et les différentes épreuves des Jeux Olympiques.
Les noms, nationalités et résultats des athlètes.
Proposer un ensemble de schémas relationnels, de clés primaires et étrangères permettant de réaliser
cette base de données.
Exercice 4.3. Une entreprise de vente de pièces automobiles souhaite informatiser sa gestion. La
base de données devra stocker les informations suivantes :
Les produits proposés, leur désignation, le prix unitaire et la quantité en stock.
Les différentes commandes passées, la date et son prix total.
Les noms et prénoms des clients, ainsi que leur(s) numéro(s) de téléphone.
Proposer un ensemble de schémas relationnels, de clé primaires et étrangères permettant de réaliser
la gestion des commandes de cette entreprise. Donner le domaine des attributs.
Définition 4.2.1
L’algèbre relationnelle est l’ensemble des relations, dont les systèmes sont des parties de A, muni
des opérateurs relationnels.
Définition 4.2.2
[Projection] Soit X Ă S. La projection de R selon X est la relation, notée πX pRq, définie par :
Remarque 4.2.3
On rappelle que epXq représente les valeurs des attributs présents dans X. Par exemple, la
projection des noms des élèves ou des groupes des élèves.
Remarque 4.2.4
Le nombre d’éléments dans la nouvelle relation πX pRq est inférieur ou égale à celui de la relation
initiale R.
40 CHAPITRE 4. INITIATION AUX BASES DE DONNÉES
Exemple 4.2.5
Table des attributs nom et prénom des élèves : πnom,prénom pElèveq.
Définition 4.2.6
[Sélection] Soit A P S et a P dompAq. On appelle sélection de R selon A “ a la relation, notée
σA“a pRq, définie par :
σA“a pRq “ te P R, e.A “ au.
Remarque 4.2.7
Lorsque les domaines des attributs le permettent, le critère de sélection peut utiliser d’autres
relations de comparaison et aussi des opérations (ď, ě, ă, ą, somme, produit . . . ). La sélection
peut aussi être effectuée selon plusieurs attributs.
Exemple 4.2.8
Table des notes dont la valeur est 20 : σvaleur“20 pN otesq.
Exemple 4.2.9
Table des notes inférieures à 10 de la semaine 1 : σvaleură10,semaine“1 pN otesq.
Exemple 4.2.10
Table des identifiants des élèves qui ont eu la note 20 au moins une fois : πid pσV aleur“20 pN otesqq.
Proposition 4.2.11
La sélection et la projection sont des opérateurs commutatifs.
Exercice 4.4. On considère les tables « Elèves » et « Notes ». À l’aide des opérateurs relationnels,
exprimer les requêtes suivantes :
1. Table des élèves dont le nom est Maz.
2. La table des noms et prénoms des élèves du groupe 1.
3. La table des notes de l’élève Lamp Steevy dont l’identifiant est 3.
4. La table des identifiants des élèves qui ont eu une note inférieure à 10.
Définition 4.2.12
[Produit cartésien]
Soient RpSq et R1 pS 1 q deux relations de schémas S et S 1 disjoints. Le produit cartésien de R et
R1 est la relation notée R ˆ R1 définie par :
Remarque 4.2.13
Si les schémas des relations ne sont pas disjoints, on peut effectuer un renommage avant le produit
cartésien. Le relation obtenue après le renommage de l’attribut A1 en B1 dans la relation R est
notée σA1 ÐB1 pRq.
Définition 4.2.14
[Jointure] Soient RpSq et R1 pS 1 q deux relations de schémas S et S 1 disjoints. On considère A P S
et A1 P S 1 tels que dompAq “ dompA1 q. La jointure symétrique de R et R1 selon A “ A1 est la
relation, notée R ’ R1 , définie par :
A“A1
R ’ R1 “ σA“A1 pR ˆ R1 q.
A“A1
(c) R1 ’ R2
(a) R1 (b) R2 R1.id“R2.id
valeur nom id id nom prénom valeur nom id id nom prénom
15 Vas 1 1 Maz Max 15 Vas 1 1 Maz Max
12 Beg 3 3 Lamp Steevy 12 Beg 3 3 Lamp Steevy
Exercice 4.5. On considère les tables « Elèves » et « Notes ». À l’aide des opérateurs relationnels,
exprimer les requêtes suivantes :
1. La table des noms, prénoms et notes.
2. Table des noms, prénoms, notes et matières.
3. La table des notes du groupe 2 de la semaine 1.
4. La table des noms, prénoms et identifiants des élèves dont une note est inférieure à 10 entre la
semaine 1 et la semaine 15.
5. La table des élèves qui n’ont pas de note entre les semaines 10 et 15.
6. La table des élèves dont toutes les notes sont inférieures à 8 entre les semaines 10 et 15.
SELECT : cette clause correspond à l’opérateur de sélection et permet de déclarer une liste d’attributs.
FROM : déclare la liste des tables nécessaire à la requête.
42 CHAPITRE 4. INITIATION AUX BASES DE DONNÉES
WHERE : c’est la clause permettant de définir les prédicats en utilisant la logique propositionnelle.
JOIN ...ON : jointure de deux tables, le critère de jointure est introduit par ON.
NOT IN : réalise la différence de deux tables.
UNION : réunion de deux tables ayant les mêmes attributs.
INTERSECT : intersection de deux tables ayant les mêmes attributs.
ORDER BY : Trie la table selon l’attributs en argument.
LIMIT 0, 30 : limite le nombre de ligne affichées à la fois à l’écran.
1. Projection : liste des identifiants, noms et prénoms des élèves.
SELECT id , nom , prénom
FROM Elèves
L’opérateur ˚ permet d’afficher toute la table.
SELECT ∗
FROM Elèves
2. Sélection : liste des lignes de la table Note pour lesquelles la note est 20.
SELECT ∗
FROM Notes
WHERE valeur =20
La table Notes possède la clé étrangère « élève ». Pour ne sélectionner qu’une note de valeur 20
par élève, on utilise la clause DISTINCT.
SELECT DISTINCT ∗
FROM Elèves
WHERE valeur =20
3. Liste des noms et prénoms des élèves qui ont eu au moins une note égale à 20. Il y a deux façons
de réaliser une jointure sur deux tables.
SELECT DISTINCT Elèves .nom , Elèves .prénom
FROM Elèves , Notes
WHERE Elèves .id = Notes .id AND Notes . valeur =20
SELECT DISTINCT Elèves .nom , Elèves .prénom
FROM Elèves JOIN Notes ON Elèves .id=Notes .id
WHERE Notes .valeur =20
4. Les noms et prénoms des élèves qui n’ont jamais eu moins de 10. On commence par extraire la
table des élèves qui ont déjà eu une note inférieure à 10.
SELECT E.nom , E. prénom
FROM Elèves AS E
JOIN Notes AS N ON E.id=N.id
WHERE N.valeur <10
La requête finale :
SELECT E.nom , E. prénom
FROM Elèves AS E
WHERE (E.nom , E. prénom )
NOT IN (
SELECT E.nom , E.prénom
FROM E
JOIN Notes AS N ON E.id=N.id
WHERE N.valeur <10
)
4.3. REQUÊTES SQL 43
UNION
Exercice 4.6. Reprendre les questions des exercices 4.4 et 4.5 et traduire les formules de l’algèbre
relationnelle obtenues dans le language SQL.
SELECT ∗
FROM ( Elève JOIN Notes ON Elève .id=Notes .id )
JOIN Colleurs ON Notes .nom=Colleur.nom
6. Donner les nom, prénom et moyenne des élèves par colleur :
SELECT E.nom , E.prénom , C.nom , AVG(valeur )
FROM ( Elève AS E JOIN Notes AS N ON E.id=N.id )
JOIN Colleurs AS C ON N.nom=C.nom
GROUP BY E.id , C.nom
Attention ! il est indispensable de préciser de quelle table sont issus les attributs nom et prénom.
7. Nom, prénom et moyenne des élèves ayant une moyenne supérieure ou égale à 15 :
SELECT E.nom , prénom , AVG(Valeur )
FROM Elève AS E
JOIN Notes ON E.id=Notes .id
GROUP BY E.id
HAVING AVG(Notes .valeur )>= 15
Exercice 4.7. Donner la table des groupes de colle et la moyenne de chaque groupe.
Exercice 4.8. Nom et prénom des élèves dans l’ordre des moyennes décroissantes.
Bases de données : TP 1
Pour commencer le TD :
— Ouvrir le logiciel SQLiteSpy.
— Ouvrir, avec SQLiteSpy, la base de donnée « Videoclub » ce trouvant au même emplacement
que le logiciel.
Le Schéma relationnel de la base de donnée « Videoclub »est le suivant :
— Personne (idPersonne, nom).
— Realisateur (7 idPersonne, 7 idFilm).
— Acteur (7 idPersonne, 7 idFilm).
— Film (idFilm, titre_VO, titre_VF, année, pays).
— Client (numClient, nom, ville, credit, bonus).
— Emprunte (numClient, 7 numInventaire, dateEmprunt).
— Exemplaire (numInventaire, 7 idFilm, format).
Exercice 4.3.1
Dans la base de donnée « Videoclub » (sans réaliser de requêtes SQL) :
1. Chercher l’identifiant de « Alan Napier ».
2. Vérifier que la personne »Heath Ledger » n’est pas dans la base de donnée.
3. On souhaite ajouter le film L’Associé du diable, The Devil’s Advocate datant de 1998, réalisé
au USA par Taylor Hackford avec Al Pacino, Keanu Reeves, Charlize Theron.
(a) Ajouter, dans la table « Film », le film L’Associé du diable, The Devil’s Advocate,
1998, USA.
(b) Ajouter le réalisateur Taylor Hackford.
(c) Ajouter les acteurs Al Pacino, Keanu Reeves et Charlize Theron.
4. Ajouter le film suivant : The Dark Knight, Le chevalier noir, The Dark Knight, 2008, USA
réalisé par Christopher Nolan avec Christian Bale, Heath Ledger, Aaron Eckhart.
Exercice 4.3.2
Exécuter les requêtes suivantes après les avoir formulées à l’aide des opérateurs de l’algèbre
relationnelle.
1. Donner les films plus récents que 2008.
2. Donner la liste des clients dont la ville est Gif-sur-Yvette et dont le bonus est entre 0 et 1.
3. Donner les identifiants des personnes à la fois acteurs et réalisateurs.
4. Quels sont les films où joue « Belmondo ».
5. Quels sont les réalisateurs de « Gran Torino ».
6. Quels sont les films où « Clint Hiswood » est à la fois acteur et réalisateur.
7. Quels sont les films où joue « » et « » ?
8. Donner le nombre de films par nationalité.
9. Donner la liste des villes par ordre croissant possédant le plus de clients.
Bases de données : TP 2
Correction des exercices
Bibliographie
49