Vous êtes sur la page 1sur 57

CPGE AGADIR Cours de la

premire anne
CPGE (MPSI, PCSI,
TSI)

khalid labhalla
Cours de la premire anne CPGE (MPSI, PCSI, TSI)

Programme de la premire anne


(MPSI, PCSI, TSI)
Le programme de la premire anne est divis en 3 parties (I, II et III)

Partie I : Gnralits et algorithmique de base


Composants de base:
Ordinateur, Processeur, mmoire vive, mmoire de masse, unit centrale, priphriques
Reprsentation de donnes dans la mmoire :
Types de donnes (nombres ou caractres)
Systme binaire
Reprsentation des nombres entiers en mmoire (nombre positif ou ngatif, bit de signe, nombre non
sign)
Reprsentation des nombres rels en mmoire (mantisse et exposant, dfinition de lcriture en virgule
flottante normalise)
Codage et reprsentation des caractres (code ASCII, UTF8, UTF16, Unicode)
Algorithmique de base
Dfinitions
Algorithme et programme,
Langage de programmation,
Interprteur et compilateur.
Elments de base dun algorithme
Variables et constantes
Types simples (entier, flottant, caractre)
Affectation
Entres / sorties standards et fonctions de la bibliothque.
Oprateurs et les expressions : Les oprateurs arithmtiques et logiques, les expressions.
Structures de contrle
Les instructions de choix (la slection logique),

Les instructions ditration ou de rptition (les boucles).

Dmarche danalyse descendante


Principe de la dmarche
Affinements successifs
Modlisation.

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 1


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

Analyser une situation


Spcifier et modliser
Vrification du code
Invariants de boucle
Tests des segments itratifs
Estimation de la complexit d'un calcul

Partie II: Algorithmique et programmation


Programmation modulaire
Dfinition et paramtres de fonction
Variable locale et variable globale
Structures de donnes et leurs utilisations
Tableaux une dimension (reprsentation, accs aux lments)
Chanes de caractres (longueur, accs un caractre)
Tris et recherche dichotomique dans un tableau (tri par slection, tri par insertion, tri bulles, )
Tableaux 2 dimensions (oprations sur les matrices)
Listes (dfinition, ajout, suppression, recherche dans une liste)
Piles et files.
Fichiers de donnes
Accs un fichier (chemin et nom physique de fichier)
Lecture des lments dun fichier partir dun programme
Ecriture dans un fichier partir dun programme

Partie III : Ingnierie numrique et simulation


Prsentation des bibliothques
Programmation de quelques fonctions.
Calcul manipulant les tableaux et calcul matriciel
Gestion de la documentation en ligne des fonctionnalits de ces bibliothques.
Mthodes linaires une dimension
Rsolution d'quation algbrique
Mthode de dichotomie
Mthode de Newton
Problmes dynamiques une dimension
Rsolution approche d'une quation diffrentielle
Mthode d'Euler
Problmes discrets multidimensionnels linaires
Rsolution d'un systme linaire inversible l'aide de la mthode de Gauss

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 2


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

Calcul de complexit pour dterminer un temps d'excution afin de savoir si le calcul est envisageable.

Chapitre 1 : Gnralits

I. Structure dun ordinateur


A. Dfinition :
Lordinateur est un quipement lectronique de traitement automatique de linformation

B. Schma fonctionnel dun ordinateur


Un ordinateur est en gnral constitu d'une unit centrale entoure de priphriques.

C. Lunit centrale de traitement :


Lunit centrale contient principalement les composants suivants :
Le processeur
La mmoire centrale
1. Le processeur : (microprocesseur)
Le processeur, en anglais CPU (Central Processing Unit) est un composant lectronique trs sophistiqu et trs
miniaturis, cest le cerveau de lordinateur, il est compos de 2 units :
L'unit arithmtique et logique : (UAL, ou ALU en anglais) Permet deffectuer des oprations arithmtiques et
logiques
L'unit de commande : son principal rle consiste. extraire, interprter et excuter les instructions dun
programme.
2. Mmoire centrale
Contient principalement les instructions des diffrents programmes et les donnes ncessaires lexcution de ces
programmes. Dans la mmoire centrale on distingue deux types de mmoires :

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 3


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

a) Mmoire vive
Appele aussi RAM (Random Access Memory, mmoire accs alatoire). Cest la mmoire de travail de lordinateur, elle
permet un stockage provisoire des donnes et des programmes en cours dexcution, elle sefface compltement aprs
une coupure de courant (mmoire volatile).
b) Mmoire morte
Appele aussi ROM (Read Only Memory, mmoire en lecture seule) Elle contient le BIOS (Basic Input Output System)un
programme important au dmarrage de lordinateur quil ne faut pas modifier, elle ne s'efface pas lors de la mise hors
tension du systme (mmoire non volatile)

D. Les priphriques :
Les priphriques servent comme interface de communication entre lutilisateur et lordinateur.

II. Reprsentation de linformation


Une information peut tre sous plusieurs formes : (texte, nombre, image, son, vido, ). Lordinateur reprsente et
manipule les informations sous forme binaire. Cest dire comme une suite de 0 ou de 1.
Le langage utilis est appellangage Binaire.
Llment binaire qui peut prendre deux valeurs 0 ou 1 est appel le Bit (BInary Digit)
1 o (octet) = 8Bits
1 Ko (Kilo Octet) = 1024 o
1 Mo (Mga Octet) = 1024 Ko
1 Go (Giga Octet) = 1024 Mo
1 To (Tra Octet) = 1024 Go
Le codage dune information consiste convertir la reprsentation externe (A ou 36,) en langage binaire.

A. Reprsentations des entiers naturels


1. Conversion Dcimale Binaire
Pour passer du dcimal au binaire, on effectue des divisions successives du nombre convertir sur 2 jusqu obtenir un
quotient nul.
Puis on constitue le nombre binaire correspondant en lisant la suite des restes (0 et 1) de bas en haut.
Exemple
34 2
0 17 2
1 8 2
0 4 2
0 2 2
0 1 2
1 0
(34)10 = (100010)2
Exercice :Convertir les nombres suivants en binaire : 3, 15, 27, 286
2. Conversion Binaire Dcimale
Pour convertir du binaire au dcimal on effectue des multiplications de chaque binaire par 2. La puissance son indice. Les
indices dbutent par 0 et de droit gauche.

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 4


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

Exemple
1 0 0 0 1 0 = 0x20 + 1x21 + 0x22 + 0x23 + 0x24 + 1x25
=0 + 2 +0 + 0 + 0 + 32= 34
(1000010)2=(34)10
Exercice :Convertir les nombres suivants en dcimal : 1010, 1001, 101101, 111000, 1001100101
3. Conversion Dcimale Hexadcimal
La conversion dun nombre dcimal en hexadcimal ce fait par divisions successives de 16
Exercice :Convertir en hexadcimal les nombres dcimaux suivants : 728, 126, 1024, 543
4. Conversion Hexadcimal. Dcimale
Elle se fait par la multiplication successive de 16 au lieu de 2 dans le cas binaire
Exercice :Convertir en dcimal les nombres hexadcimaux suivants : 128, 3C5, 9AE0, B3F
5. Conversion Binaire Hexadcimal
Pour passer du binaire lhexadcimal en dcomposant le nombre binaire en bloc de 4 bits et en restituant sa valeur
hexadcimale chacun de ses blocs
Exemple :

6. Conversion HexadcimalBinaire
Ce passage se fait de la mani.re inverse c.--d. en convertissant les chiffres qui composent le nombre
Hexadcimal en leurs quivalents binaires sur 4 bits
Exemple :

Exercice :
Convertir les nombres suivants :
De binaire au hexadcimal : 101001101, 11001110100, 110000101100
De hexadcimal au binaire : 5CFE, 05ABD, 3D
B. Reprsentation d'un entier ngatif
1. Mthode 1
Cette mthode consiste utiliser le bit du poids fort (le premier gauche) pour reprsenter le signe.
Exemple :
o +82 cod sur un octet : 01010010
o -82 cod sur un octet avec la mthode du bit de signe : 11010010
Comparer les deux nombres (les deux nombres sont prsents sur un octet) : 00000000 et 10000000
Les deux reprsentations prsente 0 sur un octet!!!
Pour ce raison la mthode du bit de signe seul n'est (presque) plus utilise.
2. Mthode 2
Cette mthode un peu plus efficace consiste, pour coder -n, prendre le complment un du codage de n, c'est dire de
remplacer chaque 0 par un 1 et inversement, puis on ajoute un.
Exemple :
o +82 cod sur un octet : 01010010

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 5


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

o complment un de +82 sur 1 octet : 10101101


o En ajoutant un : 10101110 (complment 2)
o Finalement -82 sur 1 octet: 10101110
Exercice :Convertir les nombres suivants en binaire : -3, -15, -27, -286

C. Reprsentation des nombres rels (ou virgule)


1. Mthode 1 : ( virgule fixe)
On veut reprsenter (5,375)10 en base 2
5,375=5+0,375
On a (5)10=(101)2
Pour 0,375 sera reprsent comme suite :
0. 375 x 2 = 0.75
0.75 x 2 = 1.5
0.5 x 2 = 1.0
0.375 = 0.011
Donc (5,375)10 =(101,011)2
2. Mthode 2 ( virgule flottante)
Le bit le plus gauche (bit de poids fort) reprsente, comme pour les nombres signs, le signe du nombre
Obtenir la reprsentation du nombre virgule fixe puis transforme le sous la forme 1,XXXX * 2^n (la reprsentation
normalise).
L'exposant 2^n obtenu prcdemment doit tre cod sur un octet, on lui ajoute 127, ce qui permets d'obtenir
des exposants ngatifs et positifs.
L'ensemble des nombres se situant aprs la virgule, aussi appell la mantisse, est cod sur les 23bits restants. Il
contient la partie dcimale de la reprsentation normalise prcdemment calcule complte avec des 0 jusqu'
obtenir les 23bits requis.
Le fait d'ajouter 127 l'exposant permet de dterminer facilement si l'exposant est ngatif ou positif, en effet si l'exposant
nouvellement calcul est suprieur 127, il s'agit d'un exposant positif, sinon il sera ngatif
Exemple : on veut reprsenter -5,25
La reprsentation virgule fixeest : 101,01
La forme normalise sera : 1,0101* 22
On ajoute 127 lexposant n=2 : (127+2)10=(129)10=(10000001)2
Ensuite, nous obtenons la mantisse en abandonnant la partie entire de 1,0101 ce qui nous laisse : 0101
La mantisse doit couvre 23 bits. On doit donc complter avec des 0 : 01010000000000000000000
La reprsentation binaire de -5,25 est donc:11000000101010000000000000000000

Exercices: Signe Lexposant La mantisse


1. Quelle est la reprsentation binaire de chaque nombre dcimale suivants :3.15 ; -123.75; 6.125
2. Quelle est la valeur dcimale des reprsentations binaires suivantes :
a. 1 10000010 11110110000000000000000
b. 01000000111100000000000000000000
c. 11000010000011100000000000000000
d. 0 10000010 11000000000000000000000
D. Reprsentations des caractres
Les caractres englobent : les lettres alphabtiques ( A,a,B,b,), les chiffres, et les autres symboles (> , ; / , : ).

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 6


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

Le premier codage largement rpandu est lASCII (American Standard Code for Information Interchange). Dans ce codage
chaque caractre est reprsent sur 7 bits.
Donc 27=128 combinaison possibles chaquecombinaison reprsente uncaractre.
Exemple
Le code (41)16 (01000001)2 correspond au caractre A
Le code (61)16 (01100001)2 correspond au caractre a
Le code 58 (01100001)2 correspond au caractre :
1. La table code ASCII

2. Code ASCII tendu

3. Le code UNICODE
Le code Unicode est un systme de codage des caractres sur 16 bits mis au point en 1991. Le systme Unicode permet
de reprsenter n'importe quel caractre par un code sur 16 bits (216=65 536 caractres), indpendammentde tout systme
d'exploitation ou langage de programmation.
4. UNICODE avantages et inconvnients :
UNICODE peut coder nimporte quel caractre pour toutes les langues qui existe

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 7


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

Pour Unicode, un caractre prend 2 octetsc.--d. un texte prend deux fois plus de place qu'en ASCII. C'est du
gaspillage.
5. Prolongement
Le codage UTF-8, UTF-16

Chapitre 2 : Algorithme de base


I. Dfinitions
A. Algorithme et programme
Unalgorithmeestunesuitedactions(ouinstructions)finie quidoiventtreexcut
dansunordrebiendterminpourrsoudreunproblme

Un algorithme n'est excutable directement par aucune machine. Mais il a peut tre traduit facilement dans
tous les langages de programmation pour produire un programme (La phase de programmation)
Pour rsoudre un problme, il est conseill de rflchir d'abord l'algorithme avant d'crire le programme
en langage de programmation.

B. Langage de programmation
Unlangagedeprogrammationdestine formuler des algorithmes et produire des programmesinformatiques

Exemples des langages de programmation :

Langage de programmation de bas niveau (plus proche au langage machine) : Assembleur


Langage de programmation de haut niveau : Python (enseign en CPGE), C, C#, Java, PHP.

