Cours
Cours
Cours
à l’informatique
Introduction
à l’informatique
Serge Bays 1re année
prépa
scientifique
ISBN 9782340-049918
© Ellipses Édition Marketing S.A., 2016
32, rue Bargue 75740 Paris cedex 15
Avant-propos
L’ordre des chapitres, qu’il est conseillé de suivre pour un travail fructueux,
est à l’image de la progression suivie en classe avec les étudiants.
Les chapitres 1 à 8 occupent un peu plus d’un semestre et donnent tous les
2 AVANT-PROPOS
Chacun de ces chapitres est composé d’une partie cours suivie par de nom-
breux exercices variés et progressifs qui sont tous corrigés. Très souvent un corrigé
est donné sous la forme d’un programme et il est bien entendu qu’il s’agit d’une
réponse parmi plusieurs envisageables et aussi valables les unes que les autres.
Deux chapitres concluent ce livre avec les principaux outils des bibliothèques
NumPy, Matplotlib, SciPy et un résumé condensé du langage Python.
Je remercie les collègues avec qui j’ai eu la chance de partager cet enseigne-
ment pour les nombreux et fructueux échanges ainsi que tous les élèves qui l’ont
expérimenté. Sans eux ce livre ne serait pas le même.
Merci à mon épouse et mes deux filles pour leur soutien et leur patience.
Table des matières
1 Architecture 9
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.1.1 Définition : ordinateur . . . . . . . . . . . . . . . . . . . 9
1.1.2 Définition : informatique . . . . . . . . . . . . . . . . . . 10
1.2 Histoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2.1 Première génération . . . . . . . . . . . . . . . . . . . . 10
1.2.2 Deuxième génération . . . . . . . . . . . . . . . . . . . . 10
1.2.3 Troisième génération . . . . . . . . . . . . . . . . . . . . 10
1.2.4 Quatrième génération . . . . . . . . . . . . . . . . . . . . 10
1.3 Architecture matérielle . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.1 Architecture de Von Neumann . . . . . . . . . . . . . . . 11
1.3.2 Une machine . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.4.1 Systèmes d’exploitation . . . . . . . . . . . . . . . . . . 13
1.4.2 Organisation du disque dur . . . . . . . . . . . . . . . . . 14
1.4.3 Environnement de développement . . . . . . . . . . . . . 14
1.5 Exercices corrigés . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2 Eléments de base 23
2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1.2 Ecriture d’un programme . . . . . . . . . . . . . . . . . . 23
2.2 Langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.2.1 Catégories de langages . . . . . . . . . . . . . . . . . . . 24
2.2.2 Langages de programmation . . . . . . . . . . . . . . . . 24
2.3 Algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.3.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.3.2 Composition . . . . . . . . . . . . . . . . . . . . . . . . 25
2.4 Démarrage en Python . . . . . . . . . . . . . . . . . . . . . . . . 26
2.4.1 Objets, types numériques, expressions . . . . . . . . . . . 26
2.4.2 Variables et affectation . . . . . . . . . . . . . . . . . . . 27
2.4.3 Type str et fonction input . . . . . . . . . . . . . . . . . . 28
4 TABLE DES MATIÈRES
5 Fonctions 87
5.1 Définition d’une fonction . . . . . . . . . . . . . . . . . . . . . . 87
5.2 Documentation d’une fonction . . . . . . . . . . . . . . . . . . . 90
5.3 Espace et portée des variables . . . . . . . . . . . . . . . . . . . 91
5.3.1 Espace local . . . . . . . . . . . . . . . . . . . . . . . . 91
5.3.2 Portée d’une variable . . . . . . . . . . . . . . . . . . . . 91
5.3.3 Variables globales . . . . . . . . . . . . . . . . . . . . . 92
5.4 Quelques algorithmes . . . . . . . . . . . . . . . . . . . . . . . . 92
5.4.1 Solutions d’une équation . . . . . . . . . . . . . . . . . . 92
5.4.2 Recherche d’extremum . . . . . . . . . . . . . . . . . . . 94
5.4.3 Test de la monotonie . . . . . . . . . . . . . . . . . . . . 95
5.4.4 Calcul d’intégrales . . . . . . . . . . . . . . . . . . . . . 96
5.5 Exercices corrigés . . . . . . . . . . . . . . . . . . . . . . . . . . 99
TABLE DES MATIÈRES 5
7 Fichiers 135
7.1 Gestion des fichiers . . . . . . . . . . . . . . . . . . . . . . . . . 135
7.1.1 Ouverture d’un fichier . . . . . . . . . . . . . . . . . . . 135
7.1.2 Fermeture d’un fichier . . . . . . . . . . . . . . . . . . . 136
7.2 Ecriture et lecture . . . . . . . . . . . . . . . . . . . . . . . . . . 136
7.2.1 Ecriture . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
7.2.2 Lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
7.3 Fichiers binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
7.4 Exercices corrigés . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Architecture
1.1 Introduction
Un système informatique se compose de deux parties :
• une partie matérielle (hardware en anglais) qui représente l’ensemble des
composants de la machine,
• une partie logicielle (software en anglais) constituée des logiciels s’exé-
cutant sur le matériel.
Une bonne connaissance du fonctionnement interne de l’ordinateur et des ca-
ractéristiques du matériel permet de comprendre pourquoi certains algorithmes se
révèlent efficaces alors que d’autres le sont moins, par rapport à une architecture
donnée, et comment en améliorer le fonctionnement.
1.2 Histoire
1.2.1 Première génération
Les premiers ordinateurs datent des années 1940 et étaient utilisés par l’armée,
par exemple L’ENIAC (Electronic Numerical Integrator Analyser and Computer)
aux Etats-Unis, qui pesait 30 tonnes, ou bien la série Z1, Z2 et Z3, en Allemagne.
Leur technologie était basée sur des tubes électroniques qui prenaient une place
importante et dégageaient beaucoup de chaleur. De plus ils coûtaient très cher.
Leur puissance de calcul (unité : le Flop, floating point operation per seconde)
était comparable à celle d’une petite calculette actuelle.
En 1951, Grace Hopper (1906-1992), informaticienne américaine, conçoit le
premier compilateur. Elle est à l’origine de l’expression "bug informatique".
La mémoire stocke des nombres et des instructions sur 32 bits ou 64 bits pour
les ordinateurs les plus récents.
Le processeur (CA + CC) communique avec la mémoire et les entrées/sorties
par des "bus".
L’horloge est un circuit qui émet un signal périodique afin de synchroniser les
circuits qui en ont besoin (en particulier les circuits mémoires).
• L’unité centrale :
– Carte mère
– Micro-processeur
– Mémoire
– Périphériques internes : disque dur, lecteur DVD, carte graphique, carte ré-
seau, . . .
– Ports de communication
12 CHAPITRE 1. ARCHITECTURE
Carte mère
La carte mère est un circuit imprimé qui permet de mettre en contact physique
les composants et les périphériques. Les différents composants de la machine sont
reliés par des canaux de communication, appelés bus, permettant d’échanger l’in-
formation. La carte mère détermine la vitesse des différents bus.
Sur une carte mère se trouvent :
– le socket qui est le support sur lequel se connecte le processeur et qui déter-
mine son type ;
– des connecteurs pour la mémoire qui déterminent le type de mémoire à uti-
liser ainsi que la taille de la mémoire maximale ;
– différents ports :
• PCI (Peripheral Component Interconnect) pour les cartes d’extension
graphique, son, réseau ;
• AGP (Accelerated Graphics Port) pour les cartes graphiques hautes per-
formances ;
• IDE (Integrated Device Electronics) pour les périphériques internes, les
disques durs, les lecteurs/graveurs de CD/DVD ;
• USB (Universal Serial Bus) destiné à remplacer et uniformiser les diffé-
rentes connexions comme les claviers, souris, imprimantes qui utilisent les
ports parallèle, série, . . . ;
• IEEE 1394 (FireWire ou i.Link) pour des périphériques à très haut débit
comme les caméras numériques.
Notion de bus
Un bus se décompose en 3 parties :
• le bus d’adresses pour spécifier l’adresse mémoire visée ;
• le bus de données pour envoyer ou recevoir une donnée ;
• le bus de commandes pour spécifier si c’est une lecture ou une écriture qui
doit s’effectuer.
Sa largeur, (en nombre de bits ou d’octets) indique le nombre de bits qui sont
transférés en même temps et sa fréquence, (en hertz), indique la vitesse de transfert
de l’information. La bande passante est : fréquence × largeur.
1.4. FONCTIONNEMENT 13
Mémoires
L’information est stockée en mémoire :
• mémoire vive (RAM = Random Access Memory) accessible en lecture et
en écriture ;
• mémoire morte (ROM = Read Only Memory) accessible en lecture seule ;
• mémoire de masse (disque dur, clé USB, CD, DVD, bandes).
La mémoire vive est une mémoire volatile : si l’alimentation est coupée, les
données qu’elle contient sont perdues. Elle stocke les programmes exécutés par le
processeur.
La mémoire morte est une mémoire non volatile. Elle contient du code et des
données qui ne sont modifiés que très rarement. Les ROM contiennent générale-
ment les routines d’accès de base aux périphériques.
Dans les ROM classiques, l’information contenue est enregistrée de manière
irréversible lors de la fabrication du circuit.
1.4 Fonctionnement
Une machine ne comprend que le langage binaire et elle exécute tout ce qui lui
est demandé sans intelligence. L’utilisateur communique avec elle en utilisant un
langage de programmation qui est traduit en langage machine par un compilateur
ou un assembleur. Si l’information peut s’écrire avec des nombres, il s’agit donc
de pouvoir représenter un nombre dans une machine.
Dans un circuit avec un interrupteur, il passe du courant si l’interrupteur est
fermé, et il n’en passe pas si l’interrupteur est ouvert. Si nous ajoutons une lampe
dans ce circuit alors si la lampe est allumée, cela signifie "un", et si elle est éteinte
cela signifie "zéro". Si un nombre peut s’écrire en base deux, il est donc possible de
le représenter physiquement dans la machine avec plusieurs circuits en parallèle.
L’installation d’une version portable sur un ordinateur ou sur une clé USB
permet d’éviter toutes sortes de problèmes.
Winpython est un environnement complet pour Windows. Brancher une clé
USB sur un ordinateur, aller sur la page http://winpython.sourceforge.
net/ où tout est expliqué.
Quand l’installation est terminée, la clé contient un dossier "WinPython-. . . ".
Ce dossier peut être copié à volonté sur d’autres clés ou ordinateurs.
Pour ouvrir l’interpréteur Idle, cliquer dans le dossier "WinPython-. . . " sur
"IDLE (Python GUI).exe" (ou sur le fichier de commande "idle.bat" qui se trouve
à l’adresse "WinPython . . . /Python . . . /Lib/idlelib/ ").
La clé USB peut être utilisée sur n’importe quel ordinateur même si Python
n’y est pas installé.
5. Quelle est la capacité du disque dur (hard drive) et, éventuellement, quelles
sont les différentes partitions avec les capacités et les systèmes de fichiers
respectifs ?
Quelle est la taille de l’espace utilisé et quelle est la taille de l’espace libre ?
Windows utilise une zone du disque dur (un fichier d’échange) comme de
la mémoire RAM (mémoire virtuelle). Quel est la taille de ce fichier et sur
quelle partition se trouve-t-il ?
Exercice 1.5.2
Supposons que le système de fichiers créé au formatage du disque dur d’un
ordinateur utilise des clusters de 4 Ko. (1Ko = 1024 octets)
1.5. EXERCICES CORRIGÉS 17
Quelle est la place totale en Ko réservée sur le disque pour stocker trois fichiers
dont les tailles respectives sont 2000 octets, 5624 octets et 5234 octets ?
Corrigé
1 clusters = 4 Ko = 4096 octets.
Il faut donc 1 cluster pour le fichier de 2000 octets, 2 clusters pour le fichier de
5624 octets et 2 clusters pour le fichier de 5234 octets. Soit au total 5 clusters ce
qui fait 20 Ko.
Exercice 1.5.3
1. Créer un dossier nommé informatique puis, dans ce dossier, créer un dos-
sier nommé test ; quelles sont les tailles des différents dossiers créés et les
tailles occupées sur le disque dur ?
2. Ouvrir un éditeur de texte basique, écrire le mot "bonjour" et enregistrer le
fichier en format "texte brut" avec le nom "test1.txt" dans le dossier test.
Quelle est la taille du fichier "test1" ? Quelle est la taille occupée par ce
fichier sur le disque ?
3. Ecrire dans un deuxième fichier un mot de trois lettres puis un mot de six
lettres séparés par une espace et l’enregistrer sous le nom "test2.txt". La
taille de ce fichier et la taille qu’il occupe sur le disque sont-elles prévi-
sibles ? Vérifier.
Quelle est maintenant la taille du dossier test ?
4. Ecrire n fois la lettre "a", où n est la taille en octets d’un cluster, sans espace
ou retour à la ligne (conseil : utiliser copier-coller). Enregistrer le fichier au
format "texte brut" et vérifier la taille. Ajouter un "a" à la suite et observer
la nouvelle taille.
5. Utiliser maintenant un éditeur permettant d’enregistrer le fichier "test1" sous
différents formats. Comment expliquer les différences entre les tailles des
fichiers ?
Corrigé
1. Les tailles sont nulles ; créer un dossier revient simplement à donner un nom
à une zone du disque dur.
2. La taille du fichier est 7 octets (un octet par caractère). La taille occupée sur
le disque est la taille d’un cluster qui dépend de la taille des partitions et de
leur format (4 Ko pour NTFS et une partition d’au moins 2Go).
3. La taille du fichier test2.txt est de 10 octets (l’espace compte comme un
caractère). Le fichier occupe un cluster sur le disque.
Le dossier test a maintenant la taille de deux clusters.
18 CHAPITRE 1. ARCHITECTURE
4. La taille occupée sur le disque est d’un cluster ; avec un "a" en plus, la taille
passe à deux clusters.
5. La taille dépend du format et de l’éditeur. Plusieurs Ko peuvent être utilisés
pour la définition du format et les informations concernant l’éditeur.
Nous pouvons alors écrire, après l’invite de commande " > > > ", des com-
mandes Python, c’est-à-dire évaluer des expressions ou exécuter des instructions
de manière interactive. Nous pouvons aussi écrire dans un fichier et l’enregistrer
avec l’extension .py, par le menu File puis Save As... pour choisir le dossier de
destination et entrer le nom du fichier.
Tester les instructions suivantes, en les exécutant les unes après les autres :
1+2
print(1+2)
x=1+2
print(x)
print(’x est égal à’,x)
1.5. EXERCICES CORRIGÉS 19
L’éditeur colore de lui-même certains mots, (mot réservé), qui sont des mots
clés, des noms de fonctions (ici la fonction print), des commentaires, . . . : c’est la
coloration syntaxique. Ainsi, si un mot réservé n’est pas écrit correctement, il est
facile de s’en rendre compte. Attention, le langage Python est sensible à la casse,
ceci signifie que les lettres capitales et les lettres minuscules sont des caractères
différents. Par exemple, la fonction print ne peut pas s’écrire "Print".
Les mots clés réservés sont : and, as, assert, break, class, continue, def, del,
elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None,
nonlocal, not, or, pass, raise, return, True, try, while, with, yield.
Question 2 : écrire, sans aucun chiffre dans la parenthèse suivant print, une
suite d’instructions qui affiche la phrase : x est égal à 37+74 c’est-à-dire 111.
Question 3 : tester les instructions suivantes, en les exécutant les unes après
les autres :
y=5
print(’y est égal à’,y)
y=2*y
print(’y est égal à’,y)
z=2**y
print(’z est égal à’,z)
print(y==z)
Observer les valeurs prises par les variables y et z à l’issue de ces instructions.
Les opérateurs sur les nombres sont +, −, *, / qui correspondent aux quatre
opérations habituelles, ** pour l’exponentiation, // et % pour le quotient et le reste
de la division euclidienne et >, >=, <, <=, ==, != pour les comparaisons. Atten-
tion, le symbole "=" n’a pas le sens mathématiques habituel. L’instruction z=z+2
signifie "affecter à z la valeur de z+2".
Question 5 : tester les priorités de ces opérateurs, par exemple 6/2*2 ou 6/2/2
ou 6/2**2. Ecrire une instruction permettant de calculer la quantité ax2 + bx + c