Vous êtes sur la page 1sur 174

Ministère de l’Enseignement Supérieur République de Côte d’Ivoire

et de la Recherche Scientifique Union – Discipline – Travail

Institut National Polytechnique


Félix Houphouët-Boigny

Support de cours
INFORMATIQUE
MPSI - PCSI - PTSI

Dr Kouamé Abel ASSIELOU


Kouame.assielou@inphb.ci / askab.line@gmail.com
PLAN DE L’EXPOSE

Chapitre 1 : ARCHITECTURE DES ORDINATEURS

 GÉNÉRALITÉS SUR L’ORDINATEUR

 SYSTÈME D’EXPLOITATION

 SYSTÈME DE NUMÉRATION
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Chapitre 1 :
ARCHITECTURE DES ORDINATEURS
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Définitions
 D’un point de vue générale, un ordinateur est un appareil électronique permettant le
traitement automatique des données. C’est un dispositif capable de traiter l'information par
l'exécution des opérations logiques et arithmétiques à partir des programmes fonctionnant
par lecture séquentielle d'un ensemble d'instructions

Von Neumann a énoncé les cinq critères essentiels qui définissent un ordinateur :
o Un ordinateur doit posséder un médium d’entrée par lequel des quantités virtuellement
illimitées d’instructions et de données peuvent être introduites.

o Un ordinateur doit posséder une unité d’emmagasinage de laquelle on peut obtenir les
instructions et les opérandes et dans laquelle on peut stocker des résultats, lorsque désiré.

4/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Définitions
o Un ordinateur doit posséder une unité de calcul capable d’effectuer des opérations
logiques ou arithmétiques sur n’importe quel opérande pris dans la mémoire.

o Un ordinateur doit posséder un médium de sortie, par lequel des quantités virtuellement
illimitées de données peuvent être transmises à l'extérieur de l'ordinateur.

o Un ordinateur doit posséder une unité de contrôle, capable d'interpréter les instructions
obtenues de la mémoire et capable de choisir parmi plusieurs actions en fonction de
résultats calculés.

 Actuellement, l'ordinateur permet d'exécuter plusieurs tâches : saisir, traiter et organiser


les informations, communiquer, jouer, etc. Un ordinateur est constitué de deux parties : la
partie matérielle ou hardware et la partie logicielle ou software.
5/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

L'ENIAC

6/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Modèle d’architecture de Von Neumann


La structure résultant de ces cinq critères est
appelée « structure de Von Neumann » :
 l’Unité Arithmétique et Logique (UAL ou
ALU en anglais) ou unité de traitement a pour
rôle d’effectuer les opérations de base
 l’unité de contrôle ou de commande (control
unit) est chargée du « séquençage » des
opérations
 la mémoire contient à la fois les données et
le programme qui indiquera à l’unité de
contrôle quels sont les calculs à faire sur ces
données
 les dispositifs d’entrée-sortie, qui permettent
de communiquer avec le monde extérieur.

7/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Principaux composants
 Le microprocesseur (ou unité centrale de traitement, UCT, en anglais Central Processing
Unit, CPU) est un composant essentiel qui exécute les instructions machine des
programmes informatiques.
Il est schématiquement constitué de 3 parties :
o l’Unité Arithmétique et Logique (ALU) est chargée de l’exécution
de tous les calculs que peut réaliser le microprocesseur :
o les registres permettent de mémoriser de l’information (donnée ou
instruction) au sein même du CPU, en très petite quantité ;
o l’unité de contrôle permet d’exécuter les instructions (les
programmes) elle joue le rôle de « chef d’orchestre » : récupération
des instructions et des données pour les envoyer à l’ALU.

La puissance d’un processeur est calculée en FLOPS (Floating Point Operation


Per Second / opération en virgule flottante par seconde). 8/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Principaux composants
 Mémoire morte (ROM, Read-Only Memory): est un type de mémoire permettant de
conserver les informations qui y sont contenues même lorsque la mémoire n’est plus
alimentée électriquement. Il s’agit de mémoire non volatile, donc non reprogrammable.
Cette mémoire ne peut être accédée qu’en lecture

9/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Principaux composants
 Mémoire vive (RAM, Random Access Memory): est la mémoire principale du système.
Elle est une mémoire volatile, utilisée par l’ordinateur pour le traitement des données,
lorsqu’il y a nécessité de garder momentanément en mémoire un résultat dont il aura à se
resservir plus tard. Elle est d’accès rapide, mais peu volumineuse.

10/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Principaux composants
 Mémoire-cache: permet au processeur de se « rappeler » les opérations déjà effectuées
auparavant. En effet, elle stocke les opérations effectuées par le processeur, pour qu’il ne
perde pas de temps à recalculer des choses qu’il a déjà faites précédemment. Sur les
ordinateurs récents ce type de mémoire est directement intégré dans le processeur

11/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Principaux composants
 Mémoires de masse : Ce sont des mémoires de grande capacité, destinées à conserver
de façon durable de grosses données (bases de données, gros programmes, informations
diverses). De par leur vocation, ce sont nécessairement des mémoires non volatiles (on ne
veut pas perdre les données lorsqu’on éteint l’ordinateur). Par le passé, il s’agissait de
bandes perforées, puis de cassettes, de disquettes etc

12/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Principaux composants
 Mémoires flash: (clé USB par exemple). Techniquement parlant, il s’agit de mémoire
morte (EEPROM : Electrically Erasable Programmable Read-Only Memory), mais qui peut
être flashée beaucoup plus facilement que les EPROM, par un processus purement
électrique

13/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Principaux composants
 Entrées/Sorties (E/S) : Il s'agit de toutes les interfaces permettant d'interagir avec
l'ordinateur
o Les périphériques d’entrée permettent à un utilisateur d’entrer à l’ordinateur des
données, sous des formats divers : clavier, souris, scanner, webcam, manettes de jeu.
o Les périphériques de sortie permettent de restituer des informations à l’utilisateur :
écran, imprimante, haut-parleurs.

Certains périphériques peuvent parfois jouer à la fois le rôle d’entrée et de sortie, comme les
écrans tactiles.

14/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Principaux composants
 Les Bus : Pour que les données circulent entre les différentes parties d’un ordinateur
(mémoire, CPU et les entrées/sorties), il existe des systèmes de communication appelés
bus. Un bus est un canal permettant de transférer des données entre deux éléments.
Les bus se répartissent en 2 types :
o Les bus parallèles constitués de plusieurs fils conducteurs, et permettant de transmettre
un ou plusieurs octets en une fois.
o Les bus séries, constitués d’un seul conducteur : l’information est transmise bit par bit.
Un ordinateur utilise des bus à 3 usage essentiellement :
o Le bus d’adresse permet de faire circuler des adresses par exemple l’adresse d’une
donnée à aller chercher en mémoire ;
o Le bus de données permet de faire circuler des données ;
o Le bus de contrôle permet de spécifier le type d’action. Exemples : écriture d’une donnée
en mémoire, lecture d’une donnée en mémoire
15/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Principaux composants
 Les Bus : Pour que les données circulent entre les différentes parties d’un ordinateur
(mémoire, CPU et les entrées/sorties), il existe des systèmes de communication appelés
bus. Un bus est un canal permettant de transférer des données entre deux éléments.

16/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Principaux composants
 L’élément constitutif principal de l’ordinateur est la carte-mère, c’est sur cette carte que
sont connectés ou soudés l’ensemble des éléments essentiels de l’ordinateur

17/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Autres connexions
 Connecteurs RJ45 pour la connexion à certains réseaux informatiques
 Connecteurs VGA (analogiques) et / ou DVI (numériques) pour la connexion d’un écran
 Connecteurs audio
 Connecteurs audio/video HDMI
 Connecteurs ATA pour disques durs et e-SATA pour les périphériques de stockage externe

18/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Système d’exploitation
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Logiciels
 Un ordinateur ne peut pas fonctionner seul; Il doit être doté d'un système d'exploitation,
Operating System OS. (Ex : windows, unix, mac os, linux, android...).
C’est le programme de base d'un ordinateur. Ce programme permet notamment :
 la gestion de la mémoire,
 la gestion des périphériques,
 l'exécution des programmes,
 la gestion des fichiers.
 Les programmes (ou logiciels) d'application s'exécutent généralement en s'appuyant sur le
système d'exploitation. Ces programmes peuvent être très divers :
 logiciels de bureautique (traitements de textes, tableurs, présentation graphique...),
 logiciels de calcul,
 systèmes de gestion de bases de données,
 environnements de programmation,
 logiciels de jeux, ... 20/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Système d’Exploitation: Rôle et composition


 Gestion du processeur : le SE est chargé de gérer l'allocation du processeur entre les différents
programmes grâce à un algorithme d'ordonnancement
 Gestion de la mémoire vive : le SE est chargé de gérer l'espace mémoire alloué à chaque
application et, le cas échéant, à chaque usager. En cas d'insuffisance de mémoire physique, le SE
peut créer une zone mémoire sur le disque dur, appelée «mémoire virtuelle» permettant de faire
fonctionner des applications nécessitant plus de mémoire qu'il n'y a de mémoire vive disponible sur
le système.
 Gestion des entrées/sorties : le SE permet d'unifier et de contrôler l'accès des programmes aux
ressources matérielles par l'intermédiaire des pilotes (appelés également gestionnaires de
périphériques ou gestionnaires d'entrée/sortie).
 Gestion de l'exécution des applications : le système d'exploitation est chargé de la bonne
exécution des applications en leur affectant les ressources nécessaires à leur bon fonctionnement.
Il permet à ce titre de «tuer» une application ne répondant plus correctement 21/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Système d’Exploitation: Rôle et composition


 Gestion des droits : le SE est chargé de la sécurité liée à l'exécution des programmes en
garantissant que les ressources ne sont utilisées que par les programmes et utilisateurs possédant
les droits adéquats.
 Gestion des fichiers : le système d'exploitation gère la lecture et l'écriture dans le système de
fichiers et les droits d'accès aux fichiers par les utilisateurs et les applications.
 Gestion des informations : le SE fournit un certain nombre d'indicateurs permettant de
diagnostiquer le bon fonctionnement de la machine.