C. Compilation et interprtation
1. La compilation
La compilation est loprationcharg de traduireun programme crit dans un langage source (langage de haut niveau) dans un
langage machine (langage binaire)

2. Linterprtation
Dans linterprtation chaque ligne du programme source analys est traduite au fur et mesure en quelques instructions du langage
machine, qui sont ensuite directementexcutes. Aucun programme objet n'est gnr.

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 8


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

3. Compilation Vs interprtation
En gnral, un interprte est beaucoup plus facile raliser qu'un compilateur.
En terme de temps, la compilation est une opration beaucoup plus lente que le chargement d'un programme dans un
interprte, mais l'excution d'un programme compil est beaucoup plus rapide que celle d'un programme interprt.
Le compilateur ne peut dtecter des erreurs dans le programme qu' partir d'une analyse statique : en examinant le
programme sans le faire tourner. Un interprte pourra aussi dtecter des erreurs de faon dynamique, lors de l'excution
du programme.
4. Compilateur + interprtes
Certains langages modernes tentent de combiner les deux techniques afin de retirer le meilleurde chacune. C'est le cas
de Python et aussi de Java. Lorsque vous lui fournissez un programmesource, Python commence par le compiler pour
produire un code intermdiaire, similaire un langage machine, que l'on appelle bytecode, lequel sera ensuite transmis
un interprteur pour l'excution finale. Du point de vue de l'ordinateur, le bytecode est trs facile interprter en
langage machine. Cette interprtation sera donc beaucoup plus rapide que celle d'un code source.

II. Elment de base dun algorithme


A. Structure dun algorithme
Algorithme nomAlgorithme
Variables
Var1 : type1

Varn : typen
Dbut
Instruction 1

Instruction n
Fin
B. Variables et constantes
Les variables et les constantes sont desdonnes utilises par lalgorithme.Ces donnessecaractrisentpartroisattributs :
Identificateur :Lenom deladonne.
Lavaleur :Lecontenudeladonne
Letype:Lensembledesvaleursquepeutprendreladonne.
1. Lesvariables :
Unevariableestune zone mmoire dontlavaleurpeutchangeraucoursdelexcutionde lalgorithme.
2. Lesconstantes :
Une constante est aussi une zone mmoire (comme les variables) sauf quelles gardent toujourslammevaleur au cours de
lexcution de programme.
3. Typededonnes
Typeentier :ladonneprenddesvaleursentirescomme:-54,-2,0,60,100,
Typerel(flottant):ladonneprenddesvaleursrellescomme:-105, -0.0002,3,4.2103,
Typecaractre:ladonneprenddesvaleurscomme:A,b,&,+,3,?,

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 9


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

Typechanedecaractres:ladonneprendcommevaleursun ensembledecaractres
comme:bonjour,bob3,s@mir
Typeboolen:ladonnene peutprendrequeles valeurssuivantes :vraietfaux

C. Les oprations de base


1. Laffectation
Une affectationestlattributiondunevaleur unevariable
Syntaxe:
nomVariableexpression
Exemple
X20
Y X
SomX + Y
XX + 3
Exercices
1. Quellessontles valeursdesvariablesaprslexcutiondesoprationssuivantes.
A5 X"009"
B 10 Y "10/2"
CA+B X Y+X
A B Y "11/"
B A X Y+X
A= B= C= X=
2. X,Ydeuxvariablesdetypeentier,crireunesuitedinstructionsqui permettentdemettrelecontenudeXdans Y etcelui
deYdansX (permutation).
2. Lesentres/sortiesstandards
Onles appels aussiinstructionsdelecture/criture,ellespermettentdassurerlacommunicationentreleprogramme
etlutilisateur.
a) Linstructiondentre
Linstruction dentre autorise lintroductiondune valeur dans un algorithme.

Syntaxe:Lire(nom_variable)
Exemple: lire(a)
b) LinstructiondEcriture
Linstructiondcriturepermetdafficher un rsultatoulavaleurdunedonne.

Syntaxe:Ecrire(nom_variable)
Exemple: Ecrire(a)
Ecrire("bonjour")
Ecrire("a=",a)
3. Exercices
1. EcrireunalgorithmequidemandedeuxentiersAetBlutilisateuret qui afficheleur sommeS
2. EcrireunalgorithmequipermetdecalculerleprixTTC,sachantleprixHTetletaux deTVA (20%)
3. Ecrire un algorithme qui permet de rsoudre une quation de premier degr (ax+b=0)
4. Les oprateurs et les expressions
a) Les oprateurs arithmtiques
+ pour laddition
- pour la soustraction

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 10


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

* pour la multiplication
/ pour la division rel (3/2=1.5)
DIV pour la division entire (3 DIV 2=1)
MOD pour le reste de la division entire (6 MOD 4 =2)
Remarque : laddition + prend le rle de la concatnation si les deux oprants sont des caractres.
Exemple : "az"+"erty"="azerty"
b) Les oprations logiques
ET ET logique
OU OU logique (inclusif)
OUX OUX logique (OU exclusif)
NON Ngation
c) Les tables de vrit
ET 0 1 OU 0 1 OUX 0 1 NON
0 0 0 0 0 1 0 0 1 0 1
1 0 1 1 1 1 1 1 0 1 0

III. Structure de contrle


A. Structure slective (alternative)
La structure slective est une structure dont les instructions sont excutes selon les rponses des conditions.
1. Structure slective Simple (un choix)
Syntaxe :
SiConditionAlors
Instructions ;
Fin si

Si la condition vaut Vrai alors le bloc dinstructions sera excut, sinon il sera ignor.
2. Structure alternative (deux choix)
Syntaxe :
SiConditionAlors
Instructions1 ;
Sinon
Instructions2 ;
Finsi

Si la condition vaut Vrai alors le bloc dinstructions1sera excut, et le bloc dinstructions2sera ignor, sinon le bloc
dinstructions2sera excut et le bloc dinstructions1 sera ignor.
Exemple 1
Un algorithme qui demande un nombre entier lutilisateur, et linforme ensuite si ce nombreest positif ou ngatif.

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 11


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

Algorithme Nature_nombre ;
Variable n : Entier ;
Dbut
Ecrire ('Entrez un nombre : ') ;
Lire( n) ;
Si n > 0 Alors
Ecrire ('Ce nombre est positif' ) ;
Sinon
Ecrire ('Ce nombre est ngatif' ) ;
Fin si
Fin.
Exemple 2 : Ecrire un algorithme qui rsoudre lquation ax+b=0
3. Structure alternative imbrique
Syntaxe :
Si condition1Alors
Instructions1 ;
Sinon
Si condition 2 Alors
Instructions2 ;
Sinon
Instructions3 ;
Fin si
Fin si
Exemple 1 :
Un algorithme qui demande un nombre lutilisateur, et linforme ensuite si ce nombre estpositif ou nul ou ngatif.
Algorithme Nature_nombre ;
Variable n : Entier ;
Dbut
Ecrire ('Entrez un nombre : ') ;
Lire (n) ;
Si n > 0 Alors
Ecrire ('Ce nombre est positif ') ;
Sinon
Si n = 0 Alors
Ecrire ('Ce nombre est nul') ;

Sinon
Ecrire ('Ce nombre est ngatif ') ;
Fin si
Fin si
Fin.
Exemple 2 : Ecrire un algorithme qui calcule lIGR en fonction des revenus
Revenu Taux
0 12 000 0%
12 000 20 000 10%
20 001 30 000 20%
30 001 50 000 30%
>50 000 40%
4. Structure choix multiple
Lorsque limbrication des alternatives devient importante, lutilisation de la structure choix multiple devient ncessaire.

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 12


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

Syntaxe:
Cas Variable ou Expression Vaut
Val 1 : Instructions 1 ;
Val 2 : Instructions 2 ;

Val n : Instructions n ;
Sinon
Autres Instructions ;
Fin Cas
Exemple :
Les jours de la semaine sont cods de 0 6. Ecrire un algorithme qui affiche le jour correspondant un code.
B. Les structures rptitives (itratives)
Les structures itratives permettent dexcuter une portion de code plusieurs fois de suite.
1. La structure : Pour
Syntaxe :
Pour variable de Vi Vf [pas k] faire
Instructions
Finpour

Cette forme ditration est utilise lorsque le nombre ditrations est connu
La variable dont on donne le nom va prendre successivement toutes les valeurs entires entre valeur initiale (Vi) et valeur
finale (Vf).
Pour chaque valeur prise par la variable, la liste des instructions est excute. La valeur utilise pour numrer les
itrations est appele valeur d'itration, indice d'itration ou compteur. L'incrmentation par 1 de la variable est implicite.
Exemple : lalgorithme suivant permet dafficher les nombres de 1 10
Algorithme afficher_1_10
I : entier
Dbut
pour i de 1 10 faire
crire(i)
fin pour
Fin
Exemple : Somme de n nombre
2. La structure : Tant que
Syntaxe :
Tant que (condition)
Instructions
FinTantQue
Lensemble des instructions doit tre excuttant que la condition est vraie. Lorsque la condition est fausse, le
processus itratif sarrte.
Exemple : Algorithme qui permet de Saisir une liste des nombre dont le dernier est 0.
Algorithme saisie_0
i : entier
dbut
i1
tantque (i<>0)
lire(i)
finTantQue
fin

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 13


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

3. La structure : Rpter jusqua


Syntaxe :
Rpter
Listes d'instructions
jusqu'(condition)
Dans ce cas la suite dactions est excute au moins une fois, car le test de lexpression logique est effectu aprs
excution de lensemble dactions.
Exemple :Ecrire un programme qui permet de lire un texte saisi par lutilisateur jusqu' ce dernier saisie le mot Fin

C. Lanalyse descendante :
Une approche descendante du problme consiste dcomposer le problme en sous-problmes plus simples rsoudre.
Si certains sous-problmes sont dcomposables en problmes plus petits, on les dcompose encore. Ensuite, chaque
sous-problme est rsolu sparment et enfin, ils sont rassembls pour composer la solution complte. Dure
1. Application de la dmarche descendante : La liste des nombres premiers
On veut crire un algorithme qui liste les nombres premiers inferieurs un nombre n.
Il sagit donc d'afficher les nombres premiers inferieurs n : on va donc utiliser une boucle Pour.
POUR i DE 2 jusqu' n FAIRE
Tester si i est premier
FinPour

Le traitement soulign doit tre prcis.


Pour tester si i est premier il faut vrifier si il admet un diviseur j avec 2<=j<i/2. Sachant que tous les diviseurs dun nombre
n sont <= n/2
On va donc utiliser une boucle pour chaque nombre i.
Estpremier Vrai
POUR j DE 2jusqu i/2 FAIRE
Tester si i est divisible par j
FINPOUR
SI (Estpremier= 1) ALORS
ECRIRE(i)
FINSI
Le traitement soulign doit encore tre prcis. Tester si i est divisible par j, il suffit de faire le test suivant :
SI (i mod j = 0) ALORS Estpremier Faux
Sachant que Estpremier est initialis Vrai (i.e. tout nombre est premier jusqu prouver le contraire) On va maintenant
rassembler les algorithmes des sous-problmes pour recomposer lalgorithme principal :
ALGORITHME nombresPremiers
VARIABLES estpremier, i, j, n : entier
DEBUT
Lire(n)
POUR i DE 2jusqu' n FAIRE
Estpremier Vrai
POUR j DE 2jusqu' i/2 PAS 1 FAIRE

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 14


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

Si (i mod j = 0) ALORS EstpremierFaux


FinPour
SI (estpremier) ALORS ECRIRE(i)
FINPOUR
FIN

Exercice : Ecrire un programme en python qui calcule :x et n saisies par lutilisateur

Chapitre 3 : Phase de la programmation avec le Langage Python


- La syntaxe

1) Le langage Python

Cest un langage dvelopp par Guido van Rossum en 1991 aux Pays-Bas. Il est caractris par une syntaxe simple, claire
et cohrente.
2) Caractristiques de Python

Python :
est portable(Unix, MacOS, Windows, . . .)
est gratuit (sans restriction dans des projets commerciaux).
est simple(programmes trs compacts et trs lisibles).
Gre ses ressources(mmoire, descripteurs de fichiers...) sans interventiondu programmeur
est orient-objet.
est dynamiquement typ (pas besoin de dclarer les variables).
est extensible (on peut linterfacer avec des bibliothques C existantes).
donne accs une grande varit de services
3) Type de base
Python est un langage typ dynamiquement : le type dune variable est dtermin par linterprteur au moment de
lexcution et na pas besoin dtre dclar :
Exemple :
a=1 # a est de type integer
b = 2.0 # b est de type float
a = "le chat" # a est maintenant de type string
c = 3 + 2j # nombre complexes
print(c) # affiche (3+2j)
d = 1 == 2 # boolens
4) Les operateurs
a) Les operateurs logiques
== (galit), != , (diffrence), >,<, >=, <=
b) Les operateurs arithmtiques
+, - , * , / , **(puissance), // (division entire), % (Modulo)
c) Les operateurs boolens
not(a) (non a),and (et),or (ou)
5) Les variables
Une variable est un identificateur associ une valeur.

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 15


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

une identificateur est form par les caractres [a..z][A..Z][0..9]{_} et ne commence pas par un chiffre.
accents possibles mais viter
mots cls du langage interdits (if else and)
sensible la casse min/MAJ

