Cours Introduction Programmation v2
Cours Introduction Programmation v2
E.C. INTRODUCTION A LA PROGRAMMATION - Utiliser des langages de programmation comme Python, largement utilisé dans la recherche scientifique et
l’analyse de données.
- Appliquer ces compétences à des cas concrets liés à votre domaine, comme le traitement de données
Pr ABESSOLO ONDOA Grégoire
Maitre de Conférences océaniques ou la simulation de phénomènes marins.
Ce cours est conçu pour être accessible à tous, même si vous n’avez jamais programmé auparavant.
Nous commencerons par les bases et avancerons progressivement vers des concepts plus avancés,
toujours en lien avec des **exemples concrets** inspirés de votre domaine d’études. Prêt à embarquer dans
cette aventure ?
1 2
Module 1 : Architecture des ordinateurs o une mémoire principale
o des interfaces d’entrées/sorties
La programmation ne se limite pas à écrire du code dans un langage comme Python ou Java.
Les différents organes du système sont reliés par des voies de communication appelées bus.
Comprendre l’architecture des ordinateurs est essentiel pour saisir comment et pourquoi un programme
s’exécute de telle ou telle manière. En effet, chaque instruction que vous écrivez est finalement traduite en
langage machine, exécutée par le CPU, et dépend des contraintes matérielles (mémoire, cache,
périphériques). Sans cette compréhension, il est difficile d’optimiser un programme, de choisir le bon langage
pour une tâche, ou même de corriger des bugs liés à la gestion des ressources (comme les fuites mémoire
ou les lenteurs inexpliquées).
Par exemple, un algorithme de tri en Python peut sembler simple, mais son efficacité dépend directement
de la manière dont le CPU accède à la mémoire. Si les données sont mal organisées, le processeur passera
son temps à charger des informations depuis la RAM, ce qui ralentira considérablement l’exécution. De
même, le choix entre un langage comme C (proche du matériel, idéal pour les systèmes embarqués), Matlab
(haut niveau, parfait pour le calcul matriciel) et Python (haut niveau, parfait pour le prototypage) repose sur
une compréhension des compromis entre performance, portabilité et facilité d’utilisation.
Figure 1.1 : Architecture complète
En maîtrisant ces bases, vous serez capable d’écrire des programmes plus efficaces, plus robustes, et
adaptés aux contraintes réelles du matériel. Ce chapitre vous donnera les clés pour relier la théorie de la 1.2 L’unité centrale
programmation à la pratique concrète de l’exécution sur une machine. Elle est composée par le microprocesseur qui est chargé d’interpréter et d’exécuter les instructions d’un
L’architecture d’un ordinateur représente l’organisation de ses différentes unités et de leurs programme, de lire ou de sauvegarder les résultats dans la mémoire et de communiquer avec les unités
interconnexions. d’échange.
Le choix d'une architecture est toujours le résultat d'un compromis :
1.2.1 Définition d’un microprocesseur
o entre performances et coûts
Un microprocesseur est un circuit intégré complexe caractérisé par une très grande intégration et doté
o entre efficacité et facilité de construction
des facultés d'interprétation et d'exécution des instructions d'un programme. Il est chargé d’organiser les
o entre performances d'ensemble et facilité de programmation
tâches précisées par le programme et d’assurer leur exécution.
o etc …
Il doit aussi prendre en compte les informations extérieures au système et assurer leur traitement. C’est
1.1 Architecture de Von Neumann le cerveau du système. A l’heure actuelle, un microprocesseur regroupe sur quelques millimètres carrés des
John Von Neumann est à l'origine d'un modèle de machine universelle de traitement programmé de fonctionnalités toujours plus complexes. Leur puissance continue de s’accroître et leur encombrement
l’information (1946). Cette architecture sert de base à la plupart des systèmes à microprocesseur actuel. Elle diminue régulièrement respectant toujours, pour le moment, la fameuse loi de Moore.
est composé des éléments suivants :
o une unité centrale
3 4
Ces trois éléments sont reliés entre eux par des bus interne permettant les échanges d’informations.
Le microprocesseur ne comprend qu’un certain nombre d’instructions qui sont codées en binaire. Le
Figure 1.3 : Les systèmes à microprocesseur
traitement d’une instruction peut être décomposé en trois phases :
1.2.2 Architecture de base d’un microprocesseur o Phase 1: Recherche de l'instruction à traiter
Un microprocesseur est construit autour de deux éléments principaux :
o Une unité de commande
o Une unité de traitement
o des registres chargées de stocker les différentes informations à traiter.
5 6
o Exécution de l'instruction
7 8
1.3 La mémoire principale
Elle contient les instructions du ou des programmes en cours d’exécution et les données associées à ce
programme.
Une mémoire est un circuit à semi-conducteur permettant d’enregistrer, de conserver et de restituer des
informations (instructions et variables). C’est cette capacité de mémorisation qui explique la polyvalence des
systèmes numériques et leur adaptabilité à de nombreuses situations. Les informations peuvent être écrites
ou lues. Il y a écriture lorsqu'on enregistre des informations en mémoire, lecture lorsqu'on récupère des
informations précédemment enregistrées.
Une mémoire peut être représentée comme une armoire de rangement constituée de différents tiroirs.
Chaque tiroir représente alors une case mémoire qui peut contenir un seul élément : des données. Le nombre
de cases mémoires pouvant être très élevé, il est alors nécessaire de pouvoir les identifier par un numéro.
Ce numéro est appelé adresse. Chaque donnée devient alors accessible grâce à son adresse
9 10
1.3.3 Critères de choix d’une mémoire
o La capacité : c’est le nombre total de bits que contient la mémoire. Elle s’exprime aussi souvent en
octet.
o Le format des données : c’est le nombre de bits que l’on peut mémoriser par case mémoire. On dit
aussi que c’est la largeur du mot mémorisable.
o Le temps d’accès : c’est le temps qui s'écoule entre l'instant où a été lancée une opération de
lecture/écriture en mémoire et l'instant où la première information est disponible sur le bus de
données.
Figure 1.5 : Notion de hiérarchie mémoire
o Le temps de cycle : il représente l'intervalle minimum qui doit séparer deux demandes successives
de lecture ou d'écriture. 1.5 Les interfaces d’entrées/sorties
o Le débit : c’est le nombre maximum d'informations lues ou écrites par seconde.
Elles permettent d’assurer la communication entre le microprocesseur et les périphériques (capteur,
o La Volatilité : elle caractérise la permanence des informations dans la mémoire. L'information
clavier, moniteur ou afficheur, imprimante, modem, etc…).
stockée est volatile si elle risque d'être altérée par un défaut d'alimentation électrique et non volatile
dans le cas contraire. 1.6 Les bus
1.3.4 Notion de hiérarchie mémoire Un bus est un ensemble de fils qui assure la transmission du même type d’information. On retrouve trois
Une mémoire idéale serait une mémoire de grande capacité, capable de stocker un maximum types de bus véhiculant des informations en parallèle dans un système de traitement programmé de
d’informations et possédant un temps d’accès très faible afin de pouvoir travailler rapidement sur ces l’information :
informations. Mais il se trouve que les mémoires de grande capacité sont souvent très lente et que les o un bus de données : bidirectionnel qui assure le transfert des informations entre le
mémoire rapides sont très chères. Et pourtant, la vitesse d’accès à la mémoire conditionne dans une large microprocesseur et son environnement, et inversement. Son nombre de lignes est égal à la
mesure les performances d’un système. En effet, c’est là que se trouve le goulot d’étranglement entre un capacité de traitement du microprocesseur.
microprocesseur capable de traiter des informations très rapidement et une mémoire beaucoup plus lente. o un bus d'adresses: unidirectionnel qui permet la sélection des informations à traiter dans un
Or, on n’a jamais besoin de toutes les informations au même moment. Afin d’obtenir le meilleur compromis espace mémoire (ou espace adressable) qui peut avoir 2n emplacements, avec n = nombre de
coût-performance, on définit donc une hiérarchie mémoire. On utilise des mémoires de faible capacité mais conducteurs du bus d'adresses.
très rapide pour stocker les informations dont le microprocesseur se sert le plus et on utilise des mémoires o un bus de commande: constitué par quelques conducteurs qui assurent la synchronisation des
de capacité importante mais beaucoup plus lente pour stocker les informations dont le microprocesseur se flux d'informations sur les bus des données et des adresses.
sert le moins. Ainsi, plus on s’éloigne du microprocesseur et plus la capacité et le temps d’accès des
mémoires vont augmenter.
11 12
1.7 Décodeur d’adresses Module 2 : Bases de la programmation
La multiplication des périphériques autour du microprocesseur oblige la présence d’un décodeur Programmer, c’est avant tout communiquer avec une machine pour lui demander d’effectuer une tâche
d’adresse chargé d’aiguiller les données présentes sur le bus de données. En effet, le microprocesseur peut précise. Contrairement aux humains, qui peuvent interpréter des instructions floues ou ambiguës, une
communiquer avec les différentes mémoires et les différents boîtiers d’interface. Ceux-ci sont tous reliés sur machine a besoin d’instructions extrêmement précises, non ambiguës et structurées. Ces instructions, une
le même bus de données et afin d’éviter des conflits, un seul composant doit être sélectionné à la fois. fois écrites, forment ce qu’on appelle un programme.
Lorsqu’on réalise un système microprogramme, on attribue donc à chaque périphérique une zone Pour comprendre cette communication, il faut remonter aux origines de l’informatique et se demander :
d’adresse et une fonction « décodage d’adresse » est donc nécessaire afin de fournir les signaux de sélection Comment une machine, qui ne comprend que des signaux électriques, peut-elle exécuter des tâches
de chacun des composants. complexes comme afficher une image, calculer une trajectoire ou reconnaître un visage ? La réponse réside
dans la manière dont les humains ont appris à traduire des idées abstraites en instructions compréhensibles
par une machine, et c’est précisément ce que nous allons explorer dans ce module.
2.1 Les fondements de la programmation
Un algorithme est une suite finie et ordonnée d’opérations permettant de résoudre un problème ou
d’accomplir une tâche.
Pour bien comprendre cette notion, prenons l’exemple d’une recette de cuisine. Si vous voulez préparer
un gâteau, vous suivez une série d’étapes : mélanger les ingrédients, verser la pâte dans un moule, cuire au
four à 180°C pendant 30 minutes, etc. Chaque étape est claire, précise, et doit être exécutée dans l’ordre
pour obtenir le résultat souhaité. Si une étape est ambiguë (par exemple, "ajouter un peu de sucre"), le
résultat final pourrait varier d’une personne à l’autre. En programmation, cette ambiguïté est inacceptable :
un algorithme doit être déterministe, c’est-à-dire qu’il doit toujours produire le même résultat pour les mêmes
entrées.
Prenons un exemple concret : calculer la moyenne de trois notes. Un algorithme pour cette tâche pourrait
être décrit comme suit :
1. Demander à l’utilisateur de saisir la première note.
2. Demander à l’utilisateur de saisir la deuxième note.
3. Demander à l’utilisateur de saisir la troisième note.
4. Additionner les trois notes.
5. Diviser la somme par trois.
6. Afficher le résultat.
Cet algorithme est non ambigu : chaque étape est claire, et l’ordre est respecté. Si on le traduit en
instructions pour une machine, on obtient un programme.
13 14
TPE 1 : Ecrire sous forme de pseudo-code (langage structuré) et sous forme d’organigramme un Un interpréteur ne crée pas de fichier exécutable. Il lit, traduit et exécute le code ligne par
algorthme capable de calculer le factoriel d’un nombre saisi par un opérateur. ligne. C’est le cas de Python, MATLAB ou JavaScript.
Par exemple :
2.1.2 Le programme : la traduction d’un algorithme pour un ordinateur
Un fichier [Link] est un code source Python. Pour l’exécuter, l’interpréteur Python
Un programme est la traduction formelle d’un algorithme dans un langage compréhensible par une
lit le fichier, traduit chaque instruction en binaire, et l’exécute immédiatement.
machine. Cette traduction se fait en utilisant un langage de programmation, qui est un ensemble de règles
Un fichier [Link] est un exécutable : il contient déjà le code machine, prêt à être
syntaxiques et sémantiques permettant d’écrire des instructions exécutables.
exécuté par le CPU sans besoin de traduction supplémentaire.
Pour illustrer cette idée, reprenons l’exemple de la moyenne des trois notes. L’algorithme que nous avons
Exemple concret : Si vous écrivez un programme en C pour calculer la somme de deux nombres, vous
décrit précédemment peut être traduit en Python (langage de programmation) comme suit :
devrez d’abord le compiler avec un outil comme gcc (GNU Compiler Collection). Le compilateur générera
note1 = float(input("Entrez la première note : "))
note2 = float(input("Entrez la deuxième note : ")) un fichier exécutable (par exemple, [Link]), que vous pourrez ensuite lancer directement. En revanche,
note3 = float(input("Entrez la troisième note : ")) en Python, vous n’avez pas besoin de compiler : vous exécutez directement le fichier .py avec la commande
moyenne = (note1 + note2 + note3) / 3
print(f"La moyenne est : {moyenne}") python mon_programme.py, et l’interpréteur Python se charge de tout.
Ici, chaque étape de l’algorithme est traduite en une instruction Python. Le programme est ensuite 2.2 Les environnements de développement intégrés (IDE)
exécuté par l’ordinateur, qui suit les instructions à la lettre pour produire le résultat.
2.2.1 Définition
Un langage de programmation comme Python est donc un intermédiaire entre l’humain et la machine. Il
permet aux développeurs d’écrire des instructions de manière lisible et compréhensible : le code source. Un IDE (Integrated Development Environment, ou Environnement de Développement Intégré) est un
Le code source est donc le texte écrit par le développeur dans un langage de programmation (comme logiciel qui regroupe tous les outils nécessaires pour développer, tester et déboguer un programme. Un IDE
15 16
2.2.2 Pourquoi utiliser un IDE ? 2.2.3 Exemple : Utilisation de Visual Studio Code pour du Python
Les IDE offrent plusieurs avantages par rapport à un simple éditeur de texte : Visual Studio Code (VS Code) est un IDE léger et extensible, très populaire pour le développement en
o Productivité accrue : Les fonctionnalités comme l’auto-complétion et la détection d’erreurs réduisent Python. Voici comment l’utiliser pour un projet Python :
le temps de développement. o Installation : Télécharger et installer VS Code depuis [Link]
o Débogage facilité : Les débogueurs intégrés permettent de visualiser l’état du programme pendant Installer l’extension Python (de Microsoft) pour ajouter le support du langage.
son exécution.
o Création d’un projet : Créer un dossier pour votre projet (par exemple, mon_projet_python).
o Gestion des projets : Les IDE permettent de structurer des projets complexes avec plusieurs fichiers
Ouvrir ce dossier dans VS Code (Fichier > Ouvrir le dossier).
et dépendances.
o Édition du code : Créer un fichier [Link] et y écrire :
o Intégration avec des outils externes : Les IDE peuvent s’intégrer avec des compilateurs, des linters
def dire_bonjour(nom):
(outils d’analyse de code), des outils de test, etc. print(f"Bonjour, {nom} !")
Table 2.2 : Exemple d’IDE populaires
if __name__ == "__main__":
nom = input("Entrez votre nom : ")
IDE Langages supportés Caractéristiques Cas d’usage
dire_bonjour(nom)
Intégration avec Microsoft Windows, Développement Windows, jeux
C, C++, C#, Python,
Visual Studio
JavaScript
débogueur puissant, support pour le vidéo (avec Unity), applications VS Code propose :
développement web et mobile. d’entreprise.
Python, JavaScript, Coloration syntaxique pour distinguer les mots-clés, les chaînes, etc.
Visual Studio Léger, extensible via des plugins, support Développement web, scripting,
TypeScript, C++, Auto-complétion (par exemple, en tapant print, VS Code suggère print()).
Code pour Git, débogueur intégré. projets multi-langages.
Java, etc.
Optimisé pour Python, intégration avec des
Détection d’erreurs (par exemple, si vous oubliez les deux-points après if).
Développement Python, data
PyCharm Python bibliothèques comme Django et Flask, outils o Exécution du code : Ouvrir le terminal intégré (`Ctrl + ``) et exécuter :
science, IA.
de data science.
Java, C/C++, Python, Open source, support pour de nombreux Développement Java, python [Link]
Eclipse
PHP plugins, intégration avec Maven et Gradle. applications d’entreprise.
Ou utiliser le bouton Run en haut à droite de l’éditeur.
Débogueur avancé, outils de refactoring,
Java, Kotlin, Scala, Développement Java/Kotlin,
IntelliJ IDEA intégration avec des frameworks comme o Débogage :
Groovy applications Android.
Spring.
Environnement intégré pour le calcul
Placer un point d’arrêt (breakpoint) en cliquant à gauche du numéro de ligne.
Calcul scientifique, traitement du
MATLAB IDE MATLAB scientifique, visualisation de données, outils Lancer le débogueur (F5 ou via le menu Exécuter > Démarrer le débogage).
signal, modélisation.
de débogage.
Swift, Objective-C, C, Développé par Apple, intégration avec les Développement d’applications VS Code affiche :
Xcode
C++ outils de développement iOS/macOS. iOS/macOS. Les variables locales et leur valeur.
Basé sur IntelliJ IDEA, émulateur Android Développement d’applications
Android Studio Java, Kotlin La pile d’appels (call stack).
intégré, outils de profiling. Android.
Débogueur puissant, intégration avec Développement C/C++, systèmes La possibilité d’exécuter pas à pas (F10 pour passer à la ligne suivante, F11 pour
CLion C, C++
CMake, support pour les projets embarqués. embarqués.
entrer dans une fonction).
Environnement dédié à la statistique et à la Analyse de données, recherche
RStudio R
visualisation de données. académique.
17 18
2.2.4 Utilisation de MATLAB IDE Par exemple, l’instruction binaire 10110000 01100001 pourrait signifier, dans un jeu d’instructions donné,
MATLAB propose un IDE intégré optimisé pour le calcul scientifique. Voici ses principales fonctionnalités: "ajouter le contenu du registre A au registre B". Le CPU décode cette instruction, l’exécute, puis passe
à la suivante.
o Éditeur de code :
Coloration syntaxique pour MATLAB 2.3.2 Les architectures CISC vs RISC
Auto-complétion pour les fonctions et variables
Au fil des années, deux grandes familles d’architectures de processeurs ont émergé : CISC (Complex
Détection d’erreurs en temps réel.
Instruction Set Computing) et RISC (Reduced Instruction Set Computing).
o Workspace :
CISC : Les processeurs CISC, comme ceux de la famille x86 (utilisés par Intel et AMD),
Affiche les variables actuellement en mémoire, avec leur type et leur valeur.
disposent d’un jeu d’instructions complexe et riche. Une seule instruction CISC peut accomplir
Permet de modifier les variables directement depuis l’IDE.
une tâche complexe, comme multiplier deux nombres ou manipuler des chaînes de caractères. Cela
o Command Window :
simplifie la vie du programmeur (ou du compilateur), car moins d’instructions sont nécessaires pour
Permet d’exécuter des commandes MATLAB directement.
accomplir une tâche. Cependant, ces processeurs sont souvent plus lents à exécuter chaque
Affiche les résultats des calculs.
instruction, car celles-ci sont plus complexes à décoder.
o Débogueur :
RISC : Les processeurs RISC, comme ceux de la famille ARM (utilisés dans les
Permet de mettre des points d’arrêt, d’exécuter pas à pas, et d’inspecter les variables.
smartphones et les tablettes), disposent d’un jeu d’instructions réduit et simplifié. Chaque
o Etc.
instruction RISC est très simple et s’exécute en un seul cycle d’horloge. Pour accomplir une tâche
2.3 Le rôle du CPU : un exécutant binaire complexe, il faut donc utiliser plusieurs instructions RISC. Bien que cela puisse sembler moins
efficace, les processeurs RISC sont souvent plus rapides dans l’exécution globale, car chaque
Le CPU (Central Processing Unit), ou processeur, est le cerveau de l’ordinateur. Son rôle est d’exécuter instruction est optimisée pour être exécutée le plus rapidement possible. De plus, leur simplicité
les instructions qui lui sont fournies. Cependant, contrairement à un humain, le CPU ne comprend que le permet une meilleure optimisation du matériel (consommation d’énergie, chaleur, etc.), ce qui
langage binaire, c’est-à-dire des suites de 0 et de 1. Chaque 0 ou 1 représente un bit, et une suite de bits explique leur domination dans les appareils mobiles.
forme une instruction machine.
Exemple concret : Addition de deux nombres
2.3.1 Le jeu d’instruction d’un CPU Supposons que nous voulons additionner deux nombres, 5 et 3, et stocker le résultat dans un registre.
Le CPU est conçu pour reconnaître un ensemble prédéfini d’instructions, appelé jeu d’instructions (ou En assembleur x86 (CISC) :
Instruction Set Architecture, ISA). Ces instructions sont très basiques, comme : MOV EAX, 5 ; Charge la valeur 5 dans le registre EAX
ADD EAX, 3 ; Ajoute 3 au registre EAX (EAX = 5 + 3 = 8)
Charger une valeur depuis la mémoire vers un registre (une petite mémoire ultra-rapide
intégrée au CPU). Ici, une seule instruction ADD suffit pour additionner deux valeurs.
Additionner deux valeurs stockées dans des registres. En assembleur ARM (RISC) :
Comparer deux valeurs et sauter à une autre instruction si une condition est remplie (par MOV R0, #5 ; Charge la valeur 5 dans le registre R0
MOV R1, #3 ; Charge la valeur 3 dans le registre R1
exemple, "si le résultat est égal à zéro, sauter à l’instruction 10"). ADD R2, R0, R1 ; Ajoute R0 et R1, stocke le résultat dans R2
19 20
Ici, il faut trois instructions pour accomplir la même tâche, mais chaque instruction est plus simple
et plus rapide à exécuter. Table 2.1 : Avantages et inconvénients du langage assembleur
2.4 Le langage assembleur : un pont entre l’humain et le CPU Avantages de l’assembleur Inconvénients de l’assembleur
- Plus lisible que le binaire pur, ce qui réduit les - Spécifique à une architecture : un programme en
erreurs. assembleur x86 ne fonctionnera pas sur un
Le langage assembleur est une représentation textuelle des instructions machine. Chaque instruction
- Accès direct au matériel : l’assembleur permet de processeur ARM sans adaptation.
assembleur correspond à une instruction binaire spécifique au jeu d’instructions du processeur. contrôler précisément le CPU, la mémoire, et les - Difficile à maintenir : même avec des
périphériques, ce qui est essentiel pour les mnémoniques, l’assembleur reste peu intuitif pour
Par exemple, l’instruction MOV EAX, 5 (processeur x86) doit être traduite en binaire par un assembleur
systèmes embarqués ou les noyaux de systèmes des programmes complexes.
(un programme qui convertit le code assembleur en code machine). d’exploitation. - Long à développer : écrire un programme de taille
- Performance optimale : comme l’assembleur est moyenne en assembleur prend beaucoup plus de
Bien que le langage assembleur soit beaucoup plus lisible que le binaire, il reste de très bas niveau : très proche du langage machine, les programmes temps qu’avec un langage de haut niveau.
le programmeur doit gérer manuellement des détails comme l’allocation des registres, la gestion de la écrits en assembleur sont extrêmement rapides.
mémoire, etc. C’est pourquoi il est aujourd’hui rarement utilisé pour écrire des programmes complets, sauf
dans des cas très spécifiques (systèmes embarqués, optimisation extrême, etc.). Pourquoi ne programme-t-on plus en assembleur aujourd’hui ?
Exemple de programme en assembleur x86 (addition de deux nombres) : Écrire directement en assembleur est long, fastidieux et source d’erreurs.
section .data De plus, un programme écrit en assembleur pour un processeur x86 ne fonctionnera pas sur un
a dd 5 processeur ARM, car leurs jeux d’instructions sont différents. C’est pourquoi des langages de haut niveau
b dd 3
result dd 0 comme Python, Java ou MATLAB ont été créés : ils permettent aux développeurs de se concentrer sur la
logique du programme plutôt que sur les détails matériels.
section .text
global _start Cas d’usage de l’assembleur aujourd’hui
_start: Bien que l’assembleur soit rarement utilisé pour écrire des applications complètes, il reste indispensable
mov eax, [a] ; Charge la valeur de 'a' dans EAX dans certains domaines :
add eax, [b] ; Ajoute la valeur de 'b' à EAX
mov [result], eax ; Stocke le résultat dans 'result' o Développement de systèmes d’exploitation : les noyaux (comme Linux ou Windows) contiennent
; Terminer le programme des parties écrites en assembleur pour gérer des opérations critiques comme le démarrage du
mov eax, 1 ; Appel système pour quitter (1 = exit) système ou la gestion des interruptions.
xor ebx, ebx ; Code de retour 0
int 0x80 ; Interruption pour appeler le noyau o Programmation embarquée : les microcontrôleurs (comme ceux des cartes Arduino ou des systèmes
industriels) sont souvent programmés en assembleur pour des raisons de performance et de
Ce programme charge deux valeurs en mémoire, les additionne, et stocke le résultat. Chaque instruction
contrôle fin.
est extrêmement basique, mais ensemble, elles accomplissent une tâche utile.
o Optimisation de code : dans les jeux vidéo ou les applications temps réel, certaines parties critiques
(comme les boucles de rendu graphique) peuvent être écrites en assembleur pour maximiser les
performances.
21 22
o COBOL : Conçu pour les applications commerciales, il est encore utilisé aujourd’hui
dans certaines banques et administrations.
2.5 Les langages de haut niveau
4. Langages structurés (années 1970) : Des langages comme C (1972) et Pascal (1970) ont
L’assembleur a permis une première abstraction, mais il restait trop proche du matériel pour être utilisé introduit la programmation structurée, avec des concepts comme les blocs de code, les boucles for
efficacement pour des applications complexes. Les langages de haut niveau ont été créés pour : et while, et les fonctions. Le langage C est particulièrement important, car il a permis d’écrire des
Simplifier la syntaxe : utiliser des mots-clés en anglais (comme if, for, while) au lieu de mnémoniques systèmes d’exploitation comme Unix et Linux, et reste aujourd’hui l’un des langages les plus utilisés
obscurs. pour les applications nécessitant des performances élevées (systèmes embarqués, noyaux de
Être portables : un programme écrit dans un langage de haut niveau peut être compilé ou interprété systèmes d’exploitation, etc.).
sur différentes architectures sans modification. 5. Langages orientés objet (années 1980-1990) : Des langages comme C++ (1985), Java
Gérer automatiquement la mémoire : dans des langages comme Python ou Java, le programmeur (1995) et Python (1991) ont introduit la programmation orientée objet (POO), qui permet de
n’a pas besoin de gérer manuellement l’allocation et la libération de la mémoire (contrairement au C modéliser le monde réel sous forme d’objets (des entités combinant données et comportements).
ou à l’assembleur). Par exemple, en POO, une voiture peut être un objet avec des attributs (couleur, modèle, vitesse)
Offrir des structures de données avancées : tableaux, listes, dictionnaires, objets, etc. et des méthodes (démarrer, accélérer, freiner).
o C++ : Extension du langage C, il ajoute la POO tout en conservant les performances
2.5.1 Les grandes étapes de l’évolution des langages
du C. Il est utilisé pour des applications comme les jeux vidéo (moteurs Unreal Engine), les
1. Langage machine (années 1940-1950) : Les premiers ordinateurs, comme l’ENIAC, étaient navigateurs web (Chrome, Firefox), et les systèmes critiques.
programmés directement en binaire, en connectant manuellement des câbles ou en utilisant des o Java : Conçu pour être portable ("Write Once, Run Anywhere"), Java est compilé
cartes perforées. C’était extrêmement laborieux et réservé à une poignée de spécialistes. en bytecode, qui peut être exécuté sur n’importe quelle machine disposant d’une machine
2. Langage assembleur (années 1950) : L’invention du langage assembleur a marqué un virtuelle Java (JVM). Cela a révolutionné le développement d’applications multiplateformes.
premier pas vers l’abstraction. Les programmeurs pouvaient désormais écrire des instructions sous o Python : Conçu pour être simple et lisible, Python est aujourd’hui l’un des langages
forme textuelle (comme MOV, ADD), qui étaient ensuite traduites en binaire par un assembleur. Cela les plus populaires, notamment grâce à sa syntaxe claire et sa bibliothèque standard riche.
a grandement accéléré le développement de programmes, mais l’assembleur reste très proche du
Il est largement utilisé en data science, intelligence artificielle, automatisation et
matériel. développement web.
3. Langages de haut niveau (années 1950-1960) : Les premiers langages de haut niveau, 6. Langages modernes et spécialisés (années 2000 à aujourd’hui) : Aujourd’hui, il existe des
comme Fortran (1957, pour le calcul scientifique) et COBOL (1959, pour les applications centaines de langages de programmation, chacun adapté à des besoins spécifiques :
commerciales), ont introduit des concepts comme les boucles, les conditions et les fonctions, qui
o MATLAB : Spécialisé dans le calcul scientifique et l’analyse de données, MATLAB
n’existaient pas en assembleur. Ces langages étaient indépendants du matériel : un programme
est largement utilisé en ingénierie, en physique et en mathématiques appliquées. Il permet
Fortran pouvait être compilé pour fonctionner sur différents types de processeurs.
de manipuler facilement des matrices et de visualiser des données.
o Fortran : Conçu pour les calculs mathématiques, il a été utilisé pour des applications
comme la météo ou la physique nucléaire.
23 24
o JavaScript : Langage du web, il permet de rendre les pages web interactives. Avec Performance : Si vous avez besoin de performances maximales (par exemple, pour un jeu
des frameworks comme React ou Angular, il est aujourd’hui utilisé pour développer des vidéo ou un système embarqué), vous utiliserez probablement du C, du C++ ou du Rust.
applications web complexes. Simplicité : Si vous voulez développer rapidement une application sans vous soucier des
o Go : Créé par Google, Go est conçu pour être simple, rapide et concurrent (capable détails matériels, Python ou JavaScript seront des choix judicieux.
de gérer plusieurs tâches en parallèle). Il est utilisé pour des applications comme les Portabilité : Si votre application doit fonctionner sur plusieurs plateformes, Java (avec sa
serveurs web et les outils DevOps. JVM) ou Python (avec son interpréteur multiplateforme) sont idéaux.
o Rust : Langage moderne axé sur la sécurité mémoire et les performances, Rust est Spécificité du domaine : Pour le calcul scientifique, MATLAB ou Python (avec des
de plus en plus utilisé pour des applications critiques comme les systèmes d’exploitation ou bibliothèques comme NumPy) sont incontournables. Pour le développement web, JavaScript est
les navigateurs web. indispensable.
2.5.2 Pourquoi cette évolution ? 2.6 Exemple concret : Calculer la factorielle d’un nombre
L’évolution des langages de programmation répond à plusieurs enjeux :
Prenons un exemple simple : calculer la factorielle d’un nombre (n! = n × (n-1) × ... × 1).
1. Abstraction : Plus un langage est haut niveau, plus il masque les détails matériels,
permettant aux développeurs de se concentrer sur la logique métier plutôt que sur la gestion de la En assembleur x86 (très bas niveau, complexe) :
mémoire ou des registres. section .text
global factorial
2. Portabilité : Les langages de haut niveau sont indépendants du matériel. Un programme
écrit en Python peut fonctionner sur un PC Windows, un Mac ou un serveur Linux sans modification. factorial:
cmp edi, 0
3. Productivité : Les langages modernes offrent des bibliothèques riches et des outils jle .end
puissants (débuggeurs, IDE, etc.) qui accélèrent le développement. push rdi
dec edi
4. Sécurité : Les langages modernes intègrent des mécanismes de sécurité (gestion call factorial
pop rdi
automatique de la mémoire, vérification des types, etc.) pour éviter des erreurs courantes comme imul rax, rdi
les fuites de mémoire ou les dépassements de buffer. .end:
mov eax, 1
5. Performance : Bien que les langages de haut niveau soient généralement moins ret
performants que l’assembleur, des techniques comme la compilation juste-à-temps (JIT) (utilisée
Ce code est difficile à lire et spécifique à l’architecture x86.
par Java et JavaScript) ou l’optimisation du compilateur permettent de réduire cet écart.
En C (bas niveau, mais plus lisible) :
2.5.3 Les compromis : performance vs. Simplicité int factorial(int n) {
if (n <= 0) return 1;
Chaque langage a ses avantages et ses inconvénients, et le choix d’un langage dépend souvent des return n * factorial(n - 1);
contraintes du projet : }
25 26
Ce code est plus lisible, mais il faut encore gérer manuellement des détails comme la gestion Module 3 : Présentation de MATLAB
de la mémoire ou les types de données.
L’objectif de ce premier chapitre est d’introduire les outils nécessaires à l’utilisation de MATLAB.
En Python (haut niveau, simple) :
3.1 La philosophie de MATLAB
def factorial(n):
if n <= 0: Le nom MATLAB provient de MATrix LABoratory. C’est un logiciel qui bien utilisé permet d’effectuer de façon
return 1 relativement efficace des opérations sur des tableaux, des vecteurs ou des matrices.
return n * factorial(n - 1)
La particularité de MATLAB est de manipuler uniquement des variables numériques (pas de calcul formel).
Ce code est extrêmement lisible et concise. Python gère automatiquement la mémoire et les
Par défaut, ces variables sont codées sur 64 bits (double précision) et peuvent contenir jusqu’à 16 chiffres
types de données.
significatifs. Les nombres les plus grands manipulés par MATLAB sont 10306, au-delà de cette limite ils seront
En MATLAB (spécialisé pour le calcul) : considérés comme infini et notés Inf. Réciproquement, les nombres les plus petits sont 10-306, au-delà de
function result = factorial(n) cette limite ils seront considérés comme zéro et notés 0. Lorsqu’une valeur est manquante ou si le résultat
if n <= 0
result = 1; d’un calcul n’existe pas ( par exemple), la variable prendra la valeur NaN.
else
En programmation, la variable la plus commune dans MATLAB est la matrice. C’est un tableau d’éléments
result = n * factorial(n - 1);
end d’un type donnée, par exemple un tableau d’entiers, de réels, de texte, de variables logiques... Le format de
end
la matrice est libre, il se définit par le nombre de lignes et le nombre de colonnes. Une matrice colonne (n
MATLAB offre une syntaxe proche des mathématiques, ce qui le rend idéal pour les calculs lignes et 1 colonne, ou 1 ligne et N colonnes) est appelée vecteur. Dans ce chapitre, nous allons donc
scientifiques. apprendre à définir, à afficher et à réaliser des opérations sur ces matrices.
NB : Durant cette première séance, chaque étudiant devra installer le logiciel MATLAB sur son ordinateur.
2.7 Conclusion
3.2 L’interface de MATLAB
Programmer, c’est communiquer avec une machine en lui fournissant des instructions précises, non Selon la version utilisée, l’interface peut changer légèrement mais les points centraux resteront identiques.
ambiguës et structurées. Ces instructions, appelées algorithmes, sont traduites en programmes à l’aide de 3.2.1 La fenêtre de commande (Command Window)
langages de programmation, qui servent d’intermédiaire entre l’humain et le CPU. C’est le terminal dans lequel on doit taper les commandes et sur lequel on verra l’affichage des résultats.
Le CPU, lui, ne comprend que le binaire, et exécute des instructions selon un jeu d’instructions prédéfini Une ligne commence toujours par >>. Essayez la commande suivante :
(CISC ou RISC). Les langages de programmation ont évolué pour simplifier cette communication, en passant >> 1+1
de l’assembleur aux langages de haut niveau comme Python ou MATLAB. Chaque langage a ses avantages Et comparer à la commande :
(simplicité, portabilité, performance) et ses inconvénients (complexité, dépendance au matériel, lenteur), et >> 1+1;
le choix d’un langage dépend des contraintes du projet. Deux points sont à noter ici. Le premier est que MATLAB définit une variable ans, lorsque l’on effectue un
Aujourd’hui, les développeurs n’ont plus besoin de se soucier des détails matériels pour écrire des calcul. Cette variable (qui veut dire answer/réponse), s’affiche sur le terminal lorsque l’on omet le signe le
programmes complexes. Cependant, comprendre comment une machine exécute du code reste essentiel point-virgule en fin de ligne.
pour optimiser les performances, déboguer des erreurs ou choisir le bon langage pour une tâche donnée. Une seconde commande utile est clc. Cette commande permet de vider la fenêtre de commande pour repartir
sur une fenêtre propre.
27 28
Le second (USERPATH) est un unique dossier qui est propre à l’utilisateur lors d’une session. Il est fortement
conseillé de définir le USERPATH, immédiatement lorsque l’on commence une session MATLAB. Le fichier
diary par exemple est sauvé dans le USERPATH. La ligne de commande suivante permet de définir
3.2.2 L’espace de travail (Workspace) le USERPATH :
Dans cette fenêtre, on obtient la liste des variables connues par MATLAB. Il est possible de double-cliquer >> newpath = ’C:\Research_Project;
sur une variable pour l’afficher. Un clic-droit sur les variables offre de nombreuses options telles que: Copier, >> userpath(newpath)
Coller, Supprimer, etc. Le current folder affiche donc le contenu du USERPATH. On peut tester la commande addpath pour ajouter
3.2.3 L’historique de commande (Command History) un répertoire au PATH.
Lorsque l’on effectue une analyse de données sur les résultats d’une expérience, il est essentiel de conserver 3.2.5. L’éditeur (Editor)
une trace de toutes les opérations qui ont été réalisées. C’est la base de la traçabilité et de la reproductibilité La plupart de votre travail sous MATLAB va consister à créer ou modifier des fichiers .m (suffixe standard
des résultats scientifiques. Il est possible de cliquer sur une commande dans cette fenêtre pour l’exécuter à pour les procédures MATLAB). Lorsque l’on réalise une tache sous MATLAB, il est très souvent possible de
nouveau. On peut également remonter dans la liste de commandes en se plaçant dans la fenêtre de le faire en utilisant uniquement la Command Window. Cependant lorsque cette tache devient plus complexe
commande et en pressant les flèches de direction. MATLAB est également capable de remonter dans la liste (plusieurs dizaines de ligne de code) ou que l’on souhaite pouvoir la transmettre à quelqu’un d’autre
de commandes en ne prenant en compte que les commandes qui commencent par certains caractères. Si simplement, on utilise la fenêtre Editor. On crée un fichier .m qui peut être au choix un script ou une fonction
l’on recherche une commande que l’on a entré précédemment, on peut taper le début de cette commande (function en anglais). Un script est une suite de commande que l’on aurait tout aussi bien pu taper dans la
puis la flèche du haut et MATLAB cherchera uniquement parmi les commandes ayant le même début. Par Command Window. Une fonction permet d’étendre les possibilités au-delà des fonctions préprogrammées
ailleurs, il est parfois important d’enregistrer dans un fichier indépendant la liste des commandes utilisées. par les développeurs de MATLAB.
Pour ce faire on utilise : Par exemple, on pourra réaliser une fonction racineplus2(input) qui à un paramètre d’entrée "input" va
>> diary filename retourner la valeur 𝑖𝑛𝑝𝑢𝑡 + 2. Pour créer un fichier .m, on peut soit utiliser les menus contextuels, soit
Cette commande va créer un fichier "filename" qui enregistrera toutes les commandes entrées jusqu’à ce entrer la commande :
que l’on utilise : >> edit FileName.m.
>> diary off On entre ensuite le code suivant :
3.2.4 Le répertoire de travail (Current Folder) >> function [output] = racineplus2(input)
La commande diary a permis de créer un fichier. Cependant, où MATLAB va-t-il stocker ces données ? Il est >> output=sqrt(input+2);
très important de bien maitriser ce point si l’on souhaite ne pas se perdre dans l’ensemble des fichiers >> end
auxquels nous allons faire appel via MATLAB. MATLAB définit ce qui s’appelle le PATH (chemin) qui 3.3 Arithmétique et opérations sur les scalaires
représente les dossiers dans lesquels MATLAB va chercher lorsque l’on appelle une commande. Le PATH Avant de commencer, je conseille d’utiliser les trois commandes suivantes : clc pour nettoyer l’écran, clear
est divisé en deux sous-parties : le MATLABPATH et le USERPATH. all pour supprimer toutes les variables créées auparavant, et close all pour fermer toutes les fenêtres inutiles.
La commande suivante permet d’afficher le MATLABPATH : Les quatre opérations élémentaires sont disponibles : addition +, multiplication *, soustraction – et division /.
>> path On peut également utiliser les fonctions trigonométriques, puissance, logarithmiques, etc. Voici une liste (non
exhaustive) des fonctions incorporées dans MATLAB :
29 30
exp(x) : exponentielle de x Opérateurs logiques
log(x) : logarithme népérien de x Opérateur Description Exemple
log10(x) : logarithme en base 10 de x && ET logique (5 > 3) && (2 < 4)
xˆn : x à la puissance n || OU logique (5 > 3) || (2 > 4)
sqrt(x) : racine carrée de x ~ NON logique ~(5 == 3)
31 32
Les noms de variables doivent respecter certaines règles : disp('Bien');
elseif note >= 50
o ils doivent commencer par une lettre (ou un underscore "_")
disp('Passable');
o ils ne doivent pas contenir d’espaces ni de caractères spéciaux (sauf `_`) else
disp('Insuffisant');
o ils ne doivent pas être des mots-clés réservés comme `for`, `if` ou `end`.
end
MATLAB permet également de déclarer plusieurs variables en une seule ligne en les séparant par des
3.6.2 Boucles (for et while)
virgules, par exemple : `a = 1, b = 2, c = 3`.
Pour afficher la valeur d’une variable dans la fenêtre de commande, il suffit de taper son nom sans point- Les boucles en MATLAB permettent de répéter un bloc de code plusieurs fois.
virgule (`;`). Si l’instruction se termine par un point-virgule, MATLAB exécute la commande mais n’affiche Boucle for
pas le résultat. La boucle for est utilisée pour itérer sur une séquence (vecteur, matrice, etc.)
Enfin, pour effacer une variable de l’espace de travail, on utilise la commande "clear nom_variable", ou
Exemple de base :
"clear all" pour tout supprimer. Cette flexibilité fait de MATLAB un outil puissant pour le prototypage rapide
for i = 1:5
et les calculs scientifiques. disp(i); % Affiche 1, 2, 3, 4, 5
3.6 Les structures répétitives et conditionnelles dans MATLAB end
En algorithmique, les structures conditionnelles (comme si...alors...sinon) et les structures répétitives Itérer sur un tableau :
(comme pour, tant que) sont essentielles pour contrôler le flux d’exécution d’un programme. MATLAB, en fruits = {'pomme', 'banane', 'cerise'};
tant que langage de programmation haut niveau, permet de traduire ces concepts de manière intuitive et for fruit = fruits
disp(fruit{1}); % Affiche chaque fruit
efficace. end
Boucle while
3.6.1 Conditions (if/elseif/else)
La boucle while répète un bloc de code tant qu'une condition est vraie.
Les structures conditionnelles en MATLAB permettent d'exécuter du code en fonction de la vérification
d'une condition. Exemple de base :
33 34
Utilisation de break et continue : Bloc otherwise (non applicable en MATLAB)
break : Sort immédiatement de la boucle. MATLAB n'a pas de bloc else ou finally comme Python, mais on peut utiliser un try/catch suivi d'un code
continue : Passe à l'itération suivante. après le bloc pour simuler un finally :
35 36
Fonctions pour les chaines Fonctions utiles pour les tableaux :
En MATLAB, les tableaux (ou arrays) sont des structures de données ordonnées et modifiables. Ils peuvent
Boucler sur un tableau :
contenir des éléments de même type (par défaut).
tableau = [1, 2, 3];
tableau = [1, 2, 3, 4, 5]; % Tableau ligne
for element = tableau
tableau_colonne = [1; 2; 3; 4; 5]; % Tableau colonne
disp(element);
tableau_mixte = [1, 2, 3; 4, 5, 6]; % Matrice 2x3
end
Accéder aux éléments :
Création de tableaux avec des compréhensions (équivalent en MATLAB) :
Les tableaux sont indexés à partir de 1 (contrairement à Python).
MATLAB n'a pas de compréhensions de liste comme Python, mais on peut utiliser des boucles ou des
tableau = [10, 20, 30, 40];
fonctions vectorisées :
disp(tableau(1)); % Affiche 10
% Carrés des nombres de 1 à 5
disp(tableau(end)); % Affiche 40 (dernier élément)
carres = (1:5).^2; % [1, 4, 9, 16, 25]
Slicing :
% Nombres pairs de 1 à 10
disp(tableau(2:3)); % Affiche [20, 30] (de l'index 2 à 3)
pairs = 2:2:10; % [2, 4, 6, 8, 10]
disp(tableau(1:2:end)); % Affiche [10, 30] (un élément sur deux)
3.7 Bonnes pratiques
En MATLAB, il est souvent possible d’éviter les boucles explicites (for, while) en utilisant des
opérations vectorisées, ce qui rend le code plus concis et plus rapide. Par exemple, la somme des entiers
de 1 à n peut être calculée sans boucle :
somme = sum(1:n);
Cependant, pour bien maîtriser MATLAB, il est important de comprendre comment implémenter les
structures algorithmiques classiques, car elles restent utiles pour des logiques complexes ou des traitements
itératifs personnalisés.
37 38
3.8 Exercices de prise en main de MATLAB Module 4 : Présentation de Python
Effectuer les calculs suivants sur MATLAB.
4.1 Installer Python
i. Calculer le volume 𝑉 = 𝜋𝑅 où R=4cm. (NB : 𝑝𝑖 = 𝜋).
ii. Ecrire une fonction qui retourne le volume et le périmètre d’une sphère de rayon R=10 m. Python est un langage de programmation open-source, disponible gratuitement. Voici comment l'installer :
iii. Soit un étang de dimensions : longueur=10 m, largeur=6m, profondeur=3,5m. Calculer le volume et la Sur Windows/macOS/Linux :
masse d’eau contenu dans l’étang si celui est rempli aux 2/3. o Téléchargez la dernière version de Python depuis le site officiel ([Link]/downloads/).
iv. Que produit selon vous la commande >> M=[1,2,3;4,5,6;7,8,9] ? Vérifiez votre hypothèse. Testez l’effet
o Exécutez l'installateur et suivez les instructions.
de la commande M(2,3).
o Important : Cochez l'option "Add Python to PATH" pendant l'installation pour pouvoir utiliser
3 𝜋
v. Construisez les matrices 𝐴 = −1 et 𝐵 =
4 5 6 Python depuis le terminal.
2
−1 −2 −3
5 10 o Vérifiez l'installation en ouvrant un terminal (ou CMD sous Windows) et tapez : python --version
vi. Construisez en une seule ligne un vecteur ligne contenant les carrés de tous les multiples de 3 compris
entre 0 et 100. 4.2 Installer un IDE (Wing)
En Python, une variable est un espace mémoire qui stocke une valeur. Contrairement à d'autres langages,
Python est dynamiquement typé : il n'est pas nécessaire de déclarer le type d'une variable.
Déclaration et affectation :
39 40
age = 25 # Entier (int) Opérateurs logiques
taille = 1.75 # Nombre à virgule flottante (float)
est_etudiant = True # Booléen (bool) Opérateur Description Exemple
and ET logique (5 > 3) and (2 < 4)
Règles de nommage :
or OU logique (5 > 3) or (2 > 4)
o Les noms de variables doivent commencer par une lettre ou un underscore (_). not NON logique not (5 == 3)
o Ils peuvent contenir des lettres, des chiffres et des underscores.
4.3.3 Conditions (if/else)
o Ils sont sensibles à la casse (age ≠ Age).
Les structures conditionnelles permettent d'exécuter du code en fonction de la vérification d'une condition.
o Évitez les mots-clés réservés (if, for, while, etc.).
Structure de base :
Affichage d'une variable : if condition:
# Code exécuté si la condition est vraie
print(nom) # Affiche "Alice" print("Condition vraie")
else:
4.3.2 Opérateurs # Code exécuté si la condition est fausse
print("Condition fausse")
Python propose plusieurs types d'opérateurs pour manipuler les variables.
Exemple avec elif :
Opérateurs arithmétiques
note = 85
Opérateur Description Exemple if note >= 90:
print("Excellent")
+ Addition 5+3 elif note >= 70:
print("Bien")
- Soustraction 5-3
elif note >= 50:
* Multiplication 5*3 print("Passable")
else:
/ Division 5/3
print("Insuffisant")
// Division entière 5 // 3
Opérateur ternaire (pour les conditions simples) :
% Modulo (reste) 5 % 3
result = "Pair" if nombre % 2 == 0 else "Impair"
** Puissance 5 ** 3
Opérateurs de comparaison 4.4.4 Boucles (for et while)
Opérateur Description Exemple Les boucles permettent de répéter un bloc de code plusieurs fois.
== Égal à 5 == 3
Boucle for
!= Différent de 5 != 3
> Supérieur à 5>3 La boucle for est utilisée pour itérer sur une séquence (liste, chaîne de caractères, etc.).
< Inférieur à 5<3 Exemple de base :
>= Supérieur ou égal à 5 >= 3 for i in range(5): # range(5) génère 0, 1, 2, 3, 4
<= Inférieur ou égal à 5 <= 3 print(i)
41 42
print(fruit) Gérer plusieurs types d'erreurs
Utilisation de range avec des paramètres try:
valeur = int(input("Entrez un nombre : "))
for i in range(2, 6): # Génère 2, 3, 4, 5 resultat = 10 / valeur
print(i) except ValueError:
print("Erreur : Ce n'est pas un nombre valide !")
Boucle while except ZeroDivisionError:
print("Erreur : Division par zéro !")
La boucle while répète un bloc de code tant qu'une condition est vraie. except Exception as e:
print(f"Une erreur inattendue est survenue : {e}")
Exemple de base :
4.5.2 Bloc else et finally
compteur = 0
while compteur < 5:
print(compteur) o else : Exécuté si aucune erreur ne se produit.
compteur += 1 # Équivalent à compteur = compteur + 1
o finally : Exécuté dans tous les cas, qu'il y ait une erreur ou non.
Boucle infinie (à éviter !) : try:
resultat = 10 / 2
while True: except ZeroDivisionError:
print("Ceci est une boucle infinie !") print("Division par zéro !")
# Utilisez 'break' pour sortir de la boucle else:
break print(f"Résultat : {resultat}") # Exécuté si aucune
erreur
Utilisation de break et continue : finally:
print("Fin du bloc try-except") # Toujours exécuté
o break : Sort immédiatement de la boucle.
4.6 Chaînes et listes
o continue : Passe à l'itération suivante.
for i in range(10): 4.6.1 Les chaînes de caractères
if i == 5:
break # Sort de la boucle quand i = 5
if i % 2 == 0:
Une chaîne de caractères (ou string) est une séquence de caractères entourée de guillemets simples (')
continue # Passe à l'itération suivante si i est pair ou doubles (").
print(i)
Déclaration :
4.5 Gestion des erreurs
chaine1 = "Bonjour"
chaine2 = 'Python'
4.5.1 try / except Accéder aux caractères :
En Python, les erreurs (ou exceptions) peuvent être gérées grace à des blocs try et except. Cela permet Les chaînes sont indexées (le premier caractère est à l'index 0).
d'éviter que le programme ne plante et de fournir un message d'erreur personnalisé. chaine = "Python"
print(chaine[0]) # Affiche 'P'
Structure de base print(chaine[-1]) # Affiche 'n' (dernier caractère)
43 44
Méthodes utiles pour les chaînes :
Une liste est une structure de données ordonnée et modifiable qui peut contenir des éléments de types
différents.
Déclaration :
liste = [1, 2, 3, "quatre", 5.0, True]
Slicing
print(liste[1:3]) # Affiche [20, 30]
45 46
Module 5 : Exercices de programmation Ecrire un algorithme et un programme qui demande à l’utilisateur un nombre compris entre 1 et 3 jusqu’à ce
que la réponse convienne.
Exercice 1
Exercice 9
Écrire un algorithme (sous forme de langage structuré et sous forme d’organigramme) et un programme qui
affiche le cube d’un nombre réel saisi au clavier. Ecrire un algorithme et un programme qui demande un nombre compris entre 10 et 20, jusqu’à ce que la
réponse convienne. En cas de réponse supérieure à 20, on fera apparaître un message : « Plus petit ! », et
Exercice 2 inversement, « Plus grand ! » si le nombre est inférieur à 10.
Écrire un algorithme et un programme qui permute la valeur de deux variables c1 et c2 de type caractère. Exercice 10
Exercice 3 Ecrire un algorithme et un programme qui demande un nombre de départ, et qui ensuite affiche les dix
nombres suivants. Par exemple, si l'utilisateur entre le nombre 17, le programme affichera les nombres de
Écrire un algorithme et un programme qui lit une valeur entière au clavier et affiche « paire » si elle est paire.
18 à 27.
Exercice 4
Exercice 11
Étant données deux valeurs réelles lues au clavier, afficher à l’écran la plus grande des deux.
Ecrire un algorithme et un programme qui demande un nombre de départ, et qui calcule la somme des entiers
Exercice 5 jusqu’à ce nombre. Par exemple, si l’on entre 5, le programme doit calculer :
Écrire un programme qui demande à l’utilisateur de saisir un caractère et qui affiche "affirmatif" si le caractère 1 + 2 + 3 + 4 + 5 = 15
est un « o » (minuscule ou majuscule), "négatif" si c’est un « n » (minuscule ou majuscule) et "? ! ? ! ? ! ?" NB : on souhaite afficher uniquement le résultat, pas la décomposition du calcul.
dans les autres cas.
Exercice 12
Exercice 6
Ecrire un algorithme et un programme qui demande un nombre de départ, et qui calcule sa factorielle. NB :
Calculer la somme des n premiers entiers. la factorielle de 8, notée 8 !, vaut 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8.
Exercice 7
Écrire un algorithme et un programme qui affiche la somme des n premiers entiers naturels, n étant un entier
saisi au clavier. L’algorithme devra proposer la possibilité à l’utilisateur de recommencer le calcul pour un
autre entier.
Exercice 8
47 48