Composition: Un système d'exploitation est typiquement composé :


 d'un noyau (kernel) ;
 d’un système de gestion de fichiers (File Management System)
 d’une interface utilisateur (un ensemble d'outils système (utilitaires – shell, graphique)
22/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Système d’Exploitation: Rôle et composition

23/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Système d’Exploitation: Noyau


Le Noyau ou Kernel : assure les fonctionnalités suivantes :
 Gestion des périphériques (au moyen de pilotes). Il est responsable de l’activation des
composants électroniques et de l'interaction avec les programmes qui les gèrent.
 gestion des files d'exécution (aussi nommée processus) :
o attribution de la mémoire à chaque processus ;
o ordonnancement des processus (répartition du temps d'exécution sur le ou les
processeurs).
o synchronisation et communication entre processus (services de synchronisation,
d'échange de messages, mise en commun de segments de mémoire, etc.)
 gestion des fichiers (au moyen de systèmes de fichiers) ;

 gestion des protocoles réseau (TCP/IP, IPX, etc.).


24/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Système d’Exploitation: Noyau

25/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Terminologie
 Un programme est une suite statique d'instructions.
 Un processeur est l'agent qui exécute les instructions d'un programme.
 Un processus est un programme en cours d'exécution. Un programme peut avoir plusieurs
exécutions simultanées. Pour faire tourner un processus il faut donc, non seulement chercher le
code et les données mais il faut aussi lui réserver un espace mémoire, le gérer les accès aux
ressources, la sécurité etc. C'est un des rôles de l'OS.
 Un système d'exploitation est dit multi-tâches quand il permet l'exécution simultanée de plusieurs
programmes. Tous les systèmes d'exploitation actuels sont multi-tâches
 Un système d'exploitation est dit multi-utilisateurs quand il est conçu pour être utilisé
simultanément par plusieurs usagers, souvent à travers un réseau informatique (notion de
serveurs).
26/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Terminologie
 Il est dit multi-processeurs quand il est conçu pour exploiter un ordinateur équipé de plusieurs
processeurs. Dans de tels systèmes d'exploitation, plusieurs programmes sont exécutés
simultanément par les différents processeurs
 Il est dit temps réel quand il garantit que les opérations seront effectuées en respectant des
délais stricts, et ce quelles que soient les conditions d'utilisation (charge du système). De tels
systèmes d'exploitation sont utilisés dans l'industrie, l'aéronautique ou l'électronique pour créer
des systèmes temps réel (souvent embarqué).

27/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Systèmes de fichiers
 Un système de fichiers (file system) définit l'organisation d'un disque (ou partition d'un disque).
 C'est une structure de données permettant de stocker les informations et de les organiser dans des
fichiers sur des mémoires de masse (dis. dur, disquette, CD-ROM, clé USB, disques SSD, etc.).
 Un système de fichiers offre à l'utilisateur une vue abstraite sur ses données (fichiers) et permet
de les localiser à partir d'un chemin d'accès.
 Le fichier est la plus petite entité logique de stockage sur un disque.
 Le formatage (action de formater) prépare un support de données de stockage en y inscrivant un
système de fichiers, de façon à ce qu'il soit reconnu par le système d'exploitation de l'ordinateur.
 Une partition est une partie d'un disque dur destinée à accueillir un système de fichiers
 Il existe de nombreux systèmes de fichiers différents : FAT, NTFS, HFS, ext2, ext3, UFS, etc.
28/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Systèmes de fichiers : notion de fichier


 Un fichier est une suite d'octets portant un nom et conservé dans une mémoire.
 Le contenu du fichier peut représenter n'importe quelle donnée binaire : un programme, une image,
un texte, etc.
 Les fichiers sont classés dans des groupes appelés répertoires, chaque répertoire peut contenir
d'autres répertoires, formant ainsi une organisation arborescente appelée système de fichiers.
 Les fichiers sont la plupart du temps conservés (stockés) sur des mémoires de masse
 Dans un système d'exploitation multi-utilisateurs, les programmes qui manipulent le système de
fichier effectuent des contrôles d'accès (notion de droits).

29/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Systèmes de fichiers : Arborescence


 Pour l'utilisateur, un système de fichiers est vu comme une arborescence : les fichiers sont
regroupés dans des répertoires (concept utilisé par la plupart des systèmes d’exploitation).

 Ces répertoires contiennent soit des fichiers, soit d'autres répertoires. Il y a donc un répertoire
racine et des sous-répertoires

 Une telle organisation génère une hiérarchie de répertoires et de fichiers organisés en arbre.

 Sous Unix/Linux, les utilisateurs voient une arborescence de fichiers unique (/). Cet arbre est en
fait l'unification de plusieurs systèmes de fichiers

 Dans un système Windows, les périphériques de stockage de données et les partitions sont
affichés comme des lecteurs indépendants (C:, D:, ...) en haut de leur propre arborescence (\).

30/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Système d’exploitation : Windows de Microsoft


Windows de Microsoft s’utilise sous 2 formes :
 interface graphique

31/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Système d’exploitation : Windows de Microsoft


Windows de Microsoft s’utilise sous 2 formes :
 Mode ligne de commande

32/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Système d’exploitation : Windows de Microsoft


Quelques commandes sur les fichiers
Travaux Pratiques
CMD Ouvre la fenêtre de commande DOS. (ex : cmd) DEL Effacer un fichier (ex : del c:\titi.txt )

EXIT Ferme la fenêtre MS-DOS. (ex : exit REN Renommer des fichiers (ex : ren toto.txt tata.txt)
CD Permet de se déplacer d'un répertoire à un autre. (ex : MOVE Déplace un fichier. (ex : move c:\titi.txt d:\)
cd répertoire ) MORE Visualiser le contenu d'un fichier texte (ex : more
toto.txt )
CD \ Permet d’accéder à la racine d'un lecteur. (ex :c:\>cd \ )
FORMAT Permet d'effacer le contenu d'un lecteur. (ex :
DIR Liste le contenu du répertoire courant. (ex : dir )
format U: )
MKDIR Création d'un dossier. (ex : mkdir toto )
CLS Efface l'écran actuel. (ex : cls
RMDIR Effacer un dossier. (ex : rmdir toto)
PRINT Imprime le fichier spécifié. (ex : print toto.txt )
COPY Copie des fichiers. (ex : copy toto.txt c:\toto.txt )
SHUTDOWN Arrête ou redémarre un ordinateur local ou
XCOPY Copie des fichiers et des répertoires.(ex : xcopy
distant.
toto.txt c:\toto.txt )
DISKPART Gère des disques, des partitions ou des
volumes. 33/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Système de numération
Représentation des nombres :
— Représentation des entiers positifs sur des mots de taille fixe.
— Représentation des entiers signés sur des mots de taille fixe.
— Entiers multi-précision de Python.
— Distinction entre nombres réels, décimaux et flottants.
— Représentation des flottants sur des mots de taille fixe. Notion de mantisse, d’exposant
— Précision des calculs en flottants.
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Représentation des données


 BIT : un bit (binary digit) est un élément binaire, c’est l’unité de mémoire en informatique
(physiquement constitué d'une unité électronique pouvant prendre deux états, par exemple un
condensateur, déchargé ou chargé). Sa valeur est donc 0 ou 1.

 En informatique toutes les données, quelles qu'elles soient, sont stockées sous la forme abstraite
d'une suite de zéros et de uns.
 Octet : Un octet (ou byte) est un ensemble de 8 bits. Traditionnellement, il s’agit de l'unité de
stockage : Les premiers ordinateurs personnels (transportables) étaient '8 bits', c'est à dire que les
processeur, bus, et mémoires avaient pour unité de stockage l'octet, soit 8 bits. Cependant, les
longueurs couramment utilisées sont des ensembles de :
o 16 bits (au milieu des années 1980, les premiers PC, Apple Macintosh, jeux graphiques,...)
o 32 bits (les années 1990, Internet, système d'exploitation avec interface graphique, multimédia,...)
o 64 bits (les années 2000, tout connecté, multitâche multimédia)
35/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Représentation des données


 Les unités de mesures fréquemment utilisées pour indiquer des tailles (ou capacités) de mémoires :
 Un kilo-octet (abréviation : Ko) correspond à 1024 octets, soit 210
o Un méga-octet (Mo) correspond a 1024 Ko, soit 210 Ko.
o Un giga-octet (Go) est un ensemble de 1024 Mo, soit 210 Mo.
o Un téra-octet (To) est un ensemble de 1024 Go, soit 210 Go.
o Un péta-octet (Po) est un ensemble de 1024 To, soit 210 To.
o Un exaoctet (Eo) est un ensemble de 1024 Po, soit 210 Po.
o Un zettaoctet (Zo) est un ensemble de 1024 Eo, soit 210 Eo.
o Un yottaoctet (Yo) est un ensemble de 1024 Zo, soit 210 Zo.
 Quantités de données courantes (valeurs non rigides) :
o cache (de 0,128 Mo en L1 à 12 Mo en L2) ;
o RAM (0,5 Go à 8 Go) ;
o CD-ROM (0,2 à 0.9 Go), DVD (4 à 8 Go) et Blu ray (25 à 100 Go).
o SSD (1 à 128 Go),
o HD (100 à 6000 Go).Un exaoctet (Eo) est un ensemble de 1024 Po, soit 210 Po.
36/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Langages : Généralités
 Les données et les instructions doivent être codées en binaire :
o Ce codage n'est pas réalisé par l'utilisateur, ni même en général par le programmeur.
o Il est réalisé automatiquement par des programmes utilitaires.
 Le langage machine est le seul langage directement compréhensible par l'ordinateur :
o Un programme écrit en langage machine est une succession de 0 et de 1 définissant des opérations
précises à effectuer.
o Ce langage n'est pas utilisé directement pour la programmation.
 Le premier langage utilisable pour programmer un ordinateur est l'assembleur :
o Le langage assembleur dépend du processeur de la machine.
o Ses instructions sont proches de celles du langage machine, mais leur forme est plus utilisable par un
programmeur.
Exemples d’instructions :
 STO (pour store : stocker, ranger en mémoire),
 LOAD (charge une valeur de la mémoire vers un régistre),
 JMP (pour jump : branchement en un point du programme),
 ADD ( fait la somme de deux registres, et la place dans un troisième). 37/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Langages : Généralités
L'assembleur ne permet de réaliser que des programmes relativement simples, qui dépendent de l'ordinateur
utilisé. Pour réaliser des programmes plus complexes et moins dépendants de la machine, il est nécessaire
d'utiliser un langage de programmation. On distingue les modèles suivants :
 selon le mode de programmation  selon le typage:
o La programmation impérative (Les langages o Les langages à typage statique:Pascal, C, C++
d’assemblage, Fortran, Algol, Pascal, C, Ada) o Les langages fortement typés : ADA, Simula, Modula3,
o La programmation fonctionnelle (Lisp, Scheme, Python, Java, C++, C#
CommonLisp,, Le_Lisp, ML, Objective Caml) o Les langages faiblement typés : VBScript, PhP, Perl, C
o La programmation logique o Les langages non typés : Lisp , Smalltalk, Shell

 selon le mode d’exécution:  selon le mode de calcul :


o Les langages interprétés : PhP, JavaScript, les o Les langages séquentiels
langages de scripts, Ruby o Les langages parallèles
o Les langages compilés : C, C++, Pascal
o Les langages semi-compilés : Smalltalk, C#, Java,
Self, Python
38/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Système
 Le système de numération utilisé habituellement est le système décimal.
Un ordinateur étant basé sur le système binaire, il est utile de connaitre les systèmes binaire (base 2),
hexadécimal (base 16) et octal (base 8), ainsi que les techniques de conversion entre ces différents systèmes.

 Système à base quelconque : Tout nombre décimal N peut se décomposer de la façon suivante

N  an b n  an 1b n 1  ...  a2b 2  a1b1  a0b 0  a1b 1  a2b 2  ...  a p b  p


Avec : 0  ai  b  1 , b est la base

 Cette décomposition est unique et notée généralement :


b
N  an an 1...a2 a1a0 , a1a2 ...a p ou N  an an 1 ...a2 a1a0 , a1a2 ...a p b

39/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Système
 Système décimal : Dans le cas du système décimal,
La base est b = 10
les symboles ou chiffres utilisables sont : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

 Ecriture d'un nombre décimal N quelconque :


N  an 10n  an 110n 1  ...  a2102  a1101  a0100  a1101  a2102  ...  a p 10 p
Avec : 0  ai  9
10
 On note : N  an an 1 ...a2 a1a0 , a1a2 ...a p ou N  an an 1 ...a2 a1a0 , a1a2 ...a p 10
ou simplement : N  an an 1 ...a2 a1a0 , a1a2 ...a p

 Exemple : 123, 45  1  102  2  101  3  100  4  10 1  5  10 2


40/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Système
 Système binaire : Dans le cas du système binaire,
La base est b = 2
les symboles ou chiffres utilisables sont : 0, 1
 Représentation d’un entier naturel N :
N  an 2n  an 1 2n 1  ...  a2 22  a1 21  a0 20  a1 21  a2 22  ...  a p 2 p
Avec : 0  ai  1

 
2
 On note : N  an an 1...a2 a1a0 , a1a2 ...a p ou N  an an 1 ...a2 a1a0 , a1a2 ...a p
2

 Exemple : 1010,1012  1  23  0  22  1  21  0  20  1  21  0  2 2  1  2 3

41/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Système
 Système octal :
La base est b = 8
les symboles ou chiffres utilisables sont : 0, 1, 2, 3, 4, 5, 6, 7
Représentation d’un entier naturel N :
N  an 8n  an 1 8n 1  ...  a2 82  a1 81  a0 80  a1 81  a2 82  ...  a p 8 p
8
On note : N  an an 1...a2 a1a0 , a1a2 ...a p ou N  an an 1 ...a2 a1a0 , a1a2 ...a p 8
 Système hexadécimal :
La base est b = 16
les symboles ou chiffres utilisables sont : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
Représentation d’un entier naturel N :
N  an 16n  an 116n 1  ...  a2162  a1161  a0160  a1161  a2162  ...  a p 16 p
16
On note : N  an an 1...a2 a1a0 , a1a2 ...a p 42/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Conversions entre bases


Il est recommandé de bien connaitre la correspondance des 16 premiers nombres dans les quatre bases
(Décimal, Binaire, Octal, Hexadécimal).

 Conversion base b – système décimal


On développe le nombre selon les puissances de la base b.

Exemple : 1010,1012  1  23  0  22  1  21  0  20  1  21  0  2 2  1  2 3


1010,1012  8  2  0,5  0,125
1010,1012  10,62510

43/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Conversions entre bases


 Conversion système décimal – base b
On applique le principe de la division euclidienne
n  b  q  r avec 0  r  b
o On fait des divisions euclidiennes des quotients successifs par b jusqu'à ce que l'un des quotients
devienne inferieur à b-1.
o La liste inversée des restes ainsi obtenus constitue la décomposition recherchée.

Décimal  hexadécimal: on a : 15710 = 9D16


Décimal  Octal : on a : 16710 = 2478

Décimal  Binaire : on a : 14510 = 100100012


44/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Conversions entre bases


 Exercice1
1) Ecrire en décimal le nombre binaire 110011.
2) Ecrire en binaire le nombre décimal 1964.
3) Convertir en décimal le nombre 7123 écrit en base 8.
4) Convertir en base 5 le nombre décimal 2048.
5) Convertir 4AB16 en base 10
6) Ecrire en base 8 le nombre binaire 110011.