6) Les instructions de base

a) Laffectation
a = 2 #au lieu de dire a gal 2, dites a reoit 2.
a = a + 1 # incrmentation
a = a - 1 # dcrmentation
a += 2 # idem : a = a + 2
c=d=8 # affectation de droite gauche
a,b=10,20 # idem a=10 et b=20
b) Linstruction de lecture
La fonction input permet de lire au clavier une valeur donne par lutilisateur, et la retourn sous forme dunechaine de
caractres. Il faut donc changer son type (transtyper) si ncessaire
S=input("entrez un mot :") #equivalent ecrire("entrer un mot") et lire(S) S est de type String
n = int(input("Entrez un entier : ")) #equivalent ecrire("entrer un entier") et lire(n)n est de type integer

c) Linstruction dcriture
La fonction printse charge dafficher la reprsentation textuelle des informationsqui lui sont donnes en paramtre, en
plaant un blanc sparateur entre deux informations, et en faisant un retour la ligne la fin de laffichage (le sparateur
et la fin de ligne peuvent tre modifis)
a,b=25,35
print(a,"+",b,"=",a+b) #affiche 25 + 35 = 60
print(a,b,sep="+", end="="); print(a+b) #affiche 25+35=60

7) Les instructions composes

Une instruction compose se compose :


dune ligne den-tte termine par :
dun bloc dinstructions indent par rapport la ligne den-tte.
Toutes les instructions au mme niveau dindentation (lespace gauche de linstruction)
appartiennent au mme bloc.

a) Les structures conditionnelles

if condition1:
Indentation

Bloc dinstruction1
elif condition2 :
Bloc dinstruction2
else:
Bloc dinstruction3
Les blocs elif et else sont optionnels

b) Les boucles

La boucle while

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 16


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

while condition1 :

Indentatio
Bloc dinstruction1

n
La boucle for
for i in range(vi,vf,pas) :
Indentatio

Bloc dinstruction1
n

D. Vrification du code
1. Terminaison et invariants de boucle
Une boucle ou une itration est une structure rptitive.
Il faut toujours s'assurer que 2 problmes soient rsolus :
Probleme1 : la terminaison : est-ce que la boucle se termine ?
Problme 2 : la preuve de programme : le programme est-il correct ? est-ce que le rsultat obtenu la fin de
l'itration est celui attendu ?
Pour le 2me type de problme, on utilise ce que l'on appelle un invariant de boucle qui est un prdicat qui ne change pas
au cours de la boucle. C'est donc une proposition qui est vraie
Avant l'excution de la boucle (pr-condition)
chaque tour de boucle
la sortie (post-condition)
2. Tests des segments itratifs
Exemple :calcule de 5!

Algorithme cinq_F
Variables p, k : entier
dbut
p 1
k 1
tant que (k<= 5)
p p * k TESTE
k k+1
fin Tant Que
crire (" 5! =", p)
FIN

Linvariant du boucle est p=k!


Aprs le teste on voit clairement :
Avant l'excution de la boucle: p=k=1 donc p=k!
chaque tour de boucle on a p=k!
la sortie k=5,p=120 donc p=k!

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 17


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

3. Exemple 2
A := a; N := n; R := 1;
Tant que N > 0 faire
Si N pair alors
A := A A;
N := N/2;
Sinon
R := R A;
N := N 1;
Fin si ;
fin tant que

1. Quil est le rsultat de cet algorithme


2. Trouver linvariant de la boucle et tester le programme

Cet algorithme se termine et en sortie R contient an.

Preuve : La valeur de N 0 dcrot strictement chaque tour de boucle, donc lalgorithme se termine.

Au dbut on a AN R = an. Si en entre de boucle AN R = an alors il est facile de voir que dans les deux cas N pair ou N
impair on a la mme galit en sortie de boucle. Mais la fin on a N = 0 et par consquent R = an.

Exemple de a=2, n=4 Exemple de a=2, n=7


R A N R A N
Initiation 1 2 4 Initiation 1 2 7
Etape 1 1 4 2 Etape 1 2 2 6
Etape 2 1 16 1 Etape 2 2 4 3
Etape 3 16 16 0 Etape 3 8 4 2
Fin de la boucle Tant que Etape 4 8 16 1
Affichage An=R=16 Etape 5 128 16 0
Fin de la boucle Tant que
Affichage An=R=128

4. Estimation de la complexit d'un calcul


Objectifs des calculs de complexit :
o Pouvoir prvoir le temps d'excution d'un algorithme
o Pouvoir comparer deux algorithmes ralisant le mme traitement
L'valuation de la complexit peut se faire plusieurs niveaux :
o au niveau purement algorithmique, par l'analyse et le calcul
o au niveau de l'excution du programme exprimentalement
a) Exemple : la factorielle

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 18


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

Algorithme factoriel
Variables i, resultat
dbut
resultat 1
pour i allant de 2 n faire
resultat resultat * i
fin pour
fin
On peut fixer le temps dexcution constants chaque type dinstruction :
Affectation dentier : ae
Comparaison dentier : ce
Opration lmentaire sur des entiers : oe
Lexcution de la fonction va prendre : ae+ (n-1)*(ae+oe)
Au total le temps de lexcution sera sous la forme de a*n+b
a et b dpendent du langage de programmation et de lordinateur utilis.
Exercice :
Ecrire un algorithme qui calcule le dveloppement limit lordre n de sin x, avec

Calculer sa complexit en fonction de n

Chapitre 4 : Programmation modulaire

I. Introduction
A. Prsentation
Les applications informatiques simples sont labores partir les trois constructeurs de la programmation structure
: la squence, l'alternative et la rptitive.
Lors du dveloppement d'applications plus complexes il est important de dcouper l'application en parties distinctes (sous
algorithme) correspondant des modules applicatifs ce quon appel : les fonctions et les procdures.
B. Approche du concept modulaire
Une application informatique correspond la gestion de donnes qui sont traites pour fournir des rsultats.

Traitement
Donnes Rsultats
Algorithme
La gestion modulaire dune application consiste dcomposer un problme en sous problme, chaque sous problme associ
un module (fonction ou procdure).

Traitement
Sous algorithme1 (Module1);
Donnes Rsultats
Sous algorithme2 (Module2);
Sous algorithme3 (Module3)
Chaque module accepte des donnes (entres) et au plus un rsultat.
Les traitements sont alors encapsuls, ils deviennent invisibles ses utilisateurs qui nen retiendront que les
fonctionnalits.

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 19


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

II. Procdure et fonction


A. Dfinition
Une procdure / une fonction est un sous-algorithme (module) qui permet de raliser le mme traitement plusieurs fois.
Une fonction peut avoir de 0 N donnes en entre (paramtres) et elle retourne un seul rsultat.
Une procdure peut avoir de 0 N donnes (en entre) et elle ne retourne aucun rsultat (en sortie).
Par la suite on considre une procdure comme une fonction qui ne retourne aucun rsultat
B. Syntaxe

On distingue deux types de paramtres :


Paramtres formels: des variables utilises pour la dfinition de la fonction.
Paramtres effectifs: des variables (ou valeurs) fournies lors de l'appel de la fonction.
Ils sont de mme nombre et de mme type que les paramtres formels et les remplacent dans lordre de dfinition.
C. Appel
Si la fonction dlivre un rsultat elle est appele par lintermdiaire dune variable :
nomVariable nomFonction(parametresEffictifs)
ou nomVariable nomFonction() si il na pas de paramtres
Si la fonction ne donne aucun rsultat, elle est appele directement par son nom
nomFonction(parametresEffictifs)
D. Exemple
Ecrire une fonction qui calcule la somme de deux nombre.
fonction somme(x : entier, y : entier): entier
Variables s: entier
Dbut
s a+b
retourne s
Fin
Algorithme addition
Variables x, y, z: entier
Dbut
lire(x, y)
z somme(x, y)
Ecrire(z)
Fin

III. Variable locale et variable globale


A. Variable globale
Une variable globale est une variable dclare lextrieur du corps de toute fonction, et elle peut tre utilise par
nimporte quelle fonction.
Exemple : Les variables x, y (non celles du paramtre de la fonction) et z dans lexemple prcdent
B. Variable locale
Une variable locale est une variable qui ne peut tre utilise que dans la fonction ou le bloc o elle est dfinie. Sa dure
de vie est gale la dure de lexcution de la fonction.
Exemple : La variable s dans lexemple prcdent

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 20


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

C. Exemple
fonction permutation1(x, y : entier)
Variables b, z: entier # dclaration des variables locales
Dbut
a=42 ; b=33
z=x ; x=y ; y=z
crire (a, b, x, y)
Fin
Algorithme permutation
Variables a, b, x, y : entier # dclaration des variables globales
Dbut
a=1 ; b=15 ;
x=3 ; y=40;
permutation1(17,4)
crire (a, b, x, y)
Fin
Comme rsultat de lalgorithme on aura :
42 33 4 17 # lexcution de linstruction crire(a, b, x, y) de la fonction teste1
42 15 3 40 # lexcution de linstruction crire(a, b, x, y) du corps de lalgorithme
La porte des variables locales b et z et les paramtres x et y sont juste dans la fonction permutation1, donc hors de la
fonction permutation1, les variables b, x et y (variables globales) prennent les valeurs affectes hors de la fonction.
Les fonctions n'obtiennent que les valeurs de leurs paramtres et n'ont pas d'accs aux variables elles-mmes(le passage
des paramtres par valeur) contrairement dun passage des paramtres par rfrence.
Puisque on na pas une redfinition de la variable a dans la fonction permutation1 donc cette fonction utilise la mme
variable globale a dfinit dans le corps de lalgorithme.

Chapitre 5 : Programmation modulaire Python


I. Syntaxe dune fonction
def nomDeLaFonction(liste de paramtres):
"""documentation de la fonction"""
...
return valeur
A. Exemple dune fonction simple sans paramtres
def table7():
i=1
while i <11 :
print(i * 7)
i = i +1
B. Lappel de la fonction
Pour utiliser la fonction que nous venons de dfinir, il suffit de lappeler par son nom. Ainsi : >>> table7()
C. Exemple dune fonction simple avec paramtres
def table(n, fin):
i=1
while i <=fin :
print(i * n)
i = i +1
II. Variables locales, variables globales
Une variable utilise lextrieure de toutes les fonctions est une variable globale

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 21


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

Une variable utilise lintrieure dune fonction est une variable locale
Une variable utilise lintrieure dune fonction et elle prcde par linstruction global est une variable global
Exemple1 :
a=0
def ajouter():
global c
Les variable a et c sont des variables globales
b=5 ; a = a+1 ; c=3 Explication La variable b est une variable local
print(a,b,c)
ajouter()
print(a, c)
Exemple2 :
a=0
def ajouter(): 6
Rsultat 0
a=5 ; a = a+1
print(a)
La variable a dans la fonction ajouter() est une
ajouter()
variable locale.
print(a)
Exemple2 :
a=0
def ajouter(): 6
Rsultat 6
global a
a=5 ; a = a+1
Avec linstruction global, la variable a dans la fonction
print(a)
ajouter est une variable global.
ajouter()
print(a)

III. Les fonctions lambda


A. prsentation
Nous venons de voir comment crer une fonction grce au mot-cl def. Python nous propose un autre moyen de crer
des fonctions, des fonctions extrmement courtes car limites une seule instruction ces fonction sont appeles fonctions
lambda.

B. Syntaxe
[Nom_de_la_fonction=] lambda paramtre1, ; parametren : instruction de retour

C. Exemple
>>> g=lambda x : x*x
>>> g(3)
9
>>>(lambda x : x*x)(3)
9
Notez la syntaxe condense : il ny a pas de parenthses autour de la liste darguments et le mot-cl return est
manquant (il est implicite, la fonction complte ne pouvant tre quune seule expression).

Remarquez aussi que la fonction na pas de nom, mais quelle peut tre appele travers la variable laquelle elle est
assigne.

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 22


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

IV. TP
1. Exercice 1
Refaire lexercice 5 de la srie N3 en python.

2. Exercice 2 n!
Pour calculer le nombre de combinaisons n parmi p sans tenir compte de lordre, on utilise : Cnp
p!(n p)!
Ecrire un programme Python qui contient :
- une fonction qui calcule le factoriel dun nombre pass en paramtre.
- un programme principal qui lit n et p, calcule n! en utilisant la fonction dfinie ci-dessus.
p! ( n p )!
3. Exercice 3 :Jeu du nombre secret
Ce jeu est trs simple. L'ordinateur tire un nombre au hasard entre x et y et vous avez n essais pour le trouver. Aprs
chaque tentative, l'ordinateur vous dira si le nombre que vous avez propos est trop grand, trop petit, ou si vous avez
trouv le bon nombre. En Python crire une procdure secret(x, y, n) qui ralise ce jeu.

Vous pouvez utiliser la randinit(a,b) du module random pour gnrer un entier entre a et b

Exemple de partie
J'ai choisi un nombre entre 1 et 30 pour 5 essais
A vous de le deviner en 5 tentatives au maximum !
Essai no 1
Votre proposition : 15
Trop petit
Essai no 2
Votre proposition : 22
Trop grand
Essai no 3
Votre proposition : 16
Bravo ! Vous avez trouv 16 en 4 essais

Chapitre 6 : Les tableaux une dimension

I. Introduction
Ecrire un algorithme qui stock les valeurs de 20 notes dun tudiant et de calculer leurs moyen.
La seule solution dont nous disposons lheure actuelle consiste dclarer vingt variables, appeles par exemple N1,
N2, N3, etc. et aprs une succession de vingt instructions Lire (lire(N1), lire(N2), lire(N3), etc.) et enfin calculer le
moyen :
Moy (N1+N2+N3+N4+N5+N6+N7+N8+N9+N10+N11+N12+N13+N14+N15+N16+N17+N18+N19+N20)/20
Cest bigrement laborieux. Et pour un peu que nous soyons dans un programme de gestion avec quelques centaines ou
quelques milliers de valeurs traiter donc la tche est trs difficile.
Si en plus on est dans une situation o on ne peut pas savoir davance combien il y aura de valeurs traiter, l cest
presque impossible.

II. Les tableaux une dimension


A. Prsentation
Heureusement on a une structure des donnes qui ensemble des valeurs portant le mme nom de variable et le mme
type et repres par un nombre, cette structure est appele un tableau.

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 23


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

Le nombre qui, au sein dun tableau, sert reprer chaque valeur sappelle indice. Chaque fois que lon doit dsigner un
lment du tableau, on fait figurer le nom du tableau, suivi de lindice de llment, entre crochs [].
1. Dfinition du tableau
Un tableau est une variable

2. Syntaxe de dclaration dun tableau


Variable nom_tableau : tableau[Nombre_des_valeurs] de type du tableau
Exemple

B. Manipulation dun tableau


1. Affichage dun tableau
Pour afficher le contenu dun tableau tab un indice i :
Ecrire(tab[i]) ;
Donc pour afficher un tableau de taille 15
For i de 1 allant jusqu 15 faire
Ecrire(tab[i])
Fin pour

2. Lecture dun tableau


Pour lire un tableau tab un indice i :
Lire(tab[i]) ;
Donc pour lire un tableau de taille 15
For i de 1 allant jusqu 15 faire
Lire(tab[i])
Fin pour

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 24


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

3. Exercices:
a) Exrcice1
Ecrire un algorithme qui dclare et remplisse un tableau de 7 valeurs numriques en les mettant toutes
zro.
b) Exercice2
Ecrire un algorithme qui dclare un tableau de 20 notes, dont on fait ensuite saisir les valeurs par lutilisateur.
Le programme doit calculer la moyenne des ces notes
c) Exercice 3

Que produit cet algorithme

Algorithme Exr3
Variables
N : Tableau[0 .. 6] en Entier
i, k : Entier
Dbut
N[0] 1
Pour k allant de 1 jusqu 6 faire
N[k] N[k-1] + 2
Fin pour
Pour k allant de 1 jusqu 6 faire
Ecrire N[i]
Fin pour
Fin

Chapitre 7 : Les tableaux deux dimensions

I. Introduction
Les lments dun tableau (vecteur) peuvent tre de type quelconque. On peut avoir par exemple un vecteur
dentier, un vecteur de caractres ou un vecteur dobjets composs. Les lments dun vecteur peuvent aussi
tre des vecteurs. On parlera alors de vecteur de vecteurs ou tout simplement de matrice ou encore tableau
deux dimensions.
A. Prsentation
1. Dclaration
Nom_Tab : Tableau[nbrelignes][nbrescolonne] de type des lments

Pour accder llment de la ime ligne ,jme colonne d'un tableau en utilisant la syntaxe suivante :
Nom_Tab[i][j]

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 25


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

2. Exemples
a) Exemple1
tab : Tableau[2][1] de Rel
tab[0][0] 2.0 met la valeur 2.0 dans la case 0,0 du tableau tab
tab[1][0] 1.2
tab[2][0] 3.4
tab[0][1] 2.6
tab[1][1] -2.9
tab[2][1] 0.5
Permet de reprsenter le tableau suivant :
Indices colonnes
0 1
Indices lignes
0 2.0 2.6
1 1.2 -2.9
2 3.4 0.5

b) Exemple2
Lecture dune matrice de taille (m,n)
3. Exercices
Ecrire un algorithme qui permet de:
Dclarer les matrices M1, M2, A, B, C de 5 lignes et 7 colonnes.
Saisir les deux matrices M1 et M2 par lutilisateur.
Crer une fonction somme(M1,M2) qui retourne la matrice A somme de deux matrices M1 et M2.
Crer une fonction produit(M1,M2) qui retourne la matrice B produit de deux matrices M1 et M2.
Crer une fonction puissance(n) qui retourne la matrice C =(M1)n : M1 la puissance n
Afficher A, B et C

Chapitre 8 : Les listes En Python

1. Dfinition
Une liste est une structure de donnes qui permet de stocker plusieurs valeurs (comme un tableau) mais de type
htrogne simple ou composs
2. Cration
Pour construire une liste :
>>>L1=[1,2,3,4]
>>>L2=[a,b,c,d,e]
>>>L3=6*[0] # permet de crer une liste de 6 zros [0,0,0,0,0,0]
Comme dans un tableau les valeurs sont repres par des indices i commenant par 0
3. Accs un lment
>>>L1
>>>[1,2,3,4]
>>>L1[1] #affiche : 2
>>>L1[2]=6

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 26


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

4. Manipulation
a) L[i:j]
Comme pour nimporte quelle squence : L[i:j] renvoie une liste constitues des composantes i j(exclu).
>>>L2=[a,b,c,d,e]
>>>L2[1 :3] #affiche : [b,c]
b) La mthode append
Pour ajouter un lment une liste en utilise la mthode append
>>>L1=[1,2,3,4]
>>>L1.append(5)
>>>L1 #affiche : [1,2,3,4,5]
c) La fonction len
len(liste) renvoie la taille (le nombre dlments de la liste)
>>>L1=[1,2,3,4]
>>>len(L1) #affiche : 4
d) La fonction range
>>> list(range(13)) #affiche : [0,1,2,3,4,5, 6, 7, 8, 9, 10, 11, 12]
>>> list(range(3,16,3)) #affiche : [3, 6, 9, 12, 15]
e) La fonction remove
>>>L.remove(val) #supprime la premire valeur de val
5. Les matrices
Une matrice est un tableau de deux dimensions ou un tableau de tableau unidimensionnel, en plus gnrale une liste
des listes. Donc pour crer une matrice il suffit de crer une liste de liste.
La saisir dune matrice de 2 lignes et 3 colonnes Laffichage dune matrice de 2 lignes et 3 colonnes
L=[] for i in range(2):
print("La saisie sera effectue ligne par ligne") for j in range(3):
for i in range(2): print(L[i][j],end="\t")
print("Saisie de ligne ",i+1) print()
L1=[]
for j in range(3):
print("entrer la valeur ",j+1,end=":")
val=int(input())
L1.append(val)
L.append(L1)

Les chaines des caractres

I. Les chaines des caractres sous python