Réponses
1) 1100112 = 5110.
2) 196410 = 111 1010 11002
3) 71238 = 366710
4) 204810 = 311435
5) 4AB16 = 119510
6) 1100112 = 638
45/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Conversions entre bases


 Conversion Octal <--> Binaire
o Chaque chiffre du nombre en base octale peut être converti en un nombre binaire de trois
chiffres car nous sommes en base 8 (8 = 23, d'où la nécessité de 3 bits). Si le chiffre
comporte moins de 3 bits, on complète par des zéros à gauche.

o Pour la conversion d’un nombre binaire en base octal, il suffit de regrouper les bits par 3 (Si
le nombre de bits du nombre binaire n’est pas un multiple de 3, on complète par des zéros à
gauche.

Exemple
011 000 1112 --> 3078
728 --> 111 0102
(le zéro en 4eme position a été ajouté car 2 en binaire ne comporte que 2 chiffres).
46/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Conversions entre bases


 Conversion Hexadécimal <--> Binaire
o Hexadécimal binaire: chaque chiffre du nombre en base hexadécimale peut être
représenté par un nombre de 4 chiffres en binaire. On complète à gauche par des zéros si
nécessaire.

o Binaire Hexadécimal: On regroupe les bits par 4, car nous sommes en base 16 (et 16 =
24 , d'où la nécessité de 4 bits).

Exemple
B5E16 --> 1011 0101 11102
1100 01112 --> C716

47/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Conversions entre bases


 Conversion Octal <--> Hexadécimal
o il est plus simple est de passer par la base binaire, puis de reconvertir dans la base désirée,

o On peut aussi passer par la base décimale puis d'utiliser la division euclidienne.

Exemple
3078 --> 011 000 1112 = 1100 01112 --> C716
Ainsi, on convertit chaque chiffre octal en un nombre binaire de 3 bits (conversion octal <--> binaire),
puis on regroupe les bits (chiffres binaires) par 4, pour passer en hexa (conversion binaire <--> hexa).

48/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Codage des entiers relatifs


Toute information doit être codée en binaire pour être exploitable par un ordinateur. C'est le cas pour les
nombres et les caractères, mais aussi pour les sons, les images et les vidéos qui doivent être numérisés.
 Nombres entiers
o Le codage dépend du type : entier naturel, entier relatif, réel, ...

o Par exemple, si le nombre possède un signe, il est nécessaire de représenter ce signe.


Un moyen simple pour cela est d'utiliser le premier bit (par exemple 0 pour + et 1 pour -)
et de représenter le nombre en binaire ensuite.

o Le nombre maximum représentable dépend du nombre de bits utilisables.

49/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Codage des entiers relatifs


 Nombres entiers
Exemples :
• Sur 1 octet (8 bits), on peut représenter tous les entiers de : 000000002 = 0 à 111111112 = 28 − 1 = 255
pour les nombres non signés et de 111111112= -128 à 011111112= 27 -1= 127 pour les nombres signés

• Sur 2 octets, soit 16 bits, on peut représenter tous les entiers de : 00000000000000002 = 0 à
11111111111111112 = 216 − 1 = 65535 pour les nombres non signés. et de 11111111111111112=-32768 à
0111111111111111= 215 -1= 32767 pour les nombres signés.

• Sur 4 octets, soit 32 bits, on peut représenter tous les entiers de : 0 à 232 − 1 = 4 294 967 295 pour les
nombres non signés. et de -231 = -2147483648 à 231 -1= 2147483648 pour les nombres signés.

• Sur 8 octets, soit 64 bits, on peut représenter tous les entiers de : 0 à 264 − 1 = 18 446 744 073 709
551 615. et de -263 = -9 223 372 036 854 775 808 à 263 -1= 9 223 372 036 854 775 807 pour les nombres
signés
50/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Codage des entiers relatifs


Un entier relatif est un entier pouvant être négatif. Il faut donc coder le nombre de telle façon que l'on
puisse savoir s'il s'agit d'un nombre positif ou d'un nombre négatif, et il faut de plus que les règles
d'addition soient conservées. L'astuce consiste à utiliser un codage que l'on appelle complément à deux.

 Codage en complément à deux des nombres entiers positifs ou nuls


On représente le nombre en base 2 et on range les bits dans les cases mémoires comme pour les
entiers naturels.
• Cependant, la case contenant le bit de poids fort est toujours à 0 : on utilise donc n-1 bits.
• Le plus grand entier positif représentable sur n bits en relatif est donc 2n-1 -1 (car le bit le plus à gauche
est fixé à zéro).

51/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Codage des entiers relatifs


 Codage en complément à deux des nombres entiers négatifs
Pour obtenir le codage sur n bits d’un nombre x négatif,
• on code en binaire sa valeur absolue sur n bits, +
• puis on complémente (ou inverse) tous les bits
• et on ajoute 1 (attention aux retenues lors de l’addition binaire).
NB : Complémenter signifie que l’on transforme les 0 en 1 et vice et versa.
L'addition en base 2 fonctionne comme l'addition que vous connaissez,
sauf que ( 1 + 1 = 10, en fait 0 avec une retenue de 1).

Exemples : convertir -84 de la base décimale vers la base binaire signée sur 8 bits
• Conversion : 8410 = 010101002
• Inversion : 01010100 => 10101011
• Ajout de 1 : 10101011 + 1 = 10101100
En conclusion, -8410 = 101011002 (Le bit de poids fort est 1, on a donc bien un nombre négatif.)
52/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Codage des entiers relatifs


 Codage en complément à deux des nombres entiers négatifs
• Le bit de poids fort d’un nombre négatif est toujours 1 ;

• Sur n bits, le plus grand entier positif est 2n-1 -1 = 0111……..1 ;

n-1 fois 1
• Sur n bits, le plus petit entier négatif est - 2n-1

Application : convertir -72 en binaire sur 8 bits


• Conversion : 7210 = 010010002
• Inversion : 01001000 => 10110111
• Ajout de 1 : 10101011 + 1 = 10101100
En conclusion, -7210 = 101110002
53/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Codage des caractères


Les caractères doivent eux-aussi être représentés par des codes binaires. Ces caractères sont non seulement les
lettres (majuscules et minuscules), mais aussi les chiffres, les caractères de ponctuation, l'espace, les caractères
spéciaux ... Un des codes possibles est le code ASCII (American Standard Code for Information Interchange).
• Le code ASCII permet de définir 128 codes
numériques, donc 128 caractères
• Les 32 premiers codes, de 0 à 31, ne sont pas
des caractères imprimables mais des caractères "de
contrôle". Par exemple le code 13 représente un
retour à la ligne, et le code 7 fait produire un bip à
certains ordinateurs.
• À partir du code 32, suivent des signes de
ponctuation et quelques symboles mathématiques
comme ! ou + ou /, puis les chiffres arabes de 0 à 9,
ainsi que les 26 lettres de l'alphabet latin, en capitales
puis en minuscules
54/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Codage des caractères


Exemple d’applications de conversion de code ASCII en hexadécimal, en décimal ou en binaire sous Windows

55/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Représentation des nombres réels


 Un nombre réel ou nombre à virgule flottante possèdent :
• un signe s  1; 1
• Une mantisse m
• Et un exposant e
Exemples : le nombre 1101,0112  1,101011  232
• Le signe est s  1
• La mantisse est le nombre situé après la virgule, soit m = 101011
• Et un exposant e = 3
 Un tel triplet représente un réel s  m  b où b est la base de représentation. En faisant varier e, on fait
e

« flotter » la virgule décimale. Généralement, m est d’une taille fixée.

56/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Représentation des nombres réels


 La norme IEEE définit la façon de coder un nombre réel. Cette norme se propose de coder les nombres
( nombres en simple précision ) sur 32 bits et définit trois composantes :
• le signe est représenté par un seul bit, le bit de poids fort (celui le plus à gauche)

• l'exposant est codé sur les 8 bits consécutifs au signe


 Dans cette norme, les exposants 000000002 et 111111112 sont interdits. En effet, mettre l’exposant
000000002 signifie que le nombre est dénormalisé ; l’exposant 111111112 indique que l’on n’a pas
affaire à un nombre (on note cette configuration NaN (Not a Number) permettant de signaler des
erreurs de calculs, telle qu’une division par 0).
 Le plus petit exposant est donc -126, et le plus grand +127

• la mantisse (les bits situés après la virgule) sur les 23 bits restants

Ce codage se fait sous la forme suivante : s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm


57/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Représentation des nombres réels


 La norme IEEE 754

C’est un format standardisé avec les précisions suivantes:

Format simple précision : 32 bits


• bit du signe ( 1 bit)
• Exposant (8 bits)
• Mantisse (23 bits)

Format double précision : 64 bits


• Bit du signe (1 bit)
• Exposant (11 bits)
• Mantisse (52 bits)

58/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Représentation des nombres réels


 La norme IEEE 754

59/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

Représentation des nombres réels


 La norme IEEE 754
Exemple : Convertir le nombre décimal 8,625 en virgule flottante suivant la norme IEEE 754
• Conversion de 8,625 en binaire : 8,62510 = 1000,1012 car
- Partie entière : 810 =10002
- Partie décimale = 0,62510 = 0,1012
• Normalisation : 1000,101 = 1000,101 x 20 = 0,1000101 x 24
• Normalisation IEEE 754 : 1000,101 = 1,000101 x 23
(de la forme 1,xxx où xxx = pseudo mantisse)
• Décomposition du nombre en ses divers éléments :
• - Bit de signe : 0 (Nombre >0)
• - Exposant sur 8 bits biaisé à 127 => 3 + 127 = 130 = 100000102
• - Pseudo mantisse sur 23 bits : 000 1010 00000000 00000000

60/172
Généralités sur l’ordinateur
ARCHITECTURE DES ORDINATEURS Système d'exploitation
Système de numération

TRAVAUX DIRIGES
PLAN DE L’EXPOSE

Chapitre 2 : ALGORITHMIQUE ÉLÉMENTAIRE

 LANGAGE de DESCRIPTION des ALGORITHMES

 VALIDITÉ D’UN ALGORITHME

 APPLICATIONS
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Objectif du chapitre
Dans ce deuxième chapitre,

 Nous introduisons les concepts élémentaires de l’algorithmique.

 Nous abordons tout d’abord les structures élémentaires à partir desquelles sont
construits tous les algorithmes écrits dans un langage impératif.

 Nous étudions ensuite des méthodes d’étude de ces algorithmes, notamment l’étude de
la terminaison (le fait que l’algorithme s’arrête, autrement dit qu’il finisse par renvoyer un
résultat) et de la correction (le fait que le résultat renvoyé est bien le résultat attendu).

 Nous étudions enfin un petit nombre d’algorithmes élémentaires qui interviennent


couramment dans les programmes.
63/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Langage de Description
des Algorithmes (LDA)
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Définition
 Le mot Algorithme vient du nom du mathématicien arabe Al Khwarizmi, auteur au IX-e
siècle d’un ouvrage faisant la synthèse de la résolution des équations du second degré,
suivant le signe des coefficients (afin d’éviter l’usage du signe moins). L’ouvrage en
question, proposant des méthodes de résolution par manipulations algébriques (réduction
à des formes connues) a donné sont nom à l’algèbre. Les méthodes exposées peuvent
s’apparenter à des algorithmes : on y expose, par disjonction de cas (structure
conditionnelle) des façons systématiques de résoudre un certain problème, ne laissant
ainsi rien au hasard. Il s’agit bien d’un algorithme de résolution.

 Un ALGORITHME est une suite finie d’instructions élémentaires (règles), qui s’appliquent
dans un ordre déterminé à un nombre fini de données pour fournir un résultat.

65/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Définition
 La notion d’algorithme est liée mathématiquement à la possibilité de résolution
systématique d’un problème, donc à la notion de méthode de calcul. On trouve dans le
domaine purement mathématique de nombreux algorithmes :
o tous les algorithmes de calcul des opérations élémentaires (addition posée, multiplication posée...);
o l’algorithme de la division euclidenne par différences successives;
o l’algorithme d’Euclide du calcul du pgcd;
o l’algorithme de résolution des équations de degré 2;
o l’algorithme du pivot de Gauss pour résoudre les systèmes d’équations linéaires, et répondre à
d’autres questions d’algèbre linéaire;
o l’algorithme de Hörner pour l’évaluation d’un polynôme;
o etc.
66/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Le langage
 L’étude algorithmique formelle nécessite de se dégager de toute contrainte idiomatique
relevant des spécificités de tel ou tel langage. Pour cela, nous utiliserons un pseudo-code,
indépendant de toute implémentation. Les traductions ultérieures dans un langage de
programmation spécifique se font alors sans difficulté.

 Nous décrirons systématiquement un algorithme en


1. lui donnant un nom;
2. définissant les données initiales (variables d’entrée, préciser leur type)
3. définissant la sortie (variables de résultat, préciser leur type)
4. donnant le bloc d’instructions définissant l’algorithme.

67/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Le langage
 Les variables
Une variable peut être vue comme une zone dans la mémoire (vive) de l’ordinateur qui est utilisée pour
conserver les données qui seront manipulées par l’ordinateur. Une variable est caractérisée par quatre
informations :
o son rôle : il indique à quoi va servir la variable dans le programme
o un nom, on parle d’identifiant. Il est composé uniquement de lettres minuscules, majuscules, de chiffres
et du caractère souligné, il permet d’identifier la variable.
o une valeur : La variable contient une information qui peut varier au cours de l’exécution d’un programme.
C’est cette information que l’on appelle valeur de la variable. La valeur d’une variable doit correspondre
au type de la variable.
o un type : une variable est utilisée pour représenter des données qui sont manipulées par le programme.
Un type est utilisé pour caractériser l’ensemble des valeurs qu’une variable peut prendre
prix_unitaire: Réel -- prix unitaire d’un article (en FCFA)
quantité: Entier -- quantité d’articles commandés
nom : Chaîne -- nom de l’article
68/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Le langage
 Les constantes
Certaines informations manipulées par un programme ne changent jamais. C’est par exemple la cas de la
valeur de π, du nombre maximum d’étudiants dans une promotion, etc. Ces données ne sont donc pas
variables mais constantes. Plutôt que de mettre explicitement leur valeur dans le texte du programme
(constantes littérales), il est préférable de leur donner un nom symbolique (et significatif). On parle alors de
constantes (symboliques).

Exemples :

PI = 3.1415 -- Valeur de PI
MAJORITÉ = 18 -- Âge correspondant à la majorité
TVA = 19.6 -- Taux de TVA en vigueur au 15/09/2000 (en %)
CAPACITÉ = 120 -- Nombre maximum d’étudiants dans une promotion
INTITULÉ = "Algorithmique et programmation" -- par exemple
69/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Le langage
 Les Instructions d’entrée/sorties
o Lire(var) : lire sur le périphérique d’entrée une valeur et la ranger dans la variable var.
Autre formulation : affecter la variable var avec une valeur lue au clavier.

Règle : Le paramètre « var » est nécessairement une variable. En effet, la valeur lue sur le
périphérique d’entrée doit être rangée dans « var ».

Évaluation : L’évaluation se fait en deux temps :


– récupérer l’information sur le périphérique d’entrée (elle est convertie dans le type de la
variable var) ;
– ranger cette information dans la variable var

70/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Le langage
 Les Instructions d’entrée/sorties
o Écrire(expr) : transférer, afficher, imprimer... la valeur de l’expression expr vers le périphérique de sortie.
Règle : « expr » est une expression quelconque d’un type fondamental.
Évaluation : L’évaluation se fait en deux temps :
– évaluer l’expression (c’est-à-dire calculer sa valeur) ;
– afficher (ajouter) sur le périphérique de sortie la valeur de l’expression
Variantes : Nous utiliserons une variante EcrireLn(expr) qui ajoute un saut de ligne sur le
périphérique de sortie après avoir affiché la valeur de l’expression.
Remarque : Lire et Écrire sont deux « instructions » qui peuvent prendre en paramètre n’importe
quel type fondamental. Si la variable est entière, Lire lit un entier, si c’est une chaîne de caractères, alors
c’est une chaîne de caractères qui est saisie. On dit que Lire et Écrire sont polymorphes
71/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Le langage
 Les Types fondamentaux
Un type caractérise les valeurs que peut prendre une variable. Il définit également les opérations,
généralement appelées opérateurs, qui pourront être appliquées sur les données de ce type.
On appelle types fondamentaux les types qui sont définis dans notre langage algorithme par opposition
aux types structurés (tableaux, enregistrements et types énumérés) qui doivent être définis par le
programmeur.

Les types ont deux intérêts principaux :


o Permettre de vérifier automatiquement (par le compilateur) la cohérence de certaines opérations. Par
exemple, une valeur définie comme entière ne pourra par recevoir une valeur chaîne de caractères.
o Connaître la place nécessaire pour stocker la valeur de la variable. Ceci est géré par le compilateur
du langage de programmation considéré et est en général transparent pour le programmeur.

72/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Le langage
 Les Types fondamentaux
o Les entiers.
Le type Entier caractérise les entiers relatifs.

Exemples de représentants des entiers :


10
0
-10

Les opérations sont : +, -, *, Div (division entière), Mod (reste de la division entière) et Abs
(valeur absolue). - et + peuvent être unaires ou binaires.
Exemples
10 Mod 3 -- 1 (le reste de la division entière de 10 par 3)
10 Div 3 -- 3 (le quotient de la division entière de 10 par 3)
1 Div 2 -- 0 (le quotient de la division entière de 1 par 2)
Abs(-5) -- 5 (l’entier est mis entre parenthèses)
73/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Le langage
 Les Types fondamentaux
o Les réels.
Le type Réel caractérise les réels

Exemple de représentants des réels :


10.0
0.0
-10e-4

Les opérations sont : +, -, *, /, Abs (valeur absolue), Trunc (partie entière). - et + peuvent être unaires ou binaires

74/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Le langage
 Les Types fondamentaux
o Les booléens.
Le type Booléen caractérise les valeurs booléennes qui ne correspondent qu’à deux valeurs VRAI ou FAUX.

Les opérations sont Et, Ou et Non qui sont définies par la table de vérité suivante :

A B A Et B A Ou B Non A
VRAI VRAI VRAI VRAI FAUX
VRAI FAUX FAUX VRAI FAUX
FAUX VRAI FAUX VRAI VRAI
FAUX FAUX FAUX FAUX VRAI

75/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Le langage
 Les Types fondamentaux
o Les caractères. o Les chaînes de caractères.
Le type Caractère caractérise les caractères : Le type Chaîne caractérise les chaînes de
Exemple de représentants des caractères : caractères:
’a’ -- le caractère a Exemple de représentants des caractères :
’\’’ -- le caractère ’ "Une chaîne de caractères" -- un exemple de
’\\’ -- le caractère \ Chaîne
’\n’ -- retour à la ligne "Une chaîne avec guillement (\")" -- un exemple
’\t’ -- Caractère tabulation de Chaîne
Les opérations sont :
Ord : Permet de convertir un caractère en entier.
Chr : Permet de convertir un entier en caractère

76/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Le langage
 Les Affectations
o Définition : L’affectation permet de modifier la valeur associée à une variable.
var ← expr

Règle : Le type de expr doit être compatible avec le type de var,

Évaluation : L’évaluation de l’affectation se fait en deux temps :


- calculer la valeur de l’expression expr ;
- ranger cette valeur dans la variable var.
Exemple : Voici quelques exemples d’affectation :
rayon ← 10
diamètre ← 2 * rayon
périmètre ← PI * diamètre
77/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Le langage
 structure générale d'un algorithme

La dernière ligne, permet de définir le ou les résultats.

78/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Le langage
 structure générale d'un algorithme
Exemple : Écrire un programme qui affiche le cube d’un nombre réel saisi au clavier

79/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Les structures élémentaires


Un algorithme repose sur certains types d’instructions élémentaires.

Une instruction est une phrase du langage de programmation indiquant à l’ordinateur une ou
plusieurs actions à effectuer, induisant un changement d’état de l’ordinateur (c’est-à-dire une
modification de la mémoire).

Les différentes structures élémentaires à partir desquelles sont construits les algorithmes en
programmation impérative sont, en plus de l’évalutation d’expression, de l’utilisation de
fonctions antérieures, et de l’affectation (notée x ← valeur) :
o La séquence;
o La structure conditionnelle simple;
o Les boucles.
80/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Les structures élémentaires


 La séquence
o Il s’agit d’un regroupement d’instructions élémentaires, qui seront exécutées
successivement. Il s’agit de la notion de bloc en informatique, délimité suivant les langages par
des balises de début et fin (begin, end).

o L’intérêt de la séquence est de pouvoir considérer plusieurs instructions comme une seule,
et de pouvoir inclure cette succession dans des structures plus complexes (structures
conditionnelles, répétitives...);

o La plupart du temps, un bloc permettra de délimiter la portée d’une structure composée.


Dans ce cas, le mot bloc sera remplacé par le mot clé de la structure correspondante, par
exemple début pour et fin pour
81/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Les structures élémentaires


 La séquence
Nous écrirons un bloc de la façon suivante :

82/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Les structures élémentaires


 La structure conditionnelle simple
o C’est la structure permettant d’effectuer des disjonctions de cas. Elle permet de distinguer
plusieurs cas si ces différents cas nécessitent des modes opératoires différents. Cela permet
également de traiter les cas particuliers.

o La structure basique est un branchement à deux issues :


« si condition alors instructions sinon instructions »
• La condition peut être n’importe quel booléen, par exemple le résultat d’un test, ou le contenu
d’une variable de type booléen.
• De plus, la clause alternative (else) est le plus souvent facultative

83/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Les structures élémentaires


 La structure conditionnelle simple

84/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Les structures élémentaires


 La structure conditionnelle simple

85/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Les structures élémentaires


 La structure conditionnelle simple
Certains langages autorisent le branchement multiple, soit via une autre instruction (par
exemple case of en Pascal), soit comme surcouche de l’instruction basique (algorithme 5).

86/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Les structures élémentaires


 La structure conditionnelle simple

87/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Les structures élémentaires


 Les boucles
Une boucle est une succession d’instructions, répétée un certain nombre de fois. Le nombre
de passages dans la boucle peut être déterminé à l’avance, ou peut dépendre d’une condition
vérifiée en cours d’exécution.

Cela permet de distinguer plusieurs types de boucles :

o Boucles conditionnelles, avec condition de continuation.


o Boucles conditionnelles, avec condition d’arrêt
o Boucles inconditionnelles

88/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Les structures élémentaires


 Les boucles
• Boucles conditionnelles, avec condition de continuation.
On passe dans la boucle tant qu’une certaine condition est réalisée. Le test de la condition est
réalisé avant le passage dans la boucle. On utilise pour cela une boucle while ou tant que en
français. Voici un exemple :

ε ε

89/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Les structures élémentaires


 Les boucles
• Boucles conditionnelles, avec condition de continuation.
Ici, on calcule les termes d’une suite définie par la récurrence un+1 = sin(un). On peut montrer
facilement que cette suite tend vers 0. On répète l’itération de la suite (donc le calcul des termes
successifs) tant que les valeurs restent supérieures à ε.

une boucle while s’utilise le plus souvent lorsqu’on ne connaît pas à l’avance le nombre de
passages dans la boucle. Souvent d’ailleurs, c’est le nombre de passages dans la boucle qui
nous intéresse (afin d’estimer la vitesse de convergence de la suite : algorithme 8). Dans ce
cas, il faut rajouter un compteur de passages i dans la boucle, c’est-à-dire une variable qui
s’incrémente à chaque passage dans la boucle : La valeur finale de i nous dit maintenant
jusqu’à quel rang de la suite il faut aller pour obtenir la première valeur inférieure à ε

90/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Les structures élémentaires


 Les boucles
• Boucles conditionnelles, avec condition de continuation.
≤ ε
ε ε

91/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Les structures élémentaires


 Les boucles
• Boucles conditionnelles, avec condition d’arrêt
Il s’agit essentiellement de la même chose, mais exprimé de façon légèrement différente. Ici, on
répète la série d’instructions jusqu’à la réalisation d’une certaine condition.

Il s’agit de la boucle repeat... until..., ou repéter... jusqu’à ce que..., en français.

92/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Les structures élémentaires


 Les boucles
• Boucles conditionnelles, avec condition d’arrêt
L’algorithme 8 peut se réécrire de la façon suivante, de façon quasi-équivalente :

ε ε
≤ ε

≤ ε

93/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Les structures élémentaires


 Les boucles
• Boucles conditionnelles, avec condition d’arrêt
La différence est que, contrairement à une boucle while, on passe nécessairement au moins une fois dans la
boucle. À part ce détail, on a équivalence entre les deux structures, en remplaçant la condition de continuation par
une condition d’arrêt (par négation). Ainsi, une boucle repeat instructions until condition est équivalente à :

Remarquez ici le passage forcé une première fois dans la succession d’instructions (bloc isolé avant la structure).
94/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Les structures élémentaires


 Les boucles
• Boucles conditionnelles, avec condition d’arrêt
On peut éviter la répétition de la succession d’instructions en forçant le premier passage à
l’aide d’une variable booléenne :

Cela a cependant l’inconvénient d’augmenter le nombre d’affectations.


95/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Les structures élémentaires


 Les boucles
• Boucles conditionnelles, avec condition d’arrêt
Réciproquement, une boucle while condition do instructions est équivalente à la structure
de l’Algorithme 12.

96/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Les structures élémentaires


 Les boucles
• Boucles inconditionnelles
Il s’agit de boucles dont l’arrêt ne va pas dépendre d’une condition d’arrêt testée à chaque itération. Dans cette structure,
on connaît par avance le nombre de passages dans la boucle. Ainsi, on compte le nombre de passages, et on s’arrête
au bout du nombre souhaité de passages. Le compteur est donné par une variable incrémentée automatiquement :

97/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Travaux Dirigés

98/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Procédures, fonctions et récursivité


 Intérêts
Un algorithme peut faire appel à des sous-algorithmes, ou procédures, qui sont des morceaux isolés de programme.
L’intérêt est multiple :
o Éviter d’avoir à écrire plusieurs fois la même séquence d’instructions, si elle est utilisée à différents endroits d’un
algorithme. On peut même utiliser une même procédure dans différents algorithmes principaux.
o Une procédure peut dépendre de paramètres. Cela permet d’adapter une séquence donnée à des situations
similaires sans être totalement semblables, les différences entre les situations étant traduites par des valeurs
différentes de certains paramètres.
o Écrire des procédures permet de sortir la partie purement technique de l’algorithme principal, de sorte à dégager
la structure algorithmique de ce dernier de tout encombrement. Cela augmente la lisibilité de l’algorithme.
o Une procédure peut s’appeler elle-même avec des valeurs différentes des paramètres (récursivité). Cela permet
de traduire au plus près certaines définitions mathématiques par récurrence. Cela a un côté pratique, mais assez
dangereux du point de vue de la complexité si on n’est pas conscient précisément de ce qu’implique ce qu’on écrit.
99/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Procédures, fonctions et récursivité


 Intérêts
o Une fonction est similaire à une procédure, mais renvoie en plus une valeur de sortie.

o En général, il est conseillé de faire en sorte que la seule action d’une fonction soit ce retour d’une
valeur.

o En particulier, on ne fait aucune interface avec l’utilisateur : pas d’affichage, ni de lecture de valeur
(les valeurs à utiliser pour la fonction étant alors passées en paramètres).

100/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Procédures, fonctions et récursivité


 Exemple de Fonctions
La fonction 1 est une fonction simple déterminant le nombre de lettres a dans une chaîne de caractères

101/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Procédures, fonctions et récursivité


 Exemple de Fonctions
La fonction 2 est une fonction récursive pour le calcul la suite définie par une récurrence simple, en
l’occurrence un+1 = sin(un), initialisée par 1.

102/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Procédures, fonctions et récursivité


 Exemple de Fonctions
La fonction 3 est une (très mauvaise) façon de calculer le n-ième terme de la suite de Fibonacci (suite définie par
𝐹0 = 𝐹1 = 1 et, pour tout 𝑛 ⩾ 2, 𝐹𝑛 = 𝐹𝑛−1 + 𝐹𝑛−2 ) récursivité.

103/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Procédures, fonctions et récursivité


 Applications
Exercice 1 :
Ecrire une fonction qui renvoie la somme de cinq nombres fournis en argument.
Exercice 2 :
Ecrire une fonction qui renvoie la partie entière d’un nombre réel.
Exemple : E(2) = 2 ; E(-4) = - 4 ; E(6,2) = 6 ; E(-10,2) = - 11
Exercice 3 :
1) Ecire une fonction Moyenne qui renvoie la moyenne de deux notes.
2) Écrire un algorithme qui contient la déclaration de la fonction moyenne et des instructions qui
appellent cette fonction.
Exercice 4 :
Ecrire un algorithme qui contient la déclaration de fonction f(x) = 3x3 + 4x + 8 et affiche le
résultat de cette fonction pour x = 1, x = 2 et x = 2,7.
104/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Procédures, fonctions et récursivité


 Applications
Réponse Exercice 1 :

105/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Procédures, fonctions et récursivité


 Applications
Réponse Exercice 2 :
Soit x un nombre réel.
• Si x >= 0 alors E(x) = x div 1 (la partie
entière de x est égal à la division entière
de x par 1).

• Si x <= 0, il y a deux cas : si x est


différent de (x div 1) dans ce cas
E(x) = (x div 1) -1 sinon E(x) = x div 1.

106/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Procédures, fonctions et récursivité


 Applications
Réponse Exercice 3 :

107/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Validité d’un algorithme


 Principe
Deux questions peuvent se poser pour juger de la validité d’un algorithme :

o L’algorithme s’arrête-t-il ? (problème de terminaison)

o L’algorithme renvoie-t-il le résultat attendu ? (problème de correction).

108/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Validité d’un algorithme


 Terminaison d’un algorithme
Dans un algorithme non récursif correctement structuré, et sans erreur de programmation(par
exemple la modification manuelle d’un compteur de boucle for), les seules structures pouvant
amener une non terminaison d’un algorithme sont les boucles while et repeat.

La terminaison assure un arrêt théorique de l’algorithme. En pratique, un deuxième paramètre entre


en jeu : le temps de réponse. Ce temps de réponse, sans être infini, peut être très grand (certains
algorithmes exponentiels peuvent avoir un temps de réponse de l’ordre de milliards d’années pour
des données raisonnablement grandes : c’est le cas par exemple du calcul récursif de la suite de
Fibonacci donné ci-dessus, pour des valeurs de n restant raisonnables).

109/172
Langage de Description des Algorithmes
ALGORITHMIQUE ÉLÉMENTAIRE Validité d’un algorithme
Applications

Validité d’un algorithme


 Correction d’un algorithme
La terminaison d’un algorithme n’assure pas que le résultat obtenu soit bien le résultat attendu,
c’est-à-dire que l’algorithme répond bien à la question posée initialement. On parle de l’étude de la
correction de l’algorithme.

110/172
PLAN DE L’EXPOSE

Chapitre 3 : LES BASES DE LA PROGRAMMATION EN


PYTHON
 VARIABLES, TYPES, OBJETS ET MÉTHODES

 STRUCTURATION D’UN PROGRAMME

 MODULES COMPLÉMENTAIRES

111/172
PROGRAMMATION EN PYTHON

Généralités
 Python dans le paysage informatique
o Python est un langage hybride, adapté à la programmation impérative, tout en utilisant certaines
facilités de la programmation objet, au travers de méthodes, applicables à des objets d’un certain
type (on parle de classe). Il existe la possibilité de créer de nouvelles classes d’objets, et d’y définir
des méthodes.

o Python est un langage de haut niveau. Il gère tout le côté matériel sans que le programmeur ait à
s’en préoccuper. La seule tâche du programmeur est l’aspect purement algorithmique. Le haut
niveau se traduit aussi par la possibilité d’utiliser des méthodes élaborées sur les objets (recherche
d’éléments dans une liste, tri, etc), et d’importer des modules complémentaires spécialisés suivant
les besoins, dans lesquels sont définis des fonctions complexes (calcul matriciel, résolutions
d’équations différentielles, résolutions de systèmes linéaires, méthode de Newton...).

112/172
PROGRAMMATION EN PYTHON

Généralités
 Python dans le paysage informatique
o Python est un langage semi-compilé. Il ne nécessite pas une compilation spécifique avant lancement.
Il est compilé sur le tas, à l’exécution, de sorte à repérer certaines erreurs de syntaxe avant le lancement
même du programme, mais il ne ressort pas de fichier compilé utilisable directement. L’avantage est une
certaine souplesse liée à la possibilité d’utiliser Python en ligne de commande (n’exécuter qu’une seule
instruction dans un shell) : on peut ainsi tester certaines fonctions avant de les utiliser dans un
programme, ce qui est parfois assez pratique.

o Contrairement à beaucoup de langages, Python est un langage dans lequel la présentation est un
élément de syntaxe : les délimitations des blocs d’instruction se font par indentation (en pratique de 4
caractères), contrairement à de nombreux autres langages qui utilisent des débuts et fins de blocs du
type begin et end. Ces indentations sont donc ici à faire de façon très rigoureuses pour une correction du
programme. Une mauvaise indentation peut amener une erreur de compilation, voire un mauvais résultat
(ce qui est plus dur à détecter). 113/172
PROGRAMMATION EN PYTHON

Les variables
En Python, les variables bénéficient d’un typage dynamique : le type est détecté automatiquement lors
de la création de la variable par affectation. Il n’est donc pas nécessaire de déclarer la variable avant de
l’utiliser (comme dans la plupart des autres langages).
 Affectation
o L’affectation est l’action consistant à donner une valeur à une variable. Elle se fait avec l’égalité. La
ligne ci-dessous donne la valeur 3 à la variable a, ceci jusqu’à la prochaine modification
a = 3 # affectation
o Une affectation peut prendre en argument le résultat d’une opération :
a = 4 + 5 # Opération et affectation
o Cette affection peut même utiliser la variable a elle-même : dans ce cas, le calcul du membre de droite
est effectué d’abord, et ensuite seulement l’affectation. Ainsi, le calcul est effectué avec l’ancienne valeur
de a. Il faut en particulier qu’une valeur ait déjà été attribuée à a.
a = 4 + 5 * a # Opération et affectation
114/172
PROGRAMMATION EN PYTHON

Les variables
 Affectation
Il existe des raccourcis pour certaines opérations de ce type :
# Affectations avec opération:
a += 2 # Équivaut à a=a+2
a -= 1 # Équivaut à a=a-1
a *= 3 # Équivaut à a=a*3
a /= 2 # Équivaut à a = a / 2 (division réelle)
a //= 2 # Équivaut à a = a // 2 (division entière)
a %= 3 # Équivaut à a = a % 3 (reste modulo 3)
a **= 4 # Équivaut à a = a ** 4 (puissance)
# etc.

115/172
PROGRAMMATION EN PYTHON

Les variables
 Affichage
En ligne de commande, il suffit de taper le nom de la variable après l’invite de commande :
>>> a = 5
>>> a
5

Faire un affichage du contenu d’une variable lors de l’exécution d’un programme nécessite la fonction
print() , qui affiche une chaine de caractère. On peut aussi l’utiliser en ligne de commande
>>> a = 5
>>> print(a)
5

Cette fonction réalise une conversion automatique préalable du contenu de la variable en chaîne de
caractères, car la fonction print() prend toujours en argument une chaîne de caractères (voir section
« chaînes de caractères »).
116/172
PROGRAMMATION EN PYTHON

Les variables
 Type et identifiant
Chaque variable possède un identifiant (l’adresse mémoire associée), et un type (la nature de l’objet
stocké dans la variable). L’identifiant change à chaque réaffectation, le type peut changer lui-aussi. Les
méthodes associées à un objet peuvent le modifier sans changement d’identifiant
type(a) # affiche le type (la classe) de la variable ou de l’objet
id(a) # affiche l’identifiant (l’adresse en mémoire)

117/172
PROGRAMMATION EN PYTHON

Les variables
 Type et identifiant
Les principaux types (hors modules complémentaires) :
int # Entiers, de longueur non bornée
float # Flottants (réels, en norme IEEE 754 sur 64 bits, voir chapitre 1)
complex # Nombres complexes
bool # Booléens (True / False)
List # Listes
Set # Ensembles
Tuple # $n$-uplets
str # Chaînes de caractères (string)
function # Fonctions

Certains types plus complexes peuvent être rattachés à un type donné, comme les itérateurs de liste
(objet permettant d’énumérer les uns après les autres les éléments d’une liste.
D’autres types dans des modules spécifiques, en particulier les types array et matrix du module
complémentaire numpy, pour les tableaux et les matrices
118/172
PROGRAMMATION EN PYTHON

Les variables
 Type et identifiant
Exemples :
>>> type(87877654)
<class ‘int’>
>>> type(1.22)
<class ‘float’>
>>> type(True)
<class ‘bool’>
>>> type([1,2])
<class ‘list’>
>>> type({1,2})
<class ‘set’>
>>> type(‘abc’)
<class ‘str’>
>>> type(lambda x:x*x)
<class ‘function’>
119/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les nombres
Opérations sur les nombres:
x+y # somme de deux entiers, réels ou complexes
x*y # produit de deux entiers, réels ou complexes
x-y # différence de deux entiers, réels ou complexes
x/y # division de réels (retourne un objet de type float même si
# le résultat théorique est un entier;
x // y # division entière (quotient de la division euclidienne)
# s’applique à des entiers ou des réels. Appliqué à des
# entier, retourne un ’int’, sinon un ’float’
x%y # modulo (reste de la division euclidienne); s’applique à des entiers ou réels.
divmod(x, y) # renvoie le couple (x // y, x % y); permet de faire les deux calculs une
# en utilisant seule fois l’algorithme de la division euclidienne.

120/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les nombres
Opérations sur les nombres:
x ** y # x puissance y
abs(x) # valeur absolue de x
int(x) # partie entière de l’écriture décimale (ne correspond pas à la partie entière
# mathématique si x < 0: par exemple int(-2.2)=-2

Les complexes s’écrivent sous la forme a + bj. Le réel b doit être spécifié, même si b = 1, et accolé à
la lettre j. Par exemple 1+1j désigne le complexe 1 + i
x.conjugate() # retourne le conjugué du nombre complexe x
x.real # partie réelle
x.imag # partie imaginaire

121/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les booléens et les tests
Les deux éléments de la classe des booléens sont True et False (avec les majuscules).
Opérations sur les booléens:
x.__and__(y) ou x & y ou x and y # et
x.__or__(y) ou x | y ou x or y # ou
x.__xor__(y) ou x ^ y # ou exclusif
not x # négation de x

122/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les booléens et les tests
Toute opération valable sur des entiers l’est aussi sur les booléens : le calcul se fait en prenant la valeur 0
pour False, et la valeur 1 pour True. La plupart du temps, les booléens sont obtenus au moyen de tests :

# Tests:
x == y # égalité (la double égalité permet de distinguer
# syntaxiquement de l’affectation)
x<y # infériorité stricte
x>y # supériorité stricte
x <= y # infériorité large
x >= y # supériorité large
x != y # différent (non égalité)
x in y # appartenance (pour les listes, ensembles, chaînes de caractères)
x is y # identité (comparaison des identifiants de x et y)
123/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les listes
Une liste est une suite ordonnée d’objets, pouvant être de type différent. Ces objets peuvent
éventuellement être eux-mêmes des listes (listes imbriquées). Ils peuvent même être égaux à la liste
globale (définition récursive).

# Notation d’une liste


[1,2,3,4] # énumération des objets entre []
[[1,2],[1],1] # liste dont les deux premiers termes sont des listes
[] # liste vide

L’accès à un élément d’une liste est direct (contrairement à de nombreux langages, ou l’accès se fait par
chaînage, en suivant les pointeurs à partir du premier élément). L’indexation des éléments commence à 0 :

124/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les listes
Exemples
Accès aux éléments d’une liste par indexation positive:
>>> ma_liste = [1,2,3,4,5]
>>> ma_liste[0]
1
>>> ma_liste[3]
4
>>> ma_liste[5]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range

125/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les listes
On peut aussi accéder aux éléments par indexation négative. Le dernier élément de la liste est alors
numéroté -1. Cette syntaxe est surtout intéressante pour accéder aux derniers éléments d’une liste.
Accès aux éléments d’une liste par indexation négative:
>>> ma_liste = [1,2,3,4,5]
>>> ma_liste[-1]
5
>>> ma_liste[-5]
1
>>> ma_liste[-6]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
126/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les listes
Voici une liste des opérations et méthodes les plus utilisées sur les listes. Pour une liste plus exhaustive, utilisez
help(list). (m) en commentaire indique que la méthode modifie directement la liste sur laquelle elle agit. Les
autres retourne le résultat en sortie de fonction.

# Opérations et méthodes applicables à une liste:


len(ma_liste) # longueur (nombre d’éléments) de ma_liste
ma_liste + ma_liste1 # concaténation des listes (ma_liste et ma_liste1)
n * ma_liste # pour n entier: concaténation répétée de ma_liste avec elle-même.
ma_liste.append(a) # ajout de l’objet a en fin de liste (m)
ma_liste.insert(i,a) # insertion de l’objet a en position i (m)
ma_liste.remove(a) # retrait de la première occurrence de a (m)

127/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les listes
ma_liste.pop(i) # retrait et renvoi de l’élément d’indice i (m)
# par défaut, si i non précisé: dernier élément
ma_liste.index(a) # position de la première occurrence de a
# ValueError si a n’est par dans la liste
ma_liste.count(a) # nombre d’occurrences de a dans la liste
a in ma_liste # teste l’appartenance de a à ma_liste
ma_liste.copy() # copie simple de ma_liste
# attention aux problèmes de dépendance des attributs
ma_liste.reverse() # retourne la liste (inversion des indexations) (m)
ma_liste.sort() # trie la liste dans l’ordre croissant (m)
# (si composée d’objets comparables)
# voir page suivante pour des paramètres

128/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les listes
Le tri d’une liste possède deux paramètres : un qui permet de préciser si le tri est croissant ou décroissant,
l’autre qui permet de définir une clé de tri (une fonction : on trie alors la liste suivant les valeurs que la fonction
prend sur les éléments de la liste)
#Paramètres de tri:
ma_liste.sort() # tri simple
ma_liste.sort(reverse=True) # tri inversé
ma_liste.sort(key = f) # tri suivant la clé donnée par la fonction f

La fonction donnant la clé de tri peut être une fonction prédéfinie dans un module (par exemple la fonction sin du
module math), une fonction définie précédemment par le programmeur (par def), ou une fonction définie sur
place (par lambda).

129/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les listes
Lors de la copie d’une liste (par la méthode copy, ou par affectation directe), les attributs gardent même adresse.
Donc modifier la copie, modifie aussi l’original, et réciproquement. Pour copier avec modification d’adresse des
attributs, utiliser un slicing (appelé saucissonnage) M = L[:]. Cela ne rend pas la copie complètement
indépendante de l’original, si les objets de la liste sont eux-mêmes des structures composées (listes,
ensembles...). Il faut dans ce cas faire une copie profonde, à l’aide d’une fonction définie dans le module copy :
Accès aux éléments d’une liste par indexation négative:
>>> ma_liste = [1,2,3,4,5]
>>> import copy
>>> ma_liste2 = copy.deepcopy(ma_liste)

Technique de slicing : Il s’agit simplement de l’extraction d’une tranche de la liste, en précisant un indice initial
et un indice final. On peut définir un pas p, ce qui permet de n’extraire qu’un terme sur p (par exemple les termes
d’indice pair ou impair en prenant p = 2)
130/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les listes
# Technique de slicing:
ma_liste[i:j] # Extraction de la tranche [ma_liste[i], ... , ma_liste[j-1]]
ma_liste[i:j:p] # De même de p en p à partir de ma_liste[i], tant que i+k*p < j (k entier)

À noter que :
o Si le premier indice est omis, il est pris égal à 0 par défaut.
o Si le deuxième indice est omis, il est pris égal à la longueur de la liste par défaut (on extrait la tranche finale)
o Si le troisième indice est omis, il est pris égal à 1 par défaut (cas de la première instruction ci-dessus)
o Un pas négatif permet d’inverser l’ordre des termes
o Le slicing est possible aussi avec des indexations négatives.

131/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les listes
Exemples :
>>> ma_liste3 = [0,1,2,3,4,5,6,7,8,9,10] >>> ma_liste3[:2:4]
>>> ma_liste3[3:6] [0]
[3, 4, 5] >>> ma_liste3[:5:4]
>>> ma_liste3[2:8:2] [0, 4]
[2, 4, 6] >>> ma_liste3[-3:-1]
>>> ma_liste3[:3] [8, 9]
[0, 1, 2] >>> ma_liste3[2:6:-3]
>>> ma_liste3[3::3] []
[3, 6, 9] >>> ma_liste3[6:2:-3]
>>> ma_liste3[::5] [6, 3]
[0, 5, 10]
132/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les tuples
Les tuples sont des n-uplets. Ils sont notés entre parenthèses :
# Notation d’un tuple:
(1,2,3,4) # énumération des objets entre ()

Dans certains cas, l’omission des parenthèses est supportée.


Contrairement à une liste, ils ont une taille fixée (aucune méthode ne peut ajouter une coordonnée en place).
On peut accéder à une coordonnée par indexation, mais pas la modifier :
>>> u = (2,3)
>>> u[1]
3
>>> u[1]=2
Traceback (most recent call last): File "<stdin>", line 1, in <module>
TypeError: ’tuple’ object does not support item assignment
133/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les tuples
Les tuples sont des n-uplets. Ils sont notés entre parenthèses :
# Principales opérations et méthodes applicables à un tuple
len(U) # nombre de coordonnées
U+V # retourne la concaténation
n * U ou U * n # concaténation répétée n fois
U.count(a) # retourne le nombre d’occurrences de a
U.index(a) # retourne le premier indice de a, ou une
# erreur si a n’est pas un attribut
a in U # teste l’appartenance de a à U

134/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les dictionnaires
o Un dictionnaire est une collection d'objets non-ordonnées.
o Il est composé d'éléments et chaque élément se compose d'une paire clé : valeur. Dans
certains langages de programmation, on parle de tableaux associatifs ou de hashs.
o Comme les listes, les dictionnaires sont des objets muables et dynamiques. Ils peuvent être
modifiés et s'étendre selon vos besoins.
o Un dictionnaire peut contenir des objets de n'importe quel type et même inclure d'autres
dictionnaires.
o C'est grâce à ces caractéristiques que les dictionnaires sont souvent utilisés pour créer des
structures de données complexes où plusieurs éléments sont imbriqués les uns dans les
autres !
135/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les dictionnaires
o Les clés sont uniques et à chacune de ces clés est associée une valeur.
o Les clés doivent être des objets non mutables - en général on utilise des entiers, des chaînes de
caractères ou des tuples. Les valeurs peuvent être totalement quelconques.
o Un dictionnaire en Python peut s'apparenter à un dictionnaire de français où on accède à une
définition avec un mot.
o Contrairement aux listes qui sont délimitées par des crochets, on utilise des accolades pour les
dictionnaires.

136/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les dictionnaires
# Manipulation de dictionnaires

dict() ou {} # dictionnaire vide


{c1:v1, c2:v2, ...} # création d’un dictionnaire avec les clés 𝑐𝑖 et les valeurs 𝑣𝑖
d[cle] # accès à la valeur associée à la clé cle (en lecture et écriture).
# Lors d’une affectation, la clé est créée si elle n’existe pas
d.keys() # ensemble des clés du dictionnaires (objet itérable)
d.values() # les valeurs du dictionnaires (objet itérable)

137/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les dictionnaires
# Manipulation de dictionnaires

d.items() # les couples clé/valeurs du dictionnaires (objet itérable)


len(d) # taille du dictionnaire (nombre de clés)
k in d (ou k not in d) # teste si la clé k est présente (absente) dans le dictionnaire
d.copy() # réalise une copie superficielle du dictionnaire
d.pop(cle) # retire le couple clé/valeur du dictionnaire et renvoie la valeur
d.popitem() # retire et renvoie un couple clé/valeur du dictionnaire (le dernier créé)
del d[cle] # efface le couple clé/valeur associé à la clé

138/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les dictionnaires
>>> Mon_Dict = { 'a':3, 'b':5, 'c':4 }
>>> Mon_Dict['a']
3
>>> Mon_Dict['e']
KeyError
>>> 'b' in Mon_Dict
True
>>> Mon_Dict['e'] = 5 ; Mon_Dict['b']=3* Mon_Dict['e']
>>> Mon_Dict
{'a': 3, 'b': 15, 'c': 4, 'e': 5}

139/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les dictionnaires
>>> Mon_Dict1 = {}
>>> Mon_Dict1[(0 ,0) ]=1
>>> Mon_Dict1[(1 ,0) ]=2
>>> Mon_Dict1[(2 ,3)] = 8
>>> Mon_Dict1
{(0, 0): 1, (1, 0): 2, (2, 3): 8}
>>> Mon_Dict[[2 ,1]] = 0
TypeError: unhashable type: 'list '

140/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les chaînes de caractères
Il s’agit d’un assemblage non interprété de caractères.
# Notation d’une chaîne de caractères:
’abcd’ # énumération des caractères successifs entre ’’
"abcd" # énumération des caractères successifs entre ""
" " "abcd" " " # énumération des caractères successifs entre " " " " " " (raw string)

L’intérêt d’avoir 2 délimiteurs possibles est de pouvoir utiliser sans problème une apostrophe ou un guillemet
dans une chaîne de caractère. Si les deux apparaissent dans la chaîne, on peut utiliser une raw string. Celle-ci
permet aussi d’utiliser des retours-chariot explicites. Sans raw string, les retours à la ligne se notent avec le
caractère spécial ’\ n’.
Les raw string sont aussi utilisés pour commenter les fonctions

141/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les chaînes de caractères
L’accès à un caractère d’une chaîne se fait par indexation de la même manière que pour les listes. Le
premier caractère est indexé par 0. Les indexations négatives sont possibles dans la même mesure que
pour les listes.
Accès aux éléments d’une chaîne par indexation positive:
>>> ch = ’abcde’
>>> ch[2]
’c’
>>> ch[-1]
’e’

142/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les chaînes de caractères
Les slicings (saucissonnages) peuvent se faire également sur les chaînes de caractères, de la même manière
que pour les listes :
>>> ch = ’azertyuiopqsdfghjklmwxcvbn’
>>> ch[3:12]
’rtyuiopqs’
>>> ch[20:10:-1]
’wmlkjhgfds’
>>> ch[::2]
’aetuoqdgjlwcb’

143/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les chaînes de caractères
Une liste (non exhaustive) des opérations et méthodes les plus utiles. Voir help(str) pour (beaucoup) plus.
# Opérations et méthodes sur les chaînes de caractères:
len(c) # longueur (nombre de caractères) de c
print(c) # affichage à l’écran de la chaîne c
c+d # concaténation des chaînes c et d
n*c # concaténation répétée n fois
c.join(ma_liste) # concaténation des chaînes de la liste ma_liste valable
avec d’autres itérables
c.split(sep) # scinde c en une liste de chaînes, en
# recherchant les séparateurs sep
c.center(n) # centre n dans une chaîne de longueur n

144/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les chaînes de caractères
Une liste (non exhaustive) des opérations et méthodes les plus utiles. Voir help(str) pour (beaucoup) plus.
# Opérations et méthodes sur les chaînes de caractères:
c.format(x,y,...) # insertion des nombres x, y,... aux endroits délimités par des {} dans la chaîne
d in c # teste si d est sous-chaîne de c
c.count(d) # nombre d’occurrences ne se recouvrant pas de la chaîne d
c.find(d) # indice de la première occurrence de d
# renvoie -1 si pas d’occurrence
c.index(d) # indice de la première occurrence de d’erreur si pas d’occurrence
c.rfind(d) # de même que find pour la dernière occurrence
c.rindex(d) # de même que index pour la dernière occurrence
c.replace(d,e) # remplace toutes les sous-chaînes d par e

145/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les chaînes de caractères
la méthode format est particulièrement utile pour paramétrer l’aspect des insertions de nombres dans le
texte. Pour commencer, nous donnons des exemples simples :
>>> 'Il y a {} mangues et {} oranges'.format(12, 15)
'Il y a 12 mangues et 15 oranges‘
>>> 'Il y a {} tulipes, {} roses et {} jasmins'.format(3,4,7)
'Il y a 3 tulipes, 4 roses et 7 jasmins'

146/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les itérateurs
Les itérateurs sont des objets égrenant des valeurs les unes après les autres en les retournant successivement.
On peut utiliser ces valeurs successives grâce à l’instruction for (voir section sur les boucles).
L’itérateur le plus utile pour nous sera range, énumérant des entiers dans un intervalle donné.
# L’itérateur range:
range(a,b,p) # retourne les entiers de a à b-1, avec un pas p
range(a,b) # de même, avec la valeur par défaut p=1
range(b) # de même, avec la valeur par défaut a=0

Ainsi, range(b) permet d’énumérer les entiers de 0 à b − 1.


Certaines classes composées possèdent une méthode objet ._ _iter_ _(), permettant de les transformer en
itérateur. Cette conversion est rarement effectuée explicitement, mais intervient de façon implicite.
Elle permet de faire des boucles dont l’indice porte sur les éléments de ces structures (par exemple les
éléments d’une liste, d’un ensemble (dictionnaire) ou d’une chaîne de caractère).
147/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Les itérateurs
# Boucles portant sur des objets itérables: Boucle for

for i in range(n): # exécute l’instruction instr pour toute valeur de


instr # i entre 0 et n-1

for i in liste: # exécute l’instruction instr pour toute valeur (non


instr # nécessairement numérique) de i dans la liste liste

for i in chaine: # exécute l’instruction instr pour tout caractère


instr # i de la chaîne de caractère chaine.

148/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Conversions de types
Certains objets d’un type donné peuvent être convertis en un autre type compatible.
# Conversions de type.

float(a) # Convertit l’entier a en réel flottant


complex(a) # Convertit l’entier ou le flottant a en complexe
str(x) # Convertit l’objet x de type quelconque en une chaîne de caractères.
list(x) # Convertit un itérable x (set, tuple, str, range) en objet de type liste.
set(x) # Convertit un itérable x en set
tuple(x) # Convertit un itérable x en tuple
eval(x) # Convertit la chaîne x en un objet adéquat, si possible. eval() permet
d’exécuter des chaînes de caractères en tant que instruction Python

149/172
PROGRAMMATION EN PYTHON

Objets et méthodes
 Conversions de types
Exemple :
>>> float(2) ['m', 'p', 's', 'i', '_', 'p', 'c', 's', 'i'] >>> eval(’2’)
2.0 >>> set([1,2,3]) 2
>>> complex(2) {1, 2, 3} >>> eval(’[2,3]’)
(2+0j) >>> set(range(10)) [2, 3]
>>> str({2,3,1}) {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} >>> eval(’print()’)
’{1, 2, 3}’ >>> tuple(’abc’) [2, 3]
>>> str(77+2) (’a’, ’b’, ’c’) >>> ch = 'code 1‘
’79’ >>> eval(’2’) >>> eval("print('je teste mon ', ch)")
>>> list({1,2,3}) 2 je teste mon code 1
[1, 2, 3] >>> eval(’[2,3]’)
>>> list(’mpsi_pcsi’) [2, 3]
150/172
PROGRAMMATION EN PYTHON

Structuration d’un programme


 Notion de programme
Un programme est constitué d’une succession d’instructions, écrites dans un fichier, structurée de façon
rigoureuse à l’aide de la syntaxe appropriée. Cette succession d’instruction peut être précédée par la définition
d’un certains nombres de fonctions (dans le même fichier, ou dans un fichier annexe qu’il faut alors importer) qui
pourront alors être utilisées dans le programme.
Les instructions peuvent être :
o une affectation
o l’utilisation d’une fonction, ou d’une méthode sur un objet, ou un calcul
o une structure composée (conditionnelle, itérative, gestion d’exception...)
Les structures composées peuvent porter sur des blocs de plusieurs instructions. Il est important de pouvoir
délimiter de façon très précise ces blocs. Contrairement à beaucoup de langages utilisant des délimiteurs de
type begin et end, la délimitation des blocs en Python se fait uniquement par l’indentation

151/172
PROGRAMMATION EN PYTHON

Structuration d’un programme


 Notion de programme
Exemple, comparons le deux petits programmes suivants :
# Importance des indentations (Prg 1) # Importance des indentations (Prg 2)
x=y=1 x=y=1
for i in range(5): for i in range(5):
x += 1 x += 1
y += 1 y += 1
print(x," et ",y) print(x," et ",y)

Le premier renvoie 6 et 6 tandis que le second renvoie 6 et 2. En effet, l’incrémentation de y n’est pas dans la
boucle, et n’a donc lieu qu’une fois dans le second programme. Dans un soucis d’unification, on adopte
généralement la règle suivante (respectée par les environnements adaptés via la tabulation) :
Un nouveau bloc sera déterminé par une indentation de 4 caractères de chacune de ses lignes.
152/172
PROGRAMMATION EN PYTHON

Structuration d’un programme


 Demande d’entrée de donnée par l’utilisateur
Un programme peut interagir avec l’utilisateur, soit en lui demandant d’entrer des données (entrée), soit en
agissant sur les périphériques (sortie). La demande d’entrée de donnée par l’utilisateur se fait avec :
# demande d’entrée de donnée par l’utilisateur
input(‘texte’)

Cette instruction affiche ‘texte’ à l’écran, puis attend que l’utilisateur entre une donnée, validée par l’Entrée.
On associe souvent cette instruction à une affectation de sorte à conserver la donnée fournie :
>>> reponse = input(‘Comment allez-vous ?’) Ici, le texte ’Comment allez-vous ?’ a été affiché par
Comment allez-vous ? Je vais bien. l’ordinateur, et l’utilisateur a tapé ’Je vais bien.’, valeur qui a
>>> reponse été stockée dans la variable reponse. Évidemment, cette
’Je vais bien.’ fonction input est plus intéressante en programme qu’en ligne
>>> x = eval(input(’Entrez une valeur : ’)) de commande, afin de pouvoir donner la main à l’utilisateur.
Entrez une valeur : 2
>>> x
2
153/172
PROGRAMMATION EN PYTHON

Structuration d’un programme


 Les fonctions
Une fonction est un morceau de programme que l’on isole, et qu’on peut faire dépendre de paramètres.
Cela permet de :
o Dégager le cœur même du programme de toute technique en isolant cette technique dans des fonctions
(clarté et lisibilité du code)
o Pouvoir répéter une certaine action à plusieurs endroits d’un même programme, ou même dans des
programmes différents (en définissant des fonctions dans des fichiers séparés qu’on importe ensuite)
o Rendre certains actions plus modulables en les faisant dépendre de paramètres.
Une fonction prend en paramètres un certain nombre de variables ou valeurs et retourne un objet
(éventuellement None), calculé suivant l’algorithme donné dans sa définition. Elle peut aussi agir sur les
variables ou les périphériques.

154/172
PROGRAMMATION EN PYTHON

Structuration d’un programme


 Les fonctions
La syntaxe générale de la définition d’une fonction est la suivante :

# Définition d’une fonction La chaîne de caractères en raw string est facultative. Elle permet de
définir la description qui sera donnée dans la page d’aide associée à
def nom_de_la_fonction(x,y):
cette fonction.
"""Description""" Les instructions sont les différents étapes permettant d’arriver au
instructions résultat.
return resultat L’instruction spécifique commençant par return permet de retourner
la valeur de sortie de la fonction. Si cette ligne n’est pas présente, la
valeur de sortie sera None (pas de sortie). Cela peut être le cas pour
une fonction dont le but est simplement de faire un affichage.

155/172
PROGRAMMATION EN PYTHON

Structuration d’un programme


 Les fonctions
Exemples de fonctions
Nom du dossier :
Mes_Codes

Nom du fichier :
Programme_1.py

156/172
PROGRAMMATION EN PYTHON

Structuration d’un programme


 Les structures conditionnelles
Une seule structure à connaître ici :

# Structure conditionnelle if (si) Les clauses elif (il peut y en avoir autant qu’on veut), ainsi que else sont
facultatives.
if test1:
instructions1
La structure est à comprendre comme suit :
• Les intructions1 sont effectuées uniquement si le test1 est positif
elif test2: • Les instructions2 sont effectuées uniquement si le test1 est négatif et
instructions2 le test2 positif
elif test3: • Les instructions3 sont effectuées uniquement si le test1 et le test2
sont négalifs et le test3 est positif
instructions3
• ...
... • Les instructionsN sont effectuées dans tous les autres cas.
else:
Le mot elif est à comprendre comme une abréviation de else if :
instructionsN
157/172
PROGRAMMATION EN PYTHON

Structuration d’un programme


 Les structures conditionnelles
Ainsi, la structure précédente est en fait équivalente à une imbrication de structures conditionnelles simples :
# Structure conditionnelle if (si)
if test1:
instructions1
else:
if test2:
instructions2
else:
if test3:
instructions3
else:
....
else:
instructionsN NB : N’oubliez pas les double-points, et faites attention à l’indentation
158/172
PROGRAMMATION EN PYTHON

Structuration d’un programme


 Les structures itératives
Il faut distinguer deux types de structures itératives ; celles où le nombre d’itérations est connu dès le début
(itération sur un ensemble fixe de valeurs: boucle for), et celles où l’arrêt de l’itération est déterminée par un test.
(coucle while)
La structure itérative for permet d’itérer sur un nombre fini de valeurs. Elle s’utilise avec un objet itérable
quel qu’il soit. La boucle est alors répétée pour toute valeur fournie par l’itérateur. L’objet itérable étant
fixé, le nombre d’itérations est connue dès le départ.
# Boucle for, pour un nombre d’itérations connu d’avance
for i in objet_iterable:
instructions # qui peuvent dépendre de i

Par exemple :
for i in [1,2,5]: Ce code va afficher les 3 valeurs que sont 1, 2 et 5. for i in range(1, n+1):
print(i) Le classique for i = 1 to n (ou similaire) qu’on trouve instructions
dans la plupart des langages se traduit alors par : 159/172
PROGRAMMATION EN PYTHON

Structuration d’un programme


 Les structures itératives
La boucle while permet d’obtenir un arrêt de l’itération par un test. Il s’agit en fait plutôt d’une condition de
continuation, puisqu’on itère la boucle tant qu’une certaine condition est vérifiée.
# Boucle while, pour l’arrêt des itérations par un test
while cond:
instructions

Tant que la condition cond est satisfaite, l’itération se poursuit.


Remarquez qu’une boucle for traditionnelle (de 1 à n) peut se traduire aussi par une boucle while :
En revanche, ce n’est pas le cas de la boucle for sur d’autres objets itérables.
i=1
while i <= n:
instructions
i +=1
160/172
PROGRAMMATION EN PYTHON

Structuration d’un programme


 La gestion des exceptions
L’exécution de certaines instructions peut fournir des erreurs. Il existe différents types d’erreur en Python,
par exemple : ZeroDivisionError, ValueError, NameError, TypeError, IOError, etc.
Dans certaines conditions, on veut pouvoir continuer l’exécution du programme tout de même, éventuellement
en adaptant légèrement l’algorithme au cas problématique détecté. On dispose pour cela de la structure try, qui
dans sa version la plus simple, s’écrit :
L’ordinateur essaie d’effectuer la série d’instructions1.
try:
• S’il survient une erreur d’exécution, il effectue les instructions2 et saute
instructions1 les instructions3
except: • Sinon, il saute les instructions2 et exécute les instructions3.
On peut aussi rajouter une clause finally: qui sera exécutée dans les deux
instructions2
situations.
else: La clause except est obligatoire, la clause else est facultative. Si on n’a rien
instructions3 a faire dans la clause except, on peut utiliser l’instruction vide pass.
161/172
PROGRAMMATION EN PYTHON

Structuration d’un programme


 La gestion des exceptions
La gestion des exceptions peut différer suivant le type d’erreur qui intervient. Si on veut pouvoir gérer
différemment plusieurs types d’exceptions, on peut mettre plusieurs clauses except

y = input("Entrez une valeur à inverser : ")

try :

x = 1 / eval(y)

except ZeroDivisionError:

print(" Impossible de faire une division par 0 ")

except NameError:

print(" Impossible de faire une division par ", y)


162/172
PROGRAMMATION EN PYTHON

Modules complémentaires
 Utilisation d’un module
De nombreuses fonctions sont définies dans des modules spécialisées ; cela permet de ne pas encombrer la
mémoire en définissant de nombreuses fonctions dont on ne se servira pas.

On peut se contenter de charger


(importer) les modules contenant les fonctions utilisées (ou même sélectionner les fonctions qu’on importe
dans chaque module).

De cette manière, on peut définir un très grand nombre de fonctions, sans pour
autant alourdir l’ensemble.

163/172
PROGRAMMATION EN PYTHON

Modules complémentaires
 Utilisation d’un module
Pour utiliser une fonction fonct d’un module mod, il faut importer cette fonction, ou le module entier avant
l’utilisation de cette fonction. Cela peut se faire de 3 manières :
o Import simple du module
import mod #Cette instruction permet de faire savoir à l’ordinateur qu’on utilise le module mod.
mod.fonct() #utilisation de la fonction fonct() du module mod

L’utilisation de préfixes permet d’utiliser des fonctions ayant éventuellement même nom et se situant dans des
modules différents. Certains noms de module sont longs, ou seront utilisés très souvent. On peut, au moment de
l’import du module, créer un alias, qui permettra d’appeler les fonctions de ce module en donnant comme préfixe
l’alias au lieu du nom complet :
import mod as allias
alias.fonct() #utilisation de la fonction fonct() du module mod renommé en alias

import numpy as np
164/172
PROGRAMMATION EN PYTHON

Modules complémentaires
 Utilisation d’un module
o Import simple du module
from mod import fonct # Cette instruction permet d’importer la définition de la fonction fonct().
# les autres fonctions du module ne peuvent pas être utilisées, même avec le préfixe

Attention, si une fonction du même nom existe auparavant (de base dans Python, ou importée précédemment),
elle sera écrasée
o Import de toutes les fonctions d’un module
from mod import * # Cette instruction permet d’importer la définition de toutes les fonctions
# du module mod. Les autres fonctions du module peuvent être utilisées de même

Attention aussi aux écrasements possibles. Par ailleurs, l’import est plus long à effectuer, et plus d’une
gestion plus lourde, si le module est gros
Nous passons en revue, dans les pages suivantes, les modules qui nous seront les plus utiles. Il existe de
nombreux autres modules, dans des domaines très spécifiques. 165/172
PROGRAMMATION EN PYTHON

Modules complémentaires
 Le module math
Ce module contient les fonctions et constantes mathématiques usuelles, dont nous citons les plus utiles (utiliser
help() pour avoir la liste de toutes les fonctions du module)
### Exponentielle et logarithme ###
e # constante e, base de l’exponentielle
exp(x) # exponentielle de x
log(x) # logarithme népérien
log10(x) # logarithme en base 10

166/172
PROGRAMMATION EN PYTHON

Modules complémentaires
 Le module math
### Fonctions trigonométriques ###
pi # le nombre pi
cos(x) # cosinus
sin(x) # sinus
tan(x) # tangente
acos(x) # arccos
asin(x) # arcsin
atan(x) # arctan

167/172
PROGRAMMATION EN PYTHON

Modules complémentaires
 Le module math
### Fonctions hyperboliques ###
cosh(x) # cosinus hyperbolique
sinh(x) # sinus hyperbolique
tanh(x) # tangente hyperbolique

### parties entières ###


floor(x) # partie entière au sens mathématique
ceil(x) # partie entière par excès

### Autres fonctions ###


sqrt(x) # racine carrée
factorial(x) # factorielle (pour x entier)

168/172
PROGRAMMATION EN PYTHON

Modules complémentaires
 Le module numpy (calcul numérique)
Il est impossible de faire le tour de façon rapide de ce module définissant un certain nombre d’objets
indispensables en calcul numérique, en particulier l’objet matriciel, et toutes les règles associées. Nous ne
faisons qu’un survol rapide de cet aspect, en vous laissant découvrir le reste à l’aide de l’aide ou des guides
d’utilisation.
Le module numpy contient lui-même des sous-modules, en particulier le sous module linalg. Nous ne
précisons pas dans ce qui suit le préfixe relatif au module principal numpy (souvent abrégé en np), mais
nous précisons les préfixes correspondant aux sous-modules
### La structure array (np.array): tableau multidimentionnel ###
array(liste) # convertisseur: transforme une liste en tableau
# En imbriquant des listes dans des listes, on peut
# obtenir des tableaux multidimentionnels

169/172
PROGRAMMATION EN PYTHON

Modules complémentaires
 Le module numpy (calcul numérique)
### Exemples ###
array([1,2,3]) # tableau à 3 entrées (matrice ligne)
array([[1,2],[3,4]]) # matrice 2x2 de première ligne (1,2) seconde ligne (3,4)
array([[1],[2],[3]]) # matrice colonne

### fonctions de structure sur les array ###


shape(A) # format du tableau (donne le nombre de lignes, de colonnes...,
# sous forme d’un tuple

170/172
PROGRAMMATION EN PYTHON

Modules complémentaires
 Le module numpy (calcul numérique)
Les np.array permettent le calcul matriciel. Les opérations matricielles usuelles sont définies :
### Opérations matricielles ### power(A,n) # A puissance n
A + B # Somme de deux matrices linalg.inv(A) # inverse de A
a * M # Multiplication par un scalaire linalg.eigvals(A) # valeurs
A * B # Produit coefficient par coefficient # propres de A
# (produit de Schur) linalg.eig(A) # valeurs propres
# ATTENTION, ce n’est pas le produit matriciel # et base de vecteurs
dot(A,B) # Produit matriciel # propres
linalg.det(A) # déterminant
trace(A) # trace
transpose(A) # transposée
power(A,n) # A puissance n
171/172
PROGRAMMATION EN PYTHON

Modules complémentaires
 Le module numpy (calcul numérique)
Enfin, le sous-module numpy.random définit un certain nombre de fonctions de génération aléatoire de
nombres, suivant la plupart des lois classiques. Nous n’en citons que la loi uniforme. Utiliser l’aide
help(numpy.random) pour découvrir les autres en cas de besoin. On suppose numpy.random importé sous le
nom npr
npr.randint(a) # génère aléatoirement un entier de 0 à a-1 inclus, de façon uniforme
npr.randint(a,b) # génère aléatoirement un entier de a à b-1 inclus, de façon uniforme
npr.random(a,b,n) # génère un tableau 1 x n d’entiers aléatoirement
# choisis uniformément entre a et b-1
npr.random() # génère aléatoirement un réel de [0,1[ de façon uniforme
npr.sample(n) # génère un np.array 1 ligne n colonnes rempli aléatoirement
# par des réels de [0,1[ choisis uniformément
npr.sample(tuple) # de même pour un tableau multidimentionnel de taille définie par le tuple
172/172
PROGRAMMATION EN PYTHON

Travaux Dirigés
TD3/TP. Recherche séquentielle dans un tableau unidimensionnel. Dictionnaire;
TD4/TP. Algorithmes opérant sur une structure séquentielle par boucles imbriquées;
TD5/TP. Utilisation de modules, de bibliothèques;
TD6/TP. Algorithmes dichotomiques;
TD7/TP. Fonctions récursives;
TD8/TP. Algorithmes gloutons;
TD9/TP. Matrices de pixels et images;
TD10/TP. Tris.

173/172

Vous aimerez peut-être aussi