1. Introduction
Les chanes de caractres scrivent de plusieurs manires en Python. Il est possible dutiliser indiffremment
des apostrophes (') : ch=cpge
des guillemets (") : ch="cpge "
les triples apostrophes (''') : ch="cpge"
ou des triples guillemets (""") : ch="""cpge"""
2. Caractres spciaux
\n : permet dinsrer des marques de passage la ligne dans une chane :
\t :permet dinsrer des marques de tabulation dans une chane.
\" : permet dinsrer des guillemets dans une chane dlimite par des guillemets.

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 27


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

\' permet dinsrer des apostrophes dans une chane dlimite par des apostrophes.
\\ permet dinsrer des contre-barres dans une chane.
Mme sils sont crits avec deux symboles, les caractres spciaux comptent pour un seul caractre. :
Exemple : len(\n) retourne 1
II. Oprations sur les chanes
1. La taille dune chaine :La fonction len(ch)
Renvoie la longueur de la chane ch
>>> ch = "cpge agadir"
>>>len(ch) retourne 11
2. La concatnation
La concatnation est lopration qui consiste construire une chane de caractres en mettant bout bout deux autres
chanes de caractres.
En Python cette opration est dsigne par le symbole +.
>>>ch1,ch2= "cpge", " agadir"
>>>ch1+ch2 retourne "cpge agadir"
3. Rptition
Loprateur de rptition dune chane est dsigne par le symbole *.
>>> 'Hello world!' * 3 retourne 'Hello world!Hello world!Hello world!'
4. Ordre
Il existe une relation dordre naturel pour les chanes de caractres : lordre lexicographique.
Par exemple bonjour est plac avant salut dans le dictionnaire, donc lexpression boolenne "bonjour" < "salut" est
vraie.
>>> "bonjour" < "salut" retourne True
Cependant les minuscules sont considres comme tant places aprs les majuscules :
>>> "bonjour" > "Salut" retourne True
5. Conversion numriques/chanes
Pour convertir une chane ne contenant que des caractres numriques en un nombre entier ou flottant, on utilise les
fonctions int et float.
>>> int ("34") retourne 34
>>> float ("34") retourne 34.0
La fonction str est la fonction rciproque des prcdentes. On utilise pour effectuer la conversion en sens inverse
>>> str (45.7) retourne '45.7'
Le premier caractre (le plus gauche) dune chane de longueur n a pour indice 0 et le dernier lindice n1.
Lindice est mis entre crochets.
>>> x = "hello world!"
>>> x[0] retourne 'h'
Lindice peut tre ngatif. Dans ce cas, il dsigne un caractre repr depuis la fin de la chane.
>>> x[-1] retourne '!'
6. Sous-chanes
>>> x = 'Hello World!'
>>> x[2:4] retourne 'll'
>>> x[2:7 :2] retourne 'loo'
Si lindex de dbut est manquant, Python considre que le dbut est 0,
>>> x[:5] retourne 'Hello'

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 28


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

si lindex de fin est manquant, la longueur de la chane est prise.


>>> x[3:] retourne 'llo World!'
Enfin, un index ngatif prcise que le calcul seffectue depuis la fin de la chane.
>>> x[-3:] retourne 'ld!'
>>> x[1:-1] retourne 'ello World'
7. Linstruction for ... in
Permet de parcourir tous les lments dune squence. Par exemple :
nom = "Gilles"
for car in nom:
print(car + ".", end ='')
print()
8. La mthode split()
Convertit une chane en une liste de sous-chanes. On peut choisir le caractre sparateur en le fournissant comme
argument, sinon c'est un espace, par dfaut :
>>> c2 ="cpge agadir"
>>> a = c2.split()
>>> print a Retourne ['cpge', agadir']
>>> c4 ="Cet exemple, parmi d'autres, peut encore servir"
>>> c4.split(",") Retourne ['Cet exemple', " parmi d'autres", ' peut encore servir']
9. La mthode join(liste) :
Rassemble une liste de chanes en une seule (Cette mthode fait donc l'inverse de la prcdente). Attention : la chane
laquelle on applique cette mthode est celle qui servira de sparateur (un ou plusieurs caractres) ; l'argument transmis
est la liste des chanes rassembler:
>>> b2 = ["cpge", "agadir", "maroc"]
>>> print "---".join(b2) Retourne cpge---agadir---maroc
10. La mthode lower() :
Convertit une chane en minuscules :
>>> ch = "CELIMENE est un prenom ancien"
>>> print (ch.lower()) Retourne climne est un prenom ancien
11. La mthode upper() :
Convertit une chane en majuscules :
>>> ch = "Maitre Jean-Noel Hebert"
>>> print(ch.upper()) Retourne MAITRE JEAN-NOEL HEBERT

Tris et recherche dichotomique

I. La recherche dichotomique
1. Principe
Une autre technique de recherche en table (tri) est la recherche dichotomique. Au lieu de rechercher
squentiellement (recherche linire), on compare la valeur chercher la valeur qui se trouve au milieu de la table. Si
c'est le mme la valeur donc est trouve, sinon on recommence soit sur la premire moiti si la valeur recherche est
plus petite que la valeur rang au milieu de la table soit sur la deuxime moiti si la valeur recherche est plus grande
que la valeur rang au milieu de la table.
2. Programme en python
Cette fonction retourne lindice dune valeur cherche si la valeur est existe dans le tableau et -1 sinon.

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 29


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

def RechercheDichotomique(x) :
g = 1; d = len(T);
i = (g + d) // 2;
while (x != T[i]) and (g <= d) :
if x < T[i] : d = i-1
else : g = i+1
i = (g + d) // 2

if x == T[i] : retourn i
else : retourn -1;

II. Les algorithmes des tris


A. Tri par slection
1. Principe
Le principe du tri par slection/change (ou tri par extraction) est d'aller chercher le plus petit lment du tableau pour
le mettre en premier, puis de repartir du second lment et d'aller chercher le plus petit lment du tableau pour le
mettre en second, etc...
Au ime passage, on slectionne donc l'lment ayant la plus petite valeur parmi les lments {T[i]...T[n]} et on
l'change avec T[i].
2. Programme
def Tri_Selection (T) :
n=len(T)
for i in range(n-1) :
indice_min = i;
for j in range( i+1,n) :
if T[j]<T[indice_min] : indice_min <- j;
T[i],T[indice_min]= T[indice_min], T[i]

B. Trie bull
1. Principe
Le principe du tri bulle est de comparer deux deux les lments e1 et e2 conscutifs d'un tableau et d'effecteur une
permutation si e1 > e2. On continue de trier jusqu' ce qu'il n'y ait plus de permutation.
2. Programme
def Tri_bulle (T) :
permut = True
n=len(T)
while permut==True :
permut = False
for i in range( n-1) :
if T[i] > T[i+1] :
T[i],T[i+1]= T[i+1],T[i]
permut = True

C. Tri par insertion


1. Principe
Une mthode compltement diffrente est le tri par insertion. C'est la mthode utilise pour trier un paquet de cartes.
On prend une carte, puis 2 et on les met dans l'ordre si ncessaire, puis 3 et on met la carte sa place dans les 2

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 30


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

premires, ... De manire gnrale on suppose les i-1 premires cartes tries. On prend la ime carte, et on essaie de la
mettre sa place dans les i-1 cartes dj tries. Et on continue jusqu' i=N

2. Programme
def Tri_insertion(T):
for j in range(1, len(T)):
i=j-1
tmp = T[j]
while i > -1 and T[i] > tmp:
T[i+1] = T[i]
i -= 1
T[i+1] = tmp

III. TP
A. TP1
1. Les tris (comparaison)
Implmenter en Python les trois algorithme de tris et laide time.clock() du module time qui retourne le temps en
seconde de CPU on mesurer le temps dexcution dun programme ou fonction.

Pour cela il suffit juste de calculer le temps de CPU au dbut de programme et la fin du programme et calculer la
diffrence.(pour tester on utiles la liste L=[12,3,4,34,44,5,55,6,5,41,0,13,17,15,11,21,10,57,100,98,6,90,7])

2. Les mthodes de recherche (comparaison)


A prs le tri de la liste L, crire deux fonction recherche_lineaire (val,L) qui effectue une recherche simple de la valeur val
dans la liste L et une fonction recherche_dichotomique(val,L) qui effectue une rechercher dichotomique sur la liste L
dj tri

En cherchant une valeur (21 par exemple pour la liste L), comparer les deux mthodes de recherche au niveau de
temps dexcution.

B. TP2
Ecrire un programme python qui permet de saisir et de stocker n lve avec leurs notes dans un tableau puis les afficher
en ordre dcroissant selon leurs notes (si deux lves ou plus ont la mme note il faut les afficher selon lordre
alphabtique) puis qui cherche la prsence ou non de nom dun lve saisi par lutilisateur.

Les piles et les files

I. Les piles et les files


A. Les piles
1. Prsentation
Une pile est une structure de donnes de type LIFO (last in first out) : le dernier entr est le premier sorti.
Elles peuvent par exemple tre utilises dans des algorithmes dvaluation dexpressions mathmatiques. Une pile P est
entirement dfinie par deux oprations :
a. Empiler une valeur : Cest linsrer au dbut de P
b. Dpiler une valeur : Si P est non vide, cest slectionner la premire valeur de la pile et la supprimer de P

La premire valeur de P est le sommet de la pile.

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 31


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

2. Implmentation en Python (avec les listes)


a) Les oprations caractristiques dune pile (ou primitives) sont :
creer_pile() : qui permet de crer et retourner une pile
pilevide(P) : Retourne vrai si la pile est vide et False sinon
empiler(P,e) : Ajouter llment e au somme de la pile P
depiler (P) : supprimer llment du sommet
sommet(P) : Retourne llment du sommet de la pile
taille(P) : Retourne la taille de la pile P
Le type liste intgre dj toutes les mthodes pour raliser une pile :
List.append(x) qui ajoute un lment la fin de la liste (la pile)
List.pop() : qui enlve de la liste (la pile) le dernier lment de la liste.
List[-1] :est llment de la sommet de la liste(la pile)

b) Implmentation dune pile

def crer_pile() :
return []

def pilevider(P) :
if len(P)==0 :return True
else : return False

def empiler(P,e) :
P.append(e)

def depiler(P) :
if pilevide(P)==False : P.pop()
else : print("Pile vide")

def taille(P) :
return len(P)

def sommet(P) :
return P[-1]

3. Exercice paresthsie
Nous allons appliquer une structure de pile pour crer une fonction permettant de dterminer si une chane de
caractre passe en argument est ou non bien parenthse

Avec les parenthses ( et ) un mot est bien parenths si :

Il ne contient aucune parenthse ( ou ), ou

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 32


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

Il est de la forme (mot) avec mot un mot bien parenths, ou


Il est la concatnation de 2 mots bien parenthss.
Par exemple :
Les mots suivants sont bien parenthss : () ; (()()) ; (()())(())()
Les mots suivants ne sont pas bien parenthss : )( ; ((()) ; ()()())

A laide des piles crire une fonction parenthesage(mot) qui retourne True su le mot est bien parenths et False sino

Pour le rsoudre laide dune pile :

1. On parcourt le mot de gauche droite


2. Ds que lon rencontre un caractre ( on lempile sur la pile.
3. Ds que lon rencontre un caractre ), deux cas se prsentent :
a. Soit la pile est vide, et dans ce cas le mot nest pas bien parenths.
b. Soit la pile est non-vide, et dans ce cas on la dpile.
4. A la fin si la pile est vide le mot est bien parenths, sinon il ne lest pas.

B. Les files
1. Prsentation
Une file (queue) est une structure de donnes de type FIFO (first in first out) : le premier entr est le premier sorti. Elles
peuvent par exemple tre utilises afin de mmoriser des donnes en attente de traitement. Une file F est entirement
dfinie par deux oprations :

1. Entrer une valeur cest lajouter la fin de F


2. Sortir une valeur, si F est non vide, cest slectionner la premire valeur de F et la supprimer de F

A cela il faut ajouter une manire de crer une file vide, et de tester si la file est vide. La premire valeur de la file F est
la tte de la file et le dernier est la queue de la file.

1. Implmentation en Python (avec les listes)


Les listes ne sont pas trs efficaces pour ce type de traitement(FIFO). Alors que les ajouts et suppressions en fin de liste
sont rapides, les oprations dinsertions ou de retraits en dbut de liste sont lentes (car tous les autres lments
doivent tre dcals dune position).

a) Les oprations caractristiques dune file (ou primitives) sont :


Une file possde une tte et une queue. Quand un lment est enfil, il prend place en queue et quand il est dfil, il
est t de la tte de la file

Voici les primitives communment utilises pour manipuler des files :

creer_file() : qui permet de crer et retourner une file


enfiler(F,x) : ajoute un lment dans la file.
dfiler(F) : renvoie le prochain lment de la file, et le retire de la file.
tete(F) renvoie le premier lment de F
filevide(F) : renvoie vrai si la file est vide, faux sinon
taille(F) : Retourne la taille de la file F

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 33


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

Le type liste intgre dj toutes les mthodes pour raliser une file :
List.append(x) qui ajoute un lment la fin de la liste (la pile)
List.pop(0) : qui enlve de la liste (la file) le premier lment de la liste.
list[0] :est llment de la tte de la liste(la file)

b) Implmentation dune pile

def crer_file() :
return []

def filevider(F) :
if len(F)==0 :return True
else : return False

def enfiler(F,x) :
F.append(x)

def defiler(F) :
if filevide(F)==False : F.pop(0)
else : print("File vide")

def tete(F) :
return F[0]

def taille(F) :
return len(F)

1. Exercice paresthsie
Soient F est une file. En utilisant seulement une pile P et les oprations des PILE et FILE dj vu, crire un programme
qui renverse lordre des lments de F (la file dattente sera renverse, llment de la tte sera situ la queue et ainsi
de suite).
Remplir F par les entiers de 1 jusqu 10.

Dictionnaires et tuples

I. Les dictionnaires
1. Prsentation
Les dictionnaires se rvlent trs pratiques lorsque vous devez manipuler des structures complexes dcrire et que les
listes prsentent leurs limites. Les dictionnaires sont des collections non ordonnes d'objets, c--d qu'il n'y a pas de
notion d'ordre (i. e. pas d'indice). On accde aux valeurs d'un dictionnaire par des cls.
>>> ani1 = {}
>>> ani1['nom'] = 'girafe'
>>> ani1['taille'] = 5.0
>>> ani1['poids'] = 1100
>>> ani1
{'nom': 'girafe', 'poids': 1100, 'taille': 5.0}
>>> ani1['taille']
5.0

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 34


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

En premier, on dfinit un dictionnaire vide avec les symboles {} (tout comme on peut le faire pour les listes avec []).
Ensuite, on remplit le dictionnaire avec diffrentes cls auxquelles on affecte des valeurs (une par cl). Vous pouvez
mettre autant de cls que vous voulez dans un dictionnaire (tout comme vous pouvez ajouter autant d'lments que
vous voulez dans une liste). Pour rcuprer la valeur d'une cl donne, il suffit d'utiliser une syntaxe du
style dictionnaire['cle'].
2. Mthodes keys() et values()
Les mthodes keys() et values() renvoient, comme vous vous en doutez, les cls et les valeurs d'un dictionnaire (sous
forme de liste) :
>>> ani1.keys()
['nom', 'poids', 'taille']
>>> ani1.values()
['girafe', 1100, 5.0]
On peut aussi initialiser toutes les cls d'un dictionnaire en une seule opration :
>>> ani2 = {'nom':'singe', 'taille':1.75, 'poids':70 }
3. Liste de dictionnaires
En crant une liste de dictionnaires possdant les mmes cls, on obtient une structure qui ressemble une base de
donnes :
>>> animaux = [ani1, ani2]
>>> animaux
[{'nom': 'girafe', 'poids': 1100, 'taille': 5.0}, {'nom': 'singe', 'poids': 70, 'taille': 1.75}]
>>>
>>> for ani in animaux:
... print ani['nom']
...
girafe
singe

II. Tuples
Les tuples correspondent aux listes la diffrence qu'ils sont non modifiables. On a vu la section prcdente que les
listes pouvaient tre modifies par des rfrences; les tuples vous permettent de vous affranchir de ce problme.
Pratiquement, ils utilisent les parenthses au lieu des crochets :
>>> x = (1,2,3)
>>> x
(1, 2, 3)
>>> x[2]
3
>>> x[0:2]
(1, 2)
>>> x[2] = 15
Traceback (innermost last):
File "<stdin>", line 1, in ?
TypeError: object doesn't support item assignment
L'affectation et l'indiage fonctionne comme avec les listes, mais si l'on essaie de modifier un des lments du tuple,
Python renvoie un message d'erreur. Si vous voulez ajouter un lment (ou le modifier), vous devez crer un autre tuple
:
>>> x = (1,2,3)
>>> x + (2,)
(1, 2, 3, 2)
Remarquez que pour utiliser un tuple d'un seul lment, vous devez utiliser une syntaxe avec une virgule (element,),
ceci pour viter une ambigut avec une simple expression. Autre particularit des tuples, il est possible d'en crer de
nouveaux sans les parenthses, ds lors que ceci ne pose pas d'ambigut avec une autre expression :
>>> x = (1,2,3)

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 35


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

>>> x
(1, 2, 3)
>>> x = 1,2,3
>>> x
(1, 2, 3)
Toutefois, nous vous conseillons d'utiliser systmatiquement les parenthses afin d'viter les confusions.
Enfin, on peut utiliser la fonction tuple(sequence) qui fonctionne exactement comme la fonction list, c--d qu'elle prend
en argument un objet squentiel et renvoie le tuple correspondant :
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> tuple(range(10))
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
>>> tuple("ATGCCGCGAT")
('A', 'T', 'G', 'C', 'C', 'G', 'C', 'G', 'A', 'T')
Remarque : les listes, dictionnaires, tuples sont des objets qui peuvent contenir des collections d'autres objets. On peut
donc construire des listes qui contiennent des dictionnaires, des tuples ou d'autres listes, mais aussi des dictionnaires
contenant des tuples, des listes, etc.

III. Exercice dapplication


Crez le dictionnaire des frquences dune chaine, saisie par lutilisateur, (avec lassociation clef = caractre, valeur =
nombre dapparitions du caractre dans la chane).
Remarque : Crer dabord une fonction count_car(ch,c) qui retourne le nombre dapparitions du caractre c dans la
chane ch.
Afficher le dictionnaire par ordre croissant de frquences
Exemple :
Pour la chaine ch= "agadiiir"
a est apparue 2 fois
d est apparue 1 fois
g est apparue 1 fois
i est apparue 3 fois
r est apparue 1 fois
N.B : linstruction in permet de vrifier lexistence dune valeur dans une liste ou chaine de caractre
Exemple :
k in ch retourne False
a in ch retourne True

Les fichiers en Python


I. Introduction
1. Prsentation
Un fichier stocke des informations sur un support physique (disque dur, cl USB, CD, DVD, carte mmoire SD...).
Ouvrir un fichier consiste le charger dans la mmoire vive (RAM) de l'ordinateur.
Enregistrer un fichier consiste l'crire sur un support physique de stockage (l'information est alors conserve de
manire permanente).
Il existe deux types de fichiers :
Les fichiers textes : l'information est stocke sous forme de caractres (texte)
Les fichiers binaires : l'information est stocke en binaire
2. Exemple
Soit le programme suivant:
suite=[1,1]
n=30

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 36


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

for k in range(n):
suivant=suite[k]+suite[k+1]
suite.append(suivant)
print(suite)
Ce programme gnre les premiers termes de la clbre suite de Fibonacci! Imaginons qu'un ami, qui n'y connat rien
en programmation, vous demande de lui envoyer par courriel la liste des 300 premiers termes.
La solution est au lieu dafficher les rsultats directement sur lcran, il faut les stocker sur un support physique do
limportance des fichiers

II. Manipulation
1. Ouverture du fichier
D'abord, il nous faut ouvrir le fichier avec Python. On utilise pour ce faire la fonction open. Elle prend en paramtre :
le chemin (absolu ou relatif) menant au fichier ouvrir ;
le mode d'ouverture.
Le mode est donn sous la forme d'une chane de caractres. Voici les principaux modes :
'r' : ouverture en lecture (Read).
'w' : ouverture en criture (Write). Le contenu du fichier est cras. Si le fichier n'existe pas, il est cr.
'a' : ouverture en criture en mode ajout (Append). On crit la fin du fichier sans craser l'ancien contenu du
fichier. Si le fichier n'existe pas, il est cr.
On peut ajouter tous ces modes le signe b pour ouvrir le fichier en mode binaire.
Exemple :
>>> mon_fichier = open("fichier.txt", "r")
2. Fermer le fichier
N'oubliez pas de fermer un fichier aprs l'avoir ouvert. Si d'autres applications, ou d'autres morceaux de votre propre
code, souhaitent accder ce fichier, ils ne pourront pas car le fichier sera dj ouvert.
>>> mon_fichier.close()
3. Lire l'intgralit du fichier
Pour ce faire, on utilise la mthode read. Elle renvoie l'intgralit du fichier :
# ouverture du fichier test.txt en mode read 'r' (lecture en mode texte)
Fichier = open('test.txt','r')
# lecture dans le fichier avec la mthode read()
chaine = Fichier.read()
# affichage du contenu du fichier
print('Contenu du fichier :\n' + chaine)
# fermeture du fichier avec la mthode close()
Fichier.close()
4. Ecriture dans un fichier
L'criture dans un fichier se fait avec la fonction open() en mode criture :

NomFichier = 'test.txt'
# cration et ouverture du fichier test.txt en mode write 'w' (criture)
# si le fichier test.txt existe dj, il est cras
Fichier = open(NomFichier,'w')
# criture dans le fichier avec la mthode write()
Fichier.write('Bonjour tous !')
# fermeture du fichier avec la mthode close()
Fichier.close()
Le fichier test.txt est cr dans le rpertoire courant (sous Windows c'est normalement le rpertoireC:/PythonXX, mais
on peut aussi choisir un emplacement quelconque en spcifiant le chemin absolu, par exemple
NomFichier = 'F:/Mon dossier/test.txt').

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 37


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

III. Enregistrer des objets dans des fichiers (le module Pickle)
1. Introduction
Le module Pickle est extrmement pratique pour sauvegarder dans un fichier des structures de donnes comme les
listes (type list) ou les dictionnaires (type dict).
2. Pickling :le sauvegarde des objets
Pour bien comprendre prenons un exemple de sauvegarde d'un dictionnaire :
import pickle
# cration d'un dictionnaire
departement = {36:'Indre',30:'Gard',75:'Paris'}
# enregistrement du dictionnaire dans un fichier
Fichier = open('data.txt','wb')
pickle.dump(departement,Fichier)
Fichier.close()
3. Unpickling : la rcupration des objets
L'opration inverse est tout aussi simple :
import pickle
# rcupration du dictionnaire
Fichier = open('data.txt','rb')
Dept = pickle.load(Fichier)
Fichier.close()
print(Dept)
print(Dept[36])
Comme rsultat on va avoir
{75: 'Paris', 36: 'Indre', 30: 'Gard'}
Indre
IV. Exercices
1. Exericice1
Ecrire un script Python qui va crer un fichier texte et y crire un texte sur plusieurs lignes (rappelons que le
retour la ligne est cod par \n en Python).
Lire le fichier que vous venez de crer et afficher le rsultat
Ecrire une fonction copier_fichier(fs,fd) qui copier le fichier fs dans le fichier fd
2. Exercice2
Ecrire un script qui demande lutilisateur de saisir 10 noms des lves avec leurs trois notes et qui calcule leurs
moyennes puis les tris selon leurs moyennes. Stocker tous les rsultats dans un fichier appel eleve.
Afficher le fichier eleve que vous avez cr

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 38


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

Chapitre 8 : Prsentation des bibliothques : NumPy-matplotlib-SciPy

I. Introduction
NumPy (Numerique Python) et SciPy (Scientific Python) sont des modules open-source qui fournissent tout
un lot de routines mathmatiques et numriques de fonctions prcompiles ddie aux vecteurs et
matrices ;
SciPy tend les fonctionnalits de NumPy en une bibliothquecomplte de calcul numrique (rgression
linaire, transforme deFourier, ) ;
Matplotlib: bibliothque graphique scientifique ;

II. La bibliothque numpy


A. Prsentation du module numpy
numpy est un module utilis dans presque tous les projets de calcul numrique sous Python, Il fournit des
structures de donnes performantes pour la manipulation de vecteurs, de matrices, etc.

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 39


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

NumPy est essentiellement ddi aux traitements des tableaux ou des matrices.
Tous les lments d'un tableau NumPy sont de mme type
IL n'est pas possible de modifier la taille d'un tableau cr.
B. Importation du module numpy
Pour crer un tableau avec Python, on utilise le module numpy. Donc il faut importer ce module .
Comme pour tous les modules Python une premire mthode consiste taper
>>> import numpy
Comme il devient trs vite lassant de taper numpy.X il est courant dimporter Numpy sous une abrviation :
>>> import numpy as np

III. Manipulation des tableaux et matrices


Pour crer un tableau avec python il existe plusieurs mthodes mais on ne va pas aborder toutes les mthodes.
Dans python on ne cre pas un tableau vide mais un tableau dj remplis
A. Cration de tableau unidimensionnels
1. Crer un tableau des zros
La fonction np.zeros cre un tableau compos uniquement de zros, le nombre dlments tant pass en paramtre.
Par dfaut les lments sont de type float mais on peut le modifier avec le paramtre facultatif dtype.
>>> np.zeros(5)
array([ 0., 0., 0., 0., 0.])
>>> np.zeros(5, dtype = int)
array([0, 0, 0, 0, 0])
2. Crer un tableau des uns
La fonction np.ones est pareille que np.zeros sauf que les lments sont tous gaux 1.
>>> np.ones(3, dtype=int)
array([1, 1, 1])
>>> 6*np.ones (4)
array([ 6., 6., 6., 6.])
>>> 3+np.ones (4)
array([ 4., 4., 4., 4.])
3. linspace
>>>V4 = np.linspace(0,2,5) # signifie : 5 valeurs quirparties entre 0 et 2.
[ 0., 0.5, 1. ,1.5, 2. ]
4. Crer un tableau numrique
La fonction np.arange crer un tableau de valeurs numriques.
>>>np.arange(6)
array([0, 1, 2, 3, 4, 5])
>>>np.arange(1,16,3,dtype=float)
array([ 1., 4., 7., 10., 13.])
On peut aussi convertir une liste en un tableau
>>>liste=[1, 4, 7, 10, 13]
>>>np.array(liste)
array([ 1., 4., 7., 10., 13.])
5. Crer un tableau des caractres
>>> np.array(['ab','cd','ef','gh'])
array(['ab', 'cd', 'ef', 'gh'])
>>> np.zeros(5, dtype=str)
array(['', '', '', '', ''])
>>> np.ones(3, dtype=str)
array(['1', '1', '1', '1', '1'])

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 40


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

6. Les tableaux en comprhension (de mme pour les liste)


Une comprhension est une expression qui spcifie une squence de valeurs vrifiant une certaine condition et
construite en tant que telle.
Principe : [x for x in liste sous_une_certaine_condition]
Exemples : >>> liste=[x**2 for x in range(10) ]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> liste=[x**2 for x in range(10) if x%3==0]
[0, 9, 36, 81]
Pour une matrice(n,m)
>>>matrice = [ [0 for j in range(n)] for i in range(m) ]
De mme pour les tableaux (array) de numpy
>>>V=np.array([x**2 for x in range(10) if x%3==0])
array([ 0, 9, 36, 81])
Exercices : Somme de deux matrices en peu de lignes?
7. Les erreurs classiques
>>>l1=[1,2,3]+[5,6,7] #concatnation
[1, 2, 3, 5, 6, 7]
>>>import numpy as np
>>>a1=np.array([1,2,3])+ np.array([5,6,7]) #addition lment par lment
array([ 6, 8, 10])
>>>a4=2*a1+a2
array([ 7, 10, 13])
8. Len et size
>>>tab=np.zeros((2,3), dtype='i')
>>>len(tab) #nombre de lignes
2
>>>np.size(tab) #nombre dlments
6
B. Cration de tableau bidimensionnels
Les fonctions np.zeros et np.ones fonctionnent de faon similaire au cas monodimensionnel, en renvoyant une matrice
quand le paramtre est un couple dentiers. Attention la double paire de parenthses.
>>> np.zeros ((2,4))
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
Trs souvent, on fait la dclaration dun tableau NumPy en une seule ligne :
>>> A = np.array([ [123,1,13], [-5,7,900], [13,4,9] ])
La fonction np.eye prend en paramtre un seul entier, et renvoie la matrice identit : les coefficients de la diagonale
principale sont gaux 1, les autres 0.
>>> np.eye(3)
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
La fonction np.diag prend en paramtre une liste [t0, . . . , tn1] (ou un tableau numpy) et renvoie la matrice diagonale
ayant les lments ti sur la diagonale et des zros ailleurs :
>>> np.diag([5, 7, 2])
array([[5, 0, 0],
[0, 7, 0],
[0, 0, 2]])
C. Accs un lment
Accs un lment dun tableau monodimensionnel par indice(Lindexing) :
>>> t=np.array([3,7,1])

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 41


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

>>> t[-1]
1
Dcouper un tableau(Le slicing) comme les listes.
>>> t= np.array([3,7,1,6,10,4])
>>>t[2:4]
array([1, 6])
Accs un lment dun tableau bidimensionnel :
>>> m = np.array([[3, 8, 1], [2, 7, 3]])
>>> m[1] # ligne 1
array([2, 7, 3])
>>> m[1,2] = 50 # ligne 1 colonne 2
>>> m
array([ [ 3, 8, 1],
[ 2, 7, 50]])
>>> m[:2,:2]
array([[3, 8],
[2, 7]])
>>>m[(0,1),(1,2)]
array([8, 3])
IV. Les calculs
Somme de matrices
>>> M3 = M1 + M2 #Somme terme terme,
Produit des coefficients de matrices
>>>M3 = M1 * M2 #Produit terme terme,
Produit de matrices
>>>M3 = np.dot(M1,M2)
Les fonctions (log, abs, exp ) appliques sur les coefficients de la matrice
>>>M3 = np.log(M1)
Maintenant vous pouvez traiter le tableau en 2D comme une matrice ! Et NumPy propose plusieurs fonctions lies aux
matrices :
>>>A=np.array([[1,3,5],[2,5,1],[2,3,8]])
>>> A.shape # Les dimensions de la matrice (3, 3)
(3, 3)
>>> np.transpose(A) # La matrice transpose de A
array([[1, 2, 2],
[3, 5, 3],
[5, 1, 8]])
>>> np.trace(A) # La trace de la matrice A
14
>>> np.diag(A) # La diagonale principale de A
array([1, 5, 8])
>>> np.linalg.det(A) # La dterminante de A
-25.000000000000007
>>>np.linalg.norm(A,1) #Norme de la matrice A lordre 1
14
>>> B = np.linalg.inv(A) # La matrice invers de A
array([[-1.48, 0.36, 0.88],
[ 0.56, 0.08, -0.36],
[ 0.16, -0.12, 0.04]])
>>>C=np.array([[10,13,50],[22,15,111],[12,31,84]])
>>> np.dot(A, C) # Produit des matrices A et C.

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 42


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

array([[ 136, 213, 803],


[ 142, 132, 739],
[ 182, 319, 1105]])
Notez bien que dans le cas prcis B est linverse de A. Alors A * B doit donner une matrice ayant 1 sur le diagonal
principal, et 0 partout ailleurs. Observez que certaines valeurs dans le rsultat ne sont pas exactement 0 - elles sont trs
12 proches (-3.12250226e-17 = -3.12250226 * (10**17)) mais quand mme diffrents de 0 ! Cette diffrence existe
cause de la reprsentation "imparfaite" des nombres rels dans les ordinateurs.
Min, max, moyenne, somme, produit, tri
>>> tab= np.arange(6) >>> np.mean(tab) # la moyenne
>>> tab 2.5
array([0, 1, 2, 3, 4, 5]) >>> np.sum(tab)
>>> np.min(tab) # pour les liste :min(liste) 15
0 >>> np.prod(tab)
>>> np.max(tab) # pour les liste :max(liste) 0
5 >>> np.sort(tab) #le tri (pour les liste : list.sort())
array([0, 1, 2, 3, 4, 5])
Rsoudre une quation de matrice linaire ou d'un systme d'quations linaires scalaires.
Par exemple rsoudre le systme d'quation AX=B
np.linalg.solve(A,B) #permet la rsolution du systme d'quations AX = B ;
>>>A = np.array([[3,2], [1,5]])
>>>B=np.array([8,7])
>>>X=np.linalg.solve(A,B)
>>>X
[ 2. 1.]
Exercice dapplication: Trouver la solution du systme suivant en deux mthodes :
sans et avec la fonction linalg.solve

V. Exercices TP/TD :
Programmer les fonctions suivantes :
shap(M) :retourne une liste contient nombre de lignes et colonnes de M
transpose(M) : retourne la matrice transpose de M
trace(M) : retourne la somme de la diagonale
diag(M) : retourne une liste contient les lments de la diagonale

norm(M,1) :retourne la norme de M lordre

VI. Autre fonction numpy


savetxt("nom_fichier", M) Enregistrer un array numpy dans un fichier txt:
reshape() pour redimensionner un tableau (on peut crer une matrice partir dun tableau)
vdot() pour effectuer un produit scalaire de 2 vecteurs
random.rand(5,5) crer une matrice (5,5) alatoire
matrix(M) :convertir en matrice (M*M est le produit de deux matrice)
repeat(A, 3[,1]) Repeter chaque lment 3 fois

poly1d([a .. d]) Reprsente le polynme

poly1d([a .. d],True) Reprsente le polynme


p.order Degr du polynme p
p.roots, roots(p) Racines du polynme p
p.coeffs Coefficients du polynme p
p(x), polyval(p,x) value le polynme p au point x (selon le schma de Horner)

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 43


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

numpy contient aussi constantes et fonctions mathmatiques usuelles.

VII. Le module matplotlib.pyplot


1. Prsentation
matplotlib (V 1.4.0) est une bibliothque de composants graphiques 2D pour Python. Cette bibliothque ncessite au
pralable numpy
2. Quelques fonctionnalits
matplotlib.pyplot.plot() : Pour tracer un courbe
matplotlib.pyplot.show() :pour afficher le courbe
matplotlib.pyplot.savefig('exemple_matplotlib.png') :pour sauvegarder dans un fichier image
matplotlib.pyplot.hist() :pour tracer les histogramme
matplotlib.pyplot.bar() :pour tracer les barres
.
3. Exemples
a. Exemlpe1 :tracer la fonction sin(x)

import numpy as np
import pylab as pl
from math import pi
#on cre un tableau x des points
x=np.arange(50)*2*pi/50

#on cre un tableau des images des points


y=np.sin(x)

pl.plot(y) #on trace le courbe


pl.show() #on affiche le courbe

b. Exemple2
Dans cette exemple on trace trois fonction sin(x) et cos(x) dans le mme repre (mme figure) et la fonction (1/(1+x2))
dans un autre repre (figure)

from numpy import *


from pylab import *
figure(1)#figure N1
#on cre un tableau x des points
x=linspace(0,2*pi,43)
#on cre un tableau yc des images des points par la fonction cos(x)
yc=cos(x)
#on cre un tableau yc des images des points par la fonction sin(x)
ys=sin(x)
#on trace la fois dans la mme figure la fonction cos(x) "yc" avec la couleur bleu "b" et la fonction sin(x) "ys" avec la couleur
rouge "r"
plot(x,yc, color="b",x,ys, color="r")
#on ajoute un titre pour le graphe
title("Les fonctions cosinus et sinus")
legend(("cos","sin"))#ajouter une legende
figure(2)#figure N2

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 44


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

#on cre un tableau x des points


x=linspace(-4,4,50)
#on cre un tableau yr des images des points par la fonction 1/(1+x**2)
yr=1/(1+x**2)
#on trace la fonction 1/(1+x**2) "yr" avec la couleur verte "g"
plot(x,yr, color="g")#on peut ajouter loption marker=o mettre des
# points(ou s pour carre) aux points tracs #si on veut tracer juste les points on place en troisime argument o
legend(["$1/(1+x^2)$"])#on ajoute une lgende en LaTeX
title("La fonction de Runge")
xlabel("$x$")#titre d'axe d'abscisse
ylabel("$y$")#titre d'axe d'ordonn
show()#afficher



4. Exercice dapplication : Soit la fonction suivante : () =

Crer des tableaux x et fx qui contiennent respectivement 41 valeurs reparties uniformment pour
[4,4], et lvaluation de la fonction f sur ces valeurs.
Tracer la courbe de cette fonction en couleur bleu
Dans la mme figure, tracer en rouge la courbe de la tangent de f en a=2. on peut calculer la driv de f en x=x0 par la
formule f (x0)=(f(x0+h)-f(x0-h))/2h avec une valeur positive infiniment petite.
VIII. La bibliothque SciPy
1. Introduction
Le module scipy contient plusieurs sous modules ddis aux calculs scientifiques comme l'interpolation, l'intgration,
l'optimisation, le traitement d'images, les statistiques, les fonctions spciales, etc
2. Quelques fonctionnalits
scipy.integrate routines d'intgration
scipy.interpolate Interpolation
scipy.io L'entre de donnes et la sortie
scipy.linalg Routines d'algbre linaire
scipy.ndimage paquet de l'image n-dimensionnel
scipy.odr Rgression orthogonale distance
scipy.special Toutes les fonctions mathmatiques spciales
scipy.stats Statistiques

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 45


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

Guide de rfrence : http://docs.scipy.org/doc/scipy/reference/index.html


3. Exemple1 : y'=-2y

A laide de la fonction odeint du module integrate de la bibliothque scipy, on va rsoudre lquation : =

entre t=0 . . 4 avec la condition initiale y(t=0)=1
odeint(f, y0, liste_t) : f est une fonction ayant pour paramtre (dans lordre) liste_y et liste_t qui sont des numpy.array
(liste-y est cre par odeint, liste_t est dfini par lutilisateur);
liste_t : est un numpy.array dfini pralablement et contenant les bornes t0 et tf
liste_ y0 : est un numpy.array contenant les conditions initiales [y0 (y0,)] correspondant la premire valeur de liste_t
liste-y retourn par la fonction odeint est un numpy.array de nombre de lignes gal liste_t et de nombre de colonnes
gal len(liste_y0) contenant la liste des valeurs du vecteur y (y,) pour chaque valeur t du tableau liste_t.
import numpy as np
from scipy.integrate import odeint
import pylab as pl
def direv(y, t ):
return -2*y
#Choix de lintervalle dintgration
X0=0 ;xmax=4
Np=60#nombre de points
liste_t = np.linspace(x0, xmax, np)
liste_y0=1 #ou [1]
liste_y = odeint(direv, liste_y0, liste_t)
pl.plot(liste_t, liste_y)
pl.xlabel('Time [s]')
pl.ylabel('y position')
pl.show()
4. Exercice dapplication de odeint
y = y sin(y) + sin(t) avec y(t=0)=2
5. Exmples
Rsolution dquations avec SciPy : (ln x)x = 3
calcule dintegrales avec SciPy :
Rsout lquation (ln x)x = 3, soit (ln x) x 3 = 0 (f(x)=0 avec f (x)= (ln x) x
3)
from scipy.integrate import quad from s ci p y import
def f( x ) : from scipy.optimize import brentq #Pour utiliser directement brentq
return x2 def f( x ) :
integrale,erreur = quad ( f , 0 , 4 ) return log(x) x 3
print ( integrale) sol = brentq ( f , 1 , 100)
print("racine pour x=" , sol )

Chapitre 9: Mthodes linaires une dimension :Zro des fonctions

Dans ce chapitre nous allons appliquer toutes les notions prcdentes sur les suites et les fonctions, la recherche des
zros des fonctions. Plus prcisment, nous allons voir trois mthodes afin de trouver des approximations des solutions
dune quation du type (f (x) = 0).

I. La dichotomie 1.1.
1. Principe de la dichotomie
Le principe de dichotomie repose sur la version suivante du thorme des valeurs intermdiaires :

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 46


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

La condition f (a) f (b)<= 0 signifie que f (a) et f (b) sont de signes opposs (ou que lun des deux est nul). Lhypothse de
continuit est essentielle !

Ce thorme affirme quil existe au moins une solution de lquation (f (x) = 0) dans lintervalle [a,b]. Pour le rendre
effectif, et trouver une solution (approche) de lquation (f (x) = 0), il sagit maintenant de lappliquer sur un intervalle
suffisamment petit. On va voir que cela permet dobtenir un l solution de lquation (f (x) = 0) comme la limite dune suite.
Voici comment construire une suite dintervalles embots, dont la longueur tend vers 0, et contenant chacun une solution
de lquation (f (x) = 0). On part dune fonction f : [a,b] R continue, avec a < b, et f(a) f (b) <= 0.
Voici la premire tape de la construction :
+
on regarde le signe de la valeur de la fonction f applique au point milieu 2 .
+ +
Si f (a) f ( ) <= 0, alors il existe c [a, ] tel que f (c) = 0.
2 2
+ + +
Si f (a) f ( ) > 0, cela implique que f ( ) f (b) <= 0, et alors il existe c [ ,b] tel que f (c) = 0.
2 2 2

Nous avons obtenu un intervalle de longueur moiti dans lequel lquation (f (x) = 0) admet une solution. On itre alors
le procd pour diviser de nouveau lintervalle en deux.
Le processus complet :
Au rang 0 : On pose 0 = a, 0 = b. Il existe une solution 0 de lquation (f (x) = 0) dans lintervalle [0 , 0].
Au rang 1 :
+0 +0
o Si f (a0 ) f( 0 2 ) <= 0, alors on pose 1 = 0 et 1 = 0 2
+0
o sinon on pose 1 = 0 2 et 1 = 0 .
o Dans les deux cas, il existe une solution 1 de lquation (f (x) = 0) dans lintervalle [1 , 0 ].
......

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 47


Cours de la premire anne CPGE (MPSI, PCSI, TSI)
a+
Au rang n+1 : supposons construit un intervalle [ , ], de longueur 2 , et contenant une solution de
lquation (f (x) = 0). Alors :
+ +
o Si f( ) f ( 2 ) <= 0, alors on pose +1 = et +1 = 2
+
o Sinon on pose +1 = et +1 =
2
o Dans les deux cas, il existe une solution +1 de lquation (f (x) = 0) dans lintervalle [+1, +1 ].
chaque tape on a <= <=
+
On arrte le processus ds que = 2
est infrieur la prcision souhaite.
Comme ( ) est par construction une suite croissante, ( ) une suite dcroissante, et ( 0 lorsque n +,
les suites ( ) et ( ) sont adjacentes et donc elles admettent une mme limite.
Daprs le thorme des gendarmes, cest aussi la limite l de la suite ( ). La continuit de f montre que
f (l) = lim ( ( ) = lim (0) = 0.

Donc les suites ( ) et ( ) tendent toutes les deux vers l, qui est une solution de lquation (f (x) = 0).
2. Calcul derreur :
+
Soit n le nombre dtapes, pour obtenir une prcision , il faudra que lentier n vrifie lingalit 2
<= , cest--dire
()ln()
n>= ln(2)
3. Algorithme :
Donnes : f, a, b,
Traitement
Tant que b - a > 2 faire
m (a + b)/2
Si f(a) f(m) 0 alors
bm
Sinon
am
Fin Si
Fin Tant que
Rsultat : (a + b)/2
4. Mise en pratique de lalgorithme: Code Python
##Recherche approche dune solution dune quation par dichotomie
def dichotomie(f, a, b, epsilon):
assert f (a) * f (b) <= 0 and epsilon > 0
while b - a > 2 * epsilon :
m = (a + b) / 2.
if f(a) * f(m) <= 0 : b = m ,
else : a = m
return (a + b) / 2.

Exemple 1: Approximation de 2

Soit f une fonction dfinie par f x x 2 continue sur lintervalle [1, 2], valeurs relles
2

o f (1) = -1 < 0 et f (2) = 2 > 0 donc lquation f (x) = 0 possde une solution dans [1, 2]
La valeur mdiane de cet intervalle est 1.5.
o f (1.5) = 0.25 > 0 > f (1), donc lquation f (x) = 0 possde une solution dans [1, 1.5].
o f (1.25) = -0.4675 < 0 < f (1.5), donc lquation f (x) = 0 possde une solution dans [1.25, 1.5].
o ...

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 48


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

o f (1.41430664062) 0.000263273715973 > 0 > f (1.4140625), donc lquation f (x) = 0 possde une
solution dans [1.4140625, 1.41430664062].

>>> dichotomie( lambda x : x ** 2 2 , 1 , 2 , 0.000001 )


1.4142141342163086
>>> math.sqrt(2)
1.4142135623730951
5. TP
A laide de la mthode de la dichotomie calculer une valeur approche 101/12 sur lintervalle [1,1.5] avec une
prcision 10-10.(noublie pas denregistrer votre travail pour lutiliser aprs)
Comparer le rsultat avec la mthode fournie par la fonction de python pow(10,1/12)

II. Mthode de Newton


1. Principe de la mthode
Cette mthode, appele aussi Newton-Raphson, consiste approximer le graphe de la fonction au voisinage dun point par la
tangente en ce point.
On considre un intervalle [a, b] et une fonction f de classe C1 de [a, b] dans R. On suppose que f(a)f(b) < 0 et que f ne
sannule pas sur [a, b], alors lquation f(x) = 0 admet une solution sur lintervalle [a, b].
En un point dabscisse x 0 , la tangente a pour quation y f ' x 0 . x x 0 f x 0 , et coupe donc laxe des abscisses en
f x0
x1 x 0
f 'x0

En itrant ce raisonnement, on peut alors construire une suite x n dfinie par :

La mthode de Newton peut ne pas converger si la valeur initiale est trop loin dun zro (do le choix
de valeur initiale). Cependant, si elle converge, elle est beaucoup plus rapide que la mthode de dichotomie
2. Conditions darrt :
Si | Xn - Xn-1| < EPSILON (la prcision) alors Xn est le rsultat de lestimation de la racine
Si n > MAX_ITER alors la mthode diverge ou na pas la convergence assez rapide pour fournir un rsultat.
Attention Si f(Xn-1)= 0, il y aura division par zro.!!!

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 49


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

Algorithme :
On part dune premire valeur et on suit la tangente ; on continue avec lintersection de cette tangente avec laxe des
abscisses jusqu ce que la diffrence entre deux termes conscutifs soit assez petite. Il est ncessaire de ne jamais
rencontrer de point en lequel la drive de f sannule.
Donnes :
f : la fonction
fp : la drive de f
x0 : le point de dpart
: la prcision
nb_iter : compteur ditration
max_iter : le nombre maximal ditrations
Traitement
x x0 # On suppose que x0 est convenablement choisi : fp (x0) 0
y x - f (x) / fp (x)
nb_iter 1
Tant que |y x | > et nb_iter max_iter faire
xy
y y - f (y) / fp (y)
nb_iter nb_iter + 1
Fin Tant que
Si (nb_iter > max_iter )
Afficher "On n'a pas encore la convergence vers la racine"
Sinon
Afficher y

3. Drivation numrique :
La mthode de Newton ncessite la connaissance de la drive de la fonction en jeu. Pour calculer une valeur approche
de la drive dune fonction numrique en un point ( approximation des valeurs de f au mieux), une premire approche
consiste calculer un taux daccroissement :
f x 0 h f x 0 h. f ' x 0 O h 2
f x 0 h f x 0
La drive peut tre approxime par la valeur :
h
En thorie, il suffit de prendre h trs petit pour obtenir une grande prcision dans le calcul de la drive. Il ne faut toutefois
pas perdre de vue la reprsentation des nombres rels en informatique.
Combiner f x 0 h et f x 0 h :

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 50


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

h2
f '' x 0 O h 3
f x 0 h f x 0 h. f ' x 0
2
h2
f x 0 h f x 0 h. f ' x 0 f '' x 0 O h 3
2
permet dobtenir une meilleure approximation de la drive par :
f x 0 h f x 0 h
2h
Voici une implmentation possible du calcul dune valeur approche dune drive qui utilise la deuxime formule
dapproximation est propose ci-aprs. En voici le code Python :
def derivee(f , x0, h) :
return ( f ( x0 + h ) f ( x0 h ) ) / ( 2 * h )

4. Mise ne uvre de la mthode de Newton :


Une fonction qui calcule une valeur approche de la drive a donc t cre. Grce elle, il est possible d crire une
fonction permettant la rsolution numrique d une quation de la forme f (x)= 0 par la mthode Newton. Pour la
version ralise ici, on ne fait pas appel cette fonction (derivee ) . Voici limplmentation de la mthode de Newton en
Python (voir algorithme prcdent):
def newton( f , fp , x0, epsilon , max_iter) :
x = x0
y = x f (x) / fp (x)
nb_ iter = 1
while nb_iter <= max_iter and abs ( x y ) > epsilon :
( x , y ) = ( y , y f ( y ) / fp ( y ) )
nb_iter += 1
if nb_iter == max_iter + 1 :
print("Lalgorithme na pas converge")
else :
return y

Exemple 2 : Approximation de 2

>>> newton( lambda x : x ** 2 2 , lambda x : 2*x , 2 , 0.0001 , 10)


1.4142135623746899
>>> math.sqrt(2)
1.4142135623730951
5. TP
A laide de la mthode de Newton calculer une valeur approche 101/12 sur lintervalle [1,1.5] avec une
prcision 10-10.
Au niveau de prcision et au niveau de la complexit, comparer le rsultat fournie par cette mthode et le
rsultat fournie avec la mthode de la dichotomie (le rsultat fournie par python est pow(10,1/12))

Chapitre 10 : Rsolution approche d'une quation diffrentielle : Mthode d'Euler

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 51


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

I. Introduction :
Le but de ce chapitre est dtudier la rsolution dun problme dynamique une dimension, linaire ou non, conduisant
la rsolution approche dune quation diffrentielle ordinaire par la mthode dEuler. En dautre terme, on veut
trouver une solution une quation diffrentielle de la forme :

y ' t F t , y (t )

(1)
y t 0 y0

Rappelons que la plupart de nombreux phnomnes physiques, de chimie, doptimisation conduisent des rsolutions
numriques dquations diffrentielles (pas ncessairement linaires) pour lesquelles on ne dispose pas de solutions
analytiques.
Exemple 1 :
.. .
Un pendule amorti nous amne tudier lquation : k1 sin k 2 On doit faire une hypothse dangle
.. .
relativement petit pour crire sin , puis k1 k 2 quation diffrentielle linaire coefficients constants
dont on sait dterminer les solutions exactes.
Remarque 1 :
Les hypothses de linarisation peuvent tre trop rductrices voire inexistantes, do la ncessit de pouvoir rsoudre
numriquement les quations diffrentielles.
Remarque 2 :
Une quation diffrentielle du premier ordre normalise peut toujours s'crire sous la forme (1).
Par exemple : y (t) = 2.t.sin(y(t)) + 1 s'crira : y = f ( t ; y ) avec f (u; v) = 2.u.sin(v) + 1.
Parfois la fonction f ne dpend que de y ; nempche, la fonction f devra toujours tre dclare avec les deux variables
t et y (dans cet ordre : variable puis fonction).
Par exemple : y (t) = 2.y(t)2 s'crira : y = f ( t ; y ) avec f (u ; v ) = 2v2.
1. Principe de la mthode d Euler :
Le thorme de Cauchy-Lipschitz assure que sous certaines conditions, lquation (1) admet une unique solution. Mais
la thorie mathmatique ne permet pas de trouver cette solution en gnral.
1.1 Principe :
On cherche calculer numriquement la valeur approche dune solution du problme (1) sur un segment [a, b] avec a =
t0.

On cre alors une subdivision : t 0 a t 1 t 2 ... t n b du segment [a, b] que lon peut supposer rgulire pour

b a b a
simplifier, cest--dire telle que le pas : t k 1 t k h soit indpendant de k. Alors : h , t k a k. et
n n
t k 1 h t k

On va calculer une valeur approche de proche en proche y k y t k partant de la condition initiale y 0 y a (valeur

exacte ici) puis on tire y k 1 partir de y k grce la relation :

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 52


Cours de la premire anne CPGE (MPSI, PCSI, TSI)


y ' t k F t k , y t k F t k , y k

y k 1 y k y k 1 y k
y ' t k ,
t k 1 t k h

ce qui donne : y k 1 y k h.F t k , y k

Ce schma numrique est appel mthode dEuler explicite.


Graphiquement, cela revient faire des approximations successives de courbes par des tangentes.

1.2 Algorithme :
Euler ( F, a , b , y0 , h )
y y0
lisY [ y0 ] # la liste des valeurs renvoyes yk
ta
lisT [ a ]
Tant que t+h b faire
y y + h * F(t , y)
tt+h
Ajout de y dans la liste lisY
Ajout de t dans la liste lisT
Fin Tant que
Retourner ( lisT , lisY )
Remarques :
Cette mthode trs simple un gros inconvnient : chaque tape, on rutilise la valeur prcdemment
calcule, qui est dj une approximation. Les carts vont donc se cumuler.
La principale source derreur de la mthode dEuler provient du pas h qui doit tre pris suffisamment petit.
En effet, les valeurs approches trouves avec cette mthode dpendent videmment du pas h.
Dans la pratique, on est confront au choix du pas h :
Un pas trop petit implique un temps de calcul lev
Un pas trop grand donne un rsultat trop imprcis.

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 53


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

La mthode dEuler est dite une mthode du premier ordre en h


1.3 Mise en oeuvre :
Equations diffrentielles du 1er ordre
La fonction euler va prendre en entre une fonction F , les bornes a et b de lintervalle dtude, la condition initiale y0, et
le pas h. Plus prcisment : avec ces donnes, la fonction va dterminer les approximations de la solution de lquation (
1 ), en rendant un tableau de temps et un tableau de valeurs approches par la mthode dEuler. Les temps sont les a +
k.h majors par b.
def euler ( F , a , b , y0 , h ) :
t=a
y = y0
lisT = [ a ]
lisY = [ y0 ]
while t + h <= b :
y += h * F ( t , y )
lisY.append(y)
t += h
lisT.append( t )
return lisT , lisY
Remarque : On peut prfrer donner comme arguments les abscisses initiale a et finale b, et le nombre de points n. On
calcule alors h = (b - a) / n en consquence.
Un premier essai avec lquation y = y avec la condition initiale y ( 0 ) = 1 et le pas h = 1/3 donne :
>>> euler ( lambda t , y : y , 0 , 1 , 1 , 1./3 )[1]
[1, 1.3333333333333333, 1.7777777777777777, 2.3703703703703702]
La figure suivante prsente les solutions renvoyes pour les pas 0.1, 0.01, 0.001 et 0.0001 :

Equations diffrentielles dordre suprieur

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 54


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

Pour rsoudre des quations diffrentielles dordre n 2, lide est de se ramener une quation vectorielle dordre 1
y

y'
en posant Y . et en crivant Y ' F t,Y .

.
y ( n 1)

Exemples :
1. Lquation y = -y est dordre 2 (ici, lordre dsigne la plus grande drive intervenant dans lquation).

y y' y'
On pose : Y ,alors Y ' , il vrifie donc lquation Y ' F t,Y , avec F :
y ' y '' y

.

.
.. .

2. Lquation du pendule k1 sin k 2 en posant X . , on a X ' ..
il vrifie
.
k1 . k 2 .sin

u v
donc lquation X ' F t , X , avec F : F t ,
v k1v k1 sin(u )
On ramne par ce procd de vectorialisation les quations diffrentielles scalaires dordre p a des quations dordre 1,
n
mais a valeurs dans .
Remarque (Important)
La condition initiale dune quation diffrentielle dordre p consiste en la donne de la valeur de y en t0 mais aussi de celle
de ses p 1 premires drives.

y0
Par exemple, dans le cas p = 2 : Y 0 ,
y0
def euler2 ( F , a , b , y0_yp0 , h):
t=a
les_t = [a]
y = y0_yp0 # list [y0 , y'0]
les_y = [ y0_yp0 ]
while t + h <= b :
y = [ y [ 0 ] + h * F( t , y )[ 0 ] , y [ 1 ] + h * F( t , y )[ 1 ] ]
les_y.append( y )
t += h
les_t.append( t )
return les_t , [ y [ 0 ] for y in les_y]
Exemple : y = -y avec y ( 0 ) = 0 et y ( 0 ) = 1 => f (t , ( u ; v ) ) = ( v , - u)

>>>euler2 ( lambda t , Y : [ Y[1] , -Y[0] ] , 0 , 2 * pi , [ 0 , 1] , 0.2 )

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 55


Cours de la premire anne CPGE (MPSI, PCSI, TSI)

2. Utilisation de la bibliothque Scipy


Python dispose dune bibliothque de mthodes numriques, lune delle sappelle odeint et permet dobtenir des
solutions approches dquations diffrentielles (ce nest pas la mthode dEuler qui est utilise mais une mthode plus
sophistique). La syntaxe est la suivante :
from scipy import integrate
integrate.odeint( F , y_0 , T )
On donne donc comme arguments odeint la fonction F, la valeur initiale y_0, et une liste T (ou un tableau numpy) de
temps en lesquels on veut une approximation de la solution.
Attention : Ordre des arguments de F
La procdure odeint( F , y_0 , T ) permet dintgrer numriquement une quation diffrentielle du type :

y ' t F y t , t (ordre invers par rapport lusage commun : voir lquation (1)).

Exemple 1 : Lquation y + y = 0 avec la condition initiale y ( 0 ) = 1 sur lintervalle [ 0 , 3 ] et un pas de 1


>>> def F ( y , t ) :
... return - y
...
>>> y0 = 1 # Condition initiale
>>> t = np.arange(4) # Points temporels pour les calculs
>>> integrate.odeint(f,y0,t)
array([[ 1. ],
[ 0.36787947 ],
[ 0.13533528 ],
[ 0.04978706 ]])
>>> np.exp(t) # Vrification
[1.0 , 0.36787944117144233 , 0.1353352832366127 , 0.049787068367863944 ]

KHALID LABHALLA CPGE REDA SLAOUI AGADIR 56

Vous aimerez peut-être aussi