Problème :
Jeux pédagogique (gestion des ressources)
Aider les deux nobles paysans Ahmed et Ali de partager leur huile d’olive en deux quantités égaux dans les conditions suivantes :
1 bidon de 5L;
1 bidon de 3L.
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
1
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
2
Résolution du jeux :
La situation actuel est : B8←8L, B5←0L, B3←0L.
La situation souhaite est : B8←4L, B5←4L, B3←0L.
Résolution du jeux :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
3
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
4
Enoncé du problème
Cahier des charges
Algorithme
Programmation
Résultats
Etapes de réalisation d’un programme
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
5
séparation analyse/codage (pas de préoccupation de syntaxe)
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
6
Notion d’algorithme
I) Définition de l’algorithme :
Un algorithme est une suite d’actions appliquées sur des données dans un ordre logique afin d’obtenir des résultats.
Exemple :
Réaliser une opération de calcule grâce à la calculatrice, tel que 2+7 :
Début
Fin
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
7
Remarque :
La résolution d’un problème se fait par la méthode suivante(analyse) :
Exercice d’application :
Calculer la somme de deux nombres réels.
Deux nombre réel A et B
La somme S de deux nombres
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
8
Additionner les deux nombres A et B pour obtenir le résultat S
II) Notion de données :
Une constante est une donnée fixe qui ne varie pas tout le long de l’algorithme.
Exemples :
Pi (π)=3,14 ; g=9,81 N/g ;R=8,31 SI ; Na=6,02 1023 ; e=1,6 10-19
1) Les constantes :
Une variable est le nom d’un espace mémoire (case mémoire) dont le contenu peut changer pendant l’exécution d’un algorithme.
2) Les variables :
Exemples :
Nom_eleve ; note_eleve ; Prix_unitaire ; x ; nom4
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
9
3) Les caractéristiques d’une donnée :
Pour définir une donnée il faut préciser les éléments suivants :
Règles :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
10
Conseil :
Pour la lisibilité du code choisir des noms significatifs qui décrivent les données manipulées.
Remarque :
En pseudo-code algorithmique, on va respecter les règles citées, même si on est libre dans la syntaxe.
Rappel :
Variables liste d'identificateurs : type
Exemples :
Variables i, j,k : entier
x, y : réel
OK : booléen
ch1, ch2 : chaîne de caractères
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
11
Remarques :
Deux valeurs VRAI ou FAUX, TRUE ou FALSE, 0 ou 1.
Type numérique (entier ou réel) :
Type logique ou booléen :
Lettres majuscules, minuscules, chiffres, symboles, ….
Type caractère :
Type chaîne de caractère :
Toute suite de caractères.
Exemples :
’A’, ’a’, ’1’, ’?’, …
Exemples :
"Nom, Prénom", "code postale:1000", "CPGE ", …
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
12
1) Instruction de lecture :
III) Les instructions de base :
Cette instruction permet de lire les données à travers le clavier, appelée également Instruction d’entrée.
L’instruction de lecture est notée :
Syntaxe :
Lire (Variable)
Exemples :
Lire (Note_eleve4) ; Lire (x) ; Lire (A8)
2) Instruction d’écriture :
Cette instruction permet d’afficher un message, le contenu d’une variable et/ou le résultat d’une opération de calcul, appelée aussi Instruction de sortie.
L’instruction d’écriture est représentée par :
Syntaxe :
Ecrire (Variable) ; Ecrire ("message") ; Ecrire (opération de calcul)
Exemples :
Ecrire (Note_eleve4) ; Ecrire ("Bonjour") ; Ecrire ((Note_eleve4+x)/3) ; Ecrire (x,A8,x+A8)
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
13
3) L’affectation (Assignation) :
Cette instruction permet d’attribuer une valeur à une variable, elle est représentée par une flèche dirigée vers la gauche "←".
Syntaxe :
Variable ← valeur, une autre variable ou bien une expression
Exemples :
X ← 12
X ← Y+4
Y ← X
12
X
Y+4
12
12
16
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
14
Exercice1 :
Donnez les valeurs des variables A, B et C après exécution des instructions suivantes ?
Algorithme Affectation1
Variables A, B, C : Entier
Debut
A←3
B←7
A←B
B←A+5
C←A+B
C←B-A
Ecrire (A,B,C)
Fin
Algorithme Affectation2
Variables A, B : Entier
Debut
A←1
B←2
A←B
B←A
Ecrire (A,B)
Fin
Les deux dernières instructions (Version2) permettent-elles d’échanger les valeurs de A et B ?
Exercice2 :
Ecrire un algorithme permettant d’échanger les valeurs de deux variables A et B
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
15
Appliquer la relation qui donne la moyenne de deux nombres.
Algorithme Moyenne1
Variables A, B, C : Réel
Debut
Lire (A)
Lire (B)
C ← (A+B)/2
Ecrire (C)
Fin
L’en-tête
Les déclarations
Le corps
Algorithme Moyenne1
Variables A, B, C : Réel
Debut
Lire (A,B)
C ← (A+B)/2
Ecrire (C)
Fin
Exercice d’application :
Ecrire un algorithme qui permet de lire deux nombres réels et d’afficher leur moyenne.
Deux nombres réels
La moyenne des deux nombres réels
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
16
Algorithme Moyenne2
Variables A, B, C : Réel
Debut
Ecrire ("Donner la valeur de A")
Lire (A)
Ecrire ("Donner la valeur de B")
Lire (B)
C ← (A+B)/2
Ecrire ("La moyenne de A et B est :",C)
Fin
L’en-tête
Les déclarations
Le corps
Algorithme Moyenne2
Variables A, B, C : Réel
Debut
Ecrire ("Donner la valeur de A et de B")
Lire (A,B)
C ← (A+B)/2
Ecrire ("La moyenne de A et B est :",C)
Fin
Ou bien :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
17
Remarques :
Opérateur | Représentation arithmétique | Représentation algorithmique | Exemple |
Addition | + | + | A+B |
Soustraction | - | - | A-B |
Multiplication | × | * | A*B |
Division | ÷ | / | A/B |
Puissance | An | ^ | A^n |
Modulo, reste de la division entière | 21÷8=2 Reste 5 | 21 mod 8=5 | A mod B |
(du plus prioritaire au moins prioritaire) :
2 + 3 * 7 vaut 23
Exemples :
à effectuer en priorité :
Exemples :
(2 + 3) * 7 vaut 35
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
18
Langages informatiques
I) Définition :
Un langage informatique est un outil permettant de donner des ordres (instructions) à la machine.
Définition :
II) Langage machine :
Exemple :
A= 01000001
?=00111100
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
19
II) Langage haut niveau :
Code source
en langage évolué
Langage machine
Compilateur ou
Interpréteur
1) Compilateur/interpréteur :
fichier exécutable
fichier source
exemple.c
Compilateur
Exécution
exemple.exe
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
20
fichier source
Interprétation+Exécution
exemple.py
Un langage de programmation est un langage informatique composé d’un ensemble d’instructions pouvant être traduites et exécutées par un ordinateur.
Exemple :
Basic, Pascal, COBOL, Fortaran, C, C++, LOGO, Python,…
A) Définition d’un langage de programmation :
1) Langages python (Code python) :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
21
B) Définition d’un programme :
Un programme est une suite ordonnée d’instructions, compréhensibles par l’ordinateur, appliqué à des données afin d’obtenir des résultats.
C) L’identificateur :
Un identificateur en langage python doit débuter par une lettre suivie par un nombre de lettres ou de chiffres.
x, max, val4
Exemple :
D) Les types de données :
Pas de valeur limite explicite, correspond au moins au long int du C (-263 à 263 ).
Correspond au double du C (-1.7 10308 à +1.7 10308) .
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
22
Ce type sert à manipuler les caractères.
Ce type prend la valeur False pour faux et la valeur True pour vrai.
C) Les instructions :
i) l’instruction d’entrée :
L’instruction de lecture est symbolisée par input, elle permet le transfert des données vers la mémoire centrale .
Syntaxe :
l’identificateur=input()
ii) l’instruction de sortie :
L’écriture se fait de façon semblable que la lecture à l’aide de l’instruction print.
Syntaxe :
print(l’identificateur)
Exemple :
x=input()
Exemple :
print(x)
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
23
iii) l’instruction d’affectation :
Cette instruction permet de mettre une valeur dans une variable. Le symbole de l’affectation est =
Syntaxe :
variable = valeur
Remarques :
Type | Format | |
Entier | int | %d |
Réel (Flottant) | float | %f ou %e |
Caractère | char | %c |
Chaîne de caractères | char | %s |
Exemple :
x=4
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
24
Résultats
Enoncé du problème
Cahier des charges
Algorithme
Programme source
Interprétation et Exécution
Etapes de réalisation d’un programme
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
25
Structures de contrôle de base
I) Structure séquentielle :
La structure séquentielle est une suite d’instructions qui s’exécute l’une après l’autre dès le début jusqu'à la fin dans un algorithme.
Exemple :
Calcul de la moyenne des deux nombres réels A et B.
Définition :
(Algorithme et Programmation)
Langage python
# Programme Moyenne
A=input('Donner A:')
B=input('Donner B:')
A=float(A)
B=float (B)
Moyenne=(A+B)/2
print("La moyenne de",A,"et",B,"=",Moyenne)
Algorithme
Algorithme Moyenne
Variables A, B, Moyenne : Réel
Debut
Ecrire ("Donner la valeur de A")
Lire (A)
Ecrire ("Donner la valeur de B")
Lire (B)
Moyenne ← (A+B)/2
Ecrire ("La moyenne de A et B est :", Moyenne )
Fin
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
26
1) Définition :
II) Structure alternative :
La structure alternative permet d’exécuter un bloc d’instructions ou un autre en fonction de la réponse de la condition.
Langage python
if condition: ou if condition:
Instruction Instructions
Algorithme
Si condition alors
Instruction ou suite d'instructions
Finsi
2) Structure alternative simple :
Cette structure permet d’effectuer certaines opérations ou au contraire de ne rien faire.
Syntaxe :
Si la condition est vérifiée alors le bloc d’instructions serait exécuté, sinon il serait ignoré.
Cette instruction se lit :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
27
Langage python
if Moyenne= =10:
print("Juste la moyenne")
Algorithme
Si Moyenne=10 alors
Ecrire ("Juste la moyenne")
Finsi
Remarques :
Opérateurs | Signification | Représentation algorithmique | Exemple | Représentation Langage python | Exemple |
= | égal | = | A=B | = = | A= =B |
≠ | Différent de… | <> | A<>B | != | A!=B |
< | Strictement plus petit que… | < | A<B | < | A<B |
> | Strictement plus grand que… | > | A>B | > | A>B |
≤ | plus petit ou égal à… | <= | A<=B | <= | A<=B |
≥ | plus grand ou égal à… | >= | A>=B | >= | A>=B |
Exemple :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
28
Cette structure permet d’exécuter un bloc d’instructions ou un autre en fonction d’une condition.
Si la condition est vérifiée alors le bloc d’instructionsA sera exécuté et le bloc, d’instructionsB sera ignoré. Sinon le bloc d’instructionsB sera exécuté et le bloc d’instructionsA sera ignoré.
3) Structure alternative complète :
Cette instruction se lit :
Syntaxe :
Code python
if condition: ou if condition:
InstructionA InstructionsA
else : else :
InstructionB InstructionsB
Algorithme
Si condition alors
InstructionsA
Sinon
InstructionsB
Finsi
Exemple :
Langage python
if Moyenne= =10:
print("Juste la moyenne")
else :
print("La moyenne est différente de 10")
Algorithme
Si Moyenne=10 alors
Ecrire ("Juste la moyenne")
Sinon
Ecrire ("La moyenne est différente de 10")
Finsi
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
29
4) Structure alternative imbriquée :
Cette structure est utilisée quand on a plus de deux conditions.
Syntaxe :
Algorithme
Si (condition1) alors
InstructionsA
Sinon
Si (condition2) alors
InstructionsB
Sinon
Si (condition3) alors
InstructionsC
Sinon
InstructionsD
Finsi
Finsi
Finsi
Langage python
if condition1:
InstructionsA
elif condition2:
InstructionsB
elif condition3:
InstructionC
else :
InstructionD
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
30
Algorithme
Si (Moyenne=10) alors
Ecrire ("Juste la moyenne")
Sinon
Si (Moyenne<10) alors
Ecrire ("La moyenne est inferieure à 10")
Sinon
Ecrire ("La moyenne est supérieure à 10")
Finsi
Finsi
Langage python
if Moyenne= =10 :
print("Juste la moyenne")
elif Moy<10 :
print("La moyenne est inferieure à 10")
else :
print("La moyenne est supérieure à 10")
Exemple1 :
Exemple2 :
Algorithme
Algorithme Temperature_eau
Variable Temperature : Entier
Debut
Ecrire ("Entrez la température de l’eau :")
Lire (Temperature)
Si (Temperature<=0) Alors
Ecrire ("C’est de la glace")
Sinon
Si (Temperature<=100) Alors
Ecrire ("C’est du liquide")
Sinon
Ecrire ("C’est du vapeur")
Finsi
Finsi
Fin
Langage python
# Programme Temperature Eau
Temperature=input('Entrez la température de l’eau:')
Temperature=int(Temperature)
if Temperature<=0 :
print("C’est de la glace")
elif Temperature<=100 :
print("C’est du liquide")
else :
print("C’est du vapeur")
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
31
Exemple3 :
Algorithme
Algorithme gestion_feu
Variable Couleur : caractere
Debut
Ecrire ("De quelle couleur est le feu?")
Lire (Couleur)
Si ((Couleur = ‘V’)OU(Couleur = ‘v’)) Alors
Ecrire ("Je passe")
Sinon
Si ((Couleur = ‘O’)OU(Couleur = ‘o’)) Alors
Ecrire ("Je ralentis")
Sinon
Si ((Couleur = ‘R’)OU(Couleur = ‘r’)) Alors
Ecrire ("Je m’arrête")
Sinon
Ecrire ("Cette couleur n’est pas une couleur de feu")
Finsi
Finsi
Finsi
Fin
Code python
# Programme Gestion Feu
Couleur=input('De quelle couleur est le feu?')
if Couleur= ='V' or Couleur= ='v':
print("Je passe")
elif Couleur= ='O' or Couleur= ='o':
print("Je ralentis")
elif Couleur= ='R' or Couleur= ='r':
print("Je m’arrête")
else:
print("Cette couleur n’est pas une couleur de feu")
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
32
5) Structure de choix :
Cette structure permet d’effectuer un choix parmi plusieurs cheminement proposés.
Syntaxe :
Algorithme
Selon que identificateur vaut
Valeur 1 faire Instructions 1
Valeur 2 faire Instructions 2
Valeur n faire Instructions n
Autrement que Instructions n+1
Finselon
Langage python
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
33
Exemple :
Algorithme
Algorithme gestion_feu1
Variable Couleur : caractere
Debut
Ecrire ("De quelle couleur est le feu?")
Lire (Couleur)
Selon que Couleur vaut
‘V’ ‘v’ faire Ecrire ("Je passe")
‘O’ ‘o’ faire Ecrire ("Je ralentis")
‘R’ ‘r’ faire Ecrire ("Je m’arrête")
Autrement que Ecrire ("Cette couleur n’est pas une couleur de feu")
Finselon
Fin
Code python
# Programme Gestion Feu
Couleur=input('De quelle couleur est le feu?')
if Couleur= ='V' or Couleur= ='v':
print("Je passe")
elif Couleur= ='O' or Couleur= ='o':
print("Je ralentis")
elif Couleur= ='R' or Couleur= ='r':
print("Je m’arrête")
else:
print("Cette couleur n’est pas une couleur de feu")
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
34
II) Instructions itératives (les boucles) :
Les boucles servent à répéter l'exécution d'un groupe d'instructions un certain nombre de fois.
Langage python
for compteur in range(initiale,finale+1,pas) :
suite d'instructions
Algorithme
Pour compteur allant de initiale à finale par pas Faire
Instructions
FinPour
1) Les boucles Pour ou avec compteur :
On distingue trois sortes de boucles en langages de programmation.
Syntaxe :
On y répète des instructions en faisant évoluer un compteur (variable particulière) entre une valeur initiale et une valeur finale.
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
35
Exemple :
Langage python
# Programme Compteur
for i in range(1,6) :
print("La valeur de i=",i)
Algorithme
Algorithme Compteur
Variable i : entier
Debut
Pour i allant de 1 à 5 par pas 1 Faire
Ecrire (" La valeur de i est : " ,i)
FinPour
Fin
Algorigramme :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
36
Remarque :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
37
Exemple :
Langage python
# Programme Compteur
for i in range(1,6) :
i=i-1
print("La valeur de i=",i)
Algorithme
Algorithme Compteur
Variable i : entier
Debut
i←0
Pour i allant de 1 à 5 Faire
i←i-1
Ecrire (" La valeur de i est : " ,i)
FinPour
Fin
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
38
Langage python
while condition :
suite d'instructions
Algorithme
TantQue condition Faire
instructions
FinTantQue
2) Les boucles Tant que :
Syntaxe :
On y répète des instructions tant qu'une certaine condition est réalisée.
Exemple :
Langage python
# Programme Compteur
i=0
while i<6 :
print("La valeur de i=",i)
i=i+1
Algorithme
Algorithme Compteur
Variable i : entier
Debut
i←0
TantQue i<=5 Faire
Ecrire (" La valeur de i est : " ,i)
i←i+1
FinTantQue
Fin
i) boucle Tant que … Faire :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
39
Langage python
Algorithme
Faire
instructions
TantQue condition
Syntaxe :
Exemple :
Langage python
Algorithme
Algorithme Compteur
Variable i : entier
Debut
i←0
Faire
Ecrire (" La valeur de i est : " ,i)
i←i+1
TantQue i<=5
Fin
i) boucle Faire…Tant que :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
40
Algorigramme :
Remarques :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
41
Exemple de boucle infinie :
Attention aux boucles infinies !!!!
Langage python
# Programme Compteur
i=1
while i>0 :
print("La valeur de i=",i)
i=i+1
Algorithme
Algorithme Infinie
Variable i : entier
Debut
i ← 1
TantQue i>0 Faire
Ecrire("La valeur de i=",i)
i ← i+1
FinTantQue
Fin
Choix d'un type de boucle :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
42
Langage python
Algorithme
Faire
Instructions
Jusqua condition
Syntaxe :
Exemple :
Langage python
Algorithme
Algorithme Compteur
Variable i : entier
Debut
Faire
Ecrire (" La valeur de i est : " ,i)
Jusqua i>5
Fin
3) Boucle Faire…Jusqu’à :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
43
La boucle Pour est un cas particulier de TantQue (cas où le nombre d'itérations est connu et fixé). Tout ce qu'on peut écrire avec Pour peut être remplacé avec TantQue (la réciproque est fausse).
Lien entre Pour et TantQue :
Langage python
for compteur in range(initiale,finale+1,pas) :
suite d'instructions
Algorithme
Pour compteur allant de initiale à finale par pas Faire
Instructions
FinPour
Peut être remplacé par :
Exemple :
Langage python
# Programme Compteur
compteur =initiale
while compteur <= finale :
Instructions
compteur = compteur+1
Algorithme
Algorithme Compteur
Variable compteur : entier
Début
compteur ← initiale
TantQue compteur <= finale Faire
Instructions
compteur ← compteur+1
FinTantQue
Fin
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
44
Algorithme
Algorithme Boucle Imbriquée
Variable A,B,Moy : Reels
Reponse : caractère
Début
Reponse=‘o’
TantQue Reponse=‘O’ OU Reponse=‘o’ Faire
Ecrire (" Donner A et B :")
Lire(A,B)
Moy=(A+B)/2
Ecrire("La moyenne de ",A, "et",B, "est",Moy)
Si (Moy=10) alors
Ecrire ("Juste la moyenne")
Sinon
Si (Moy<10) alors
Ecrire ("La moyenne est inferieure à 10")
Sinon
Ecrire ("La moyenne est supérieure à 10")
Finsi
Finsi
Ecrire(" Voulez -Vous Continuer à exécuter ce programme? O/N ")
Lire(Reponse)
TantQue Reponse<>‘O’ ET Reponse<> ‘o’ ET Reponse<> ‘N’ ET Reponse<> ‘n’ Faire
Ecrire(" Donner une réponse O/N ")
Lire(Reponse)
FinTantQue
FinTantQue
Ecrire("Merci, Au revoir!!!!")
Fin
3) Boucle imbriquées :
Les instructions d'une boucle peuvent être des instructions itératives. Dans ce cas, on aboutit à des boucles imbriquées.
Exemple :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
45
Langage python
# Programme Boucle Imbriquée
Reponse='o'
while Reponse=='o' or Reponse=='O' :
A=input('Donner A:')
B=input('Donner B:')
A=int(A)
B=int(B)
Moy=(A+B)/2
print('La moyenne de',A,'et',B,'est',Moy)
if Moy==10:
print("Juste la moyenne")
elif Moy<10:
print("La moyenne est inferieure à 10")
else:
print("La moyenne est supérieure à 10")
print(" Voulez -Vous Continuer à exécuter ce programme? O/N")
Reponse=input()
while Reponse!='o' and Reponse!='O' and Reponse!='N' and Reponse!='n':
print("Donner une réponse O/N")
Reponse=input()
print("Merci, Au revoir!!!!")
Imbrications autorisées
Boucle 1
Fin Boucle 1
Boucle 2
Fin Boucle 2
Boucle 4
Fin Boucle 4
Boucle 3
Fin Boucle 3
Imbrications interdites
Boucle 1
Fin Boucle 1
Boucle 2
Fin Boucle 2
Boucle 4
Fin Boucle 4
Boucle 3
Fin Boucle 3
Imbrications de boucles :
*
46
Ingénierie numérique et simulation-MPSI/TSI/PCSI
L’instruction break :
Elle sert à interrompre le déroulement d’une boucle.
L’instruction Continue :
Elle permet de passer au tour de boucle suivant.
47
Un algorithme qui détermine le premier nombre entier N tel que la somme de 1 à N dépasse strictement 100.
Algorithme
Algorithme somme2
Variables som, i : entier
Debut
som ← 0
i ← 1
TantQue (som <=100) Faire
som ← som + i
i ← i+1
FinTantQue
Ecrire ("La valeur cherchée est N= ",i-1)
Fin
Langage python
# Programme Somme100
i=0
Som=0
while Som<=100:
Som=Som+i
i=i+1
print("La valeur cherchée est N =",i-1)
Exercice1 :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
48
Algorithme
Algorithme puissance
Variables x, puiss : réel
n, i : entier
Debut
Ecrire (" Entrez la valeur de x ")
Lire (x)
Ecrire (" Entrez la valeur de n ")
Lire (n)
puiss ← 1
Pour i allant de 1 à n Faire
puiss← puiss*x
FinPour
Ecrire (x, " à la puissance ", n, " est égal à ", puiss)
Fin
Langage python
# Programme Puissance
x=int(input("Entrez la valeur de x:"))
n=int(input("Entrer la valeur de n:"))
puiss=1
for i in range(1,n+1):
puiss=puiss*x
print(x,"à la puissance",n,"est égal à",puiss)
Exercice2 :
Donner un programme qui Calcul x à la puissance n où x est un réel non nul et n un entier positif ou nul.
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
49
Algorithme
Algorithme factorielle
Variables n,fact : entier
Debut
Ecrire (" Entrez la valeur de n")
Lire (n)
fact← 1
Pour i allant de 1 à n Faire
fact← fact*i
FinPour
Ecrire (" La factorielle de", n ,"est :", fact)
Fin
Langage python
# Programme Puissance
n=int(input("Entrer la valeur de n:"))
fact=1
for i in range(1,n+1):
fact=fact*i
print("La factorielle de",n,"est:",fact)
input()
Exercice3 :
Donner un programme qui Calcul la factorielle d’un nombre entier n.
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
50
Algorithme
Algorithme Fibonacci
Variables n, j, A,B,C : entier
Debut
B ← 1
C ← 1
Ecrire (" Donner La valeur de n ")
Lire (n)
Si (n=0 OU n=1) alors
Ecrire (" La valeur Un=1")
Sinon
Pour j allant de 2 à n Faire
A ←B + C
C ← B
B ← A
FinPour
Ecrire (" La valeur Un=",A)
Finsi
Fin
Langage python
# Programme Fibonacci
n=int(input("Entrer la valeur de n:"))
B=1
C=1
if n= =0 or n= =1 :
print("La valeur U",n,"=1")
else:
for j in range(2,n+1):
A=B+C
C=B
B=A
print("La valeur U",n,"=",A)
input()
Exercice4 :
Déterminez un algorithme permettant de calculer le terme de rang n de la suite de. Fibonacci. Avec : U0=U1=1 et Un=Un-1+Un-2.
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
51
Analyse descendante : Diviser pour régner
Diviser pour régner consiste à décomposer le problème complexe à résoudre en plusieurs sous problèmes moins complexes. A refaire cette décomposition sur les sous problèmes jusqu’à obtenir des sous problèmes faciles à résoudre.
Conclusion :
La solution à un problème bien défini peut être formulée comme une suite des trois énoncés suivants :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
52
A
A1
A2
A
A1
A2
A11
A12
A21
A22
A
Action
abstraite
Actions mois
abstraites
Actions concrètes
Exemple :
Algorithme de résolution d'équation de second degré :
a x2 + b x + c = 0
53
ax2+bx+c=0
bx+c=0
ax2+bx+c=0
c=0
Infinités de solutions
Pas de solutions
x=-c/b
Δ=b2-4ac
Δ=0
x=-b/2a
Δ≠0
Δ<0
Pas de solutions réelles
Δ>0
x1=-b-(Δ)1/2/2a
x2=-b+(Δ)1/2/2a
a=0
a≠0
b=0
c=0
b≠0
c≠0
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
54
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
55
Algorithme Eq_Second_Degré
Réel a, b, c , Delta
Début
Ecrire ("Donner les coefficients : ")
Lire(a,b,c)
Si (a = 0) alors
Si (b = 0) alors
Si (c = 0) alors
Ecrire ("Infinités de solutions")
Sinon
Ecrire ("Pas de solutions")
FSi
Sinon
Ecrire ("Equation de 1er degré, une racine réelle : ",-c/b)
FSi
Sinon
Delta ← b*b –4*a*c
Si (Delta = 0) Alors
Ecrire ("Une racine réelle double : " , -b/(2*a))
Sinon
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
56
Si (Delta > 0) Alors
Ecrire("Deux racines réelles : x1 = ", (-b + racine(Delta)) /(2*a) , " x2 = ", (-b + racine(Delta)) /(2*a) )
Sinon
Ecrire("Pas de solutions réelles ")
FSi
FSi
FSi
Fin
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
57
Complexités :
C’est l’étude de l’efficacité comparée des algorithmes. On mesure ainsi le temps et aussi l’espace nécessaire à un algorithme pour résoudre un problème.
requis par le calcul.
temporelles et spatiales pour un modèle de machine donné ;
exprimé de manière la plus indépendante possible des conditions
pratiques d’exécution.
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
58
Les principales classes de complexité :
Langage C :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
59
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
60
Liste des caractères non imprimables et des caractères spécifiques :
\f | Saut de page |
\n | Saut de ligne |
\r | Retour chariot |
\t | Tabulation horizontale |
\v | Tabulation verticale |
\\ | \ |
\" | " |
Remarque :
Type | Format | |
Entier | int | %d |
Réel (Flottant) | float | %f ou %e |
Chaîne de caractères | str | %s |
Bibliothèques :
Une bibliothèque est un ensemble de fonctions. Celles-ci sont regroupées et mises à disposition afin de pouvoir être utilisées sans avoir à les réécrire.
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
61
Liste des caractères non imprimables et des caractères spécifiques :
\n | Saut de ligne |
\r | Retour chariot |
\t | Tabulation horizontale |
\\ | \ |
\" | " |
Programmation modulaire
Fonctions et procédures
62
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
ALGORITHMIQUE
Fonctions et procédures :
63
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Fonctions :
Fonction nom_fonction (paramètres et leurs types) : type_fonction
Instructions constituant le corps de la fonction
Retourne (…)
FinFonction
64
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Fonction SommeCarre (x : réel, y: réel ) : réel
variable z : réel
z ←x^2+y^2
Retourne (z)
FinFonction
Fonction Pair (n : entier ) : booléen
Retourne (n mod 2=0)
FinFonction
65
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Exemple :
Utilisation des fonctions :
variables z : réel, b : booléen
Début
b ←Pair(3)
z ←5*SommeCarre(7,2)+1
Ecrire("SommeCarre(3,5)= ", SommeCarre(3,5))
Fin
66
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Arguments d'une fonction :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
67
Procédures :
Procédure nom_procédure (paramètres et leurs types)
Instructions constituant le corps de la procédure
FinProcédure
68
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Appel d'une procédure :
Procédure exemple_proc (…)
…
FinProcédure
Algorithme exepmleAppelProcédure
Début
exemple_proc (…)
…
Fin
69
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Paramètres d'une procédure :
70
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Variables locales et globales :
71
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Variables locales et globales :
72
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
73
Langage python
def nom_fonction (paramètres) :
" Commentaire "
Instructions constituant le corps de la fonction
return (…)
Transmission des paramètres : exemples :
Procédure incrementer1 (x : entier par valeur, y : entier par adresse)
x ← x+1
y ← y+1
FinProcédure
Algorithme Test_incrementer1
variables n, m : entier
Début
n ← 3
m ← 3
incrementer1(n, m) résultat :
écrire (" n= ", n, " et m= ", m) n=3 et m=4
Fin
Remarque : l'instruction x ← x+1 n'a pas de sens avec un passage par valeur
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
74
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
75
Langage python
#Programme Incremetation1
#Definition de la Procédure Incremetation
def Incremetation(x) :
"Echange le contenu de deux variables"
global y
x=x+1
y=y+1
�
#Programme principale
x=float(input('Donner x:'))
y=float(input('Donner y:'))
print("x=",x,"et y=",y)
Incremetation(x)
print("x=",x,"et y=",y)
input()
Transmission des paramètres : exemples :
Procédure qui échange le contenu de deux variables :
Procédure Echange (x : réel par adresse, y : réel par adresse)
variables z : réel
z ← x
x ← y
y ← z
FinProcédure
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
76
Langage python
#Definition de la Procédure Permutation
def Echange() :
"Echange le contenu de deux variables"
global x
global y
z=x
x=y
y=z
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
77
Remarque :
Type | Format | |
Entier | int | %d |
Réel (Flottant) | float | %f ou %e |
Chaîne de caractères | str | %s |
Bibliothèques :
Une bibliothèque est un ensemble de fonctions. Celles-ci sont regroupées et mises à disposition afin de pouvoir être utilisées sans avoir à les réécrire.
from math import sqrt
import math as ma
Exemple :
from math import *
import math
Exemple :
print(‘la racine carrée de %d est %f' % (n,sqrt(n)))
Les tableaux
78
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Exemple introductif :
nbre ← 0
Si N1 >10 alors
nbre ←nbre+1
FinSi
….
Si N30>10 alors
nbre ←nbre+1
FinSi
c'est lourd à écrire
79
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Tableaux
variable tableau identificateur[dimension] : type
variable tableau notes[30] : réel
80
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Remarques :
81
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Saisie et Affichage :
Algorithme SaisieTab� variable i: entier
Tableau T[n] :reel
Debut
Pour i allant de 0 à n-1� Ecrire ("Saisie de l'élément ", i + 1)
Lire (T[i] )
FinPour
Fin
Algorithme AfficheTab� variable i: entier
Tableau T[n] :reel
Debut
Pour i allant de 0 à n-1� Ecrire ("T[",i, "] =", T[i])
FinPour
Fin
82
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Exemples :
Algorithme Moyenne
Variables i ,nbre : entier
tableau notes[30] : réel
Début� nbre ← 0
Pour i allant de 0 à 29 � Ecrire ("Saisie de l'élément ", i + 1)
Lire (notes[i])
Si notes[i] >10 alors
nbre ← nbre+1
FinSi
FinPour
Ecrire (" Le nombre de notes supérieures à 10 est : ", nbre)
Fin
83
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
84
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
En python les tableaux peuvent être représentés par des listes:
Une liste est une collection modifiable d’éléments éventuellement hétérogènes.
>>> T= [5, 38, 10, 25]
>>> T
[17, 38, 10, 25]
Voir cours : les liste en python
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
85
T=10*[0] #initialisation de la liste
for i in range(10):
T[i]=int(input(‘Donner T[%d]:' % (i)))
s=0
for i in range(10):
s+=T[i]
print ('s=',s)
Exemple 1 : Version1
Saisir 10 nombres entiers dans un tableau T, puis afficher leur somme.
T=10*[0] #initialisation de la liste
s=0
for i in range(10):
T[i]=int(input(‘Donner T[%d]:' % (i)))
s+=T[i]
print ('s=',s)
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
86
T=[] #liste vide
for i in range(10):
e=int(input(‘Donner T[%d]:' % (i)))
T+=[e]
Exemple 1 : Version2
s=0
for x in T:
s+=x
print ('s=',s)
T=[] #liste vide
s=0
for i in range(10):
e=int(input(‘Donner T[%d]:' % (i)))
T+=[e]
s+=e
print ('s=',s)
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
87
Chaînes de caractères : strings
Accès à un caractère:
>>> s = 'Bonjour'
>>> s[2]
>>> 'n'
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
88
Concaténation :
>>> s = 'Bonjour '+ 'lecteur !'
>>> s = 'Bonjour lecteur !‘
Longueur :
>>> len('Bonjour')
>>> 7
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
89
Sous-chaînes :
Un ensemble de caractères consécutifs à l’intérieur d’une chaîne s’appelle une sous-chaîne. Ainsi, 'lecteur' ou 'jour lec' sont des sous-chaînes de 'Bonjour lecteur !'. Pour extraire une sous-chaîne de s, on écrit s[i:j] où i est l’indice du premier caractère de la sous-chaîne et j est l’indice du dernier caractère plus un.
>>> 'Bonjour'
>>> 'lecteur'
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
90
>>> 'lecteur' in 'Bonjour lecteur !'
>>> True
>>> 'Bjr' in 'Bonjour lecteur !'
>>> False
Test d’appartenance :
>>> 'o' in 'Bonjour'
>>> True
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
91
>>> int('123')
>>> 123
>>> float('1.2')
>>> 1.2
>>> bool('True')
>>> True
Conversion vers des types simples :
>>> str(1.2)
>>> '1.2'
92
# Valeur maximale
def Maximum(T):
Max=T[0]
for i in range(1,len(T)):
if T[i]>Max:
Max=T[i]
return(Max)
Exercice 1 :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
#Indice de la valeur maximale
def Indice_Maximum(T):
Max=T[0]
p=0
for i in range(1,len(T)):
if T[i]>Max:
Max=T[i]
p=i
return(p)
93
# Valeur minimale
def Minimum(T):
Min=T[0]
for i in range(len(T)):
if T[i]<Min:
Min=T[i]
return(Min)
Exercice 2 :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
#Indice de la valeur minimale
def Indice_Minimum(T):
Min=T[0]
p=0
for i in range(len(T)):
if T[i]<Min:
Min=T[i]
p=i
return(p)
Tri d'un tableau
94
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Tri par sélection
95
9 | 4 | 1 | 7 | 3 |
1 | 4 | 9 | 7 | 3 |
1 | 3 | 9 | 7 | 4 |
1 | 3 | 4 | 7 | 9 |
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Tri par sélection : version1
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
96
Langage python
#Fonction de la position du Minimum
def position_Minimum(T,debut,Fin) :
position=debut
Minimum=T[debut]
debut+=1
while debut<=Fin :
if T[debut]<Minimum : # on a trouvée plus petit
Minimum=T[debut] # mettre à jour la valeur ...
position=debut # ... et sa position
debut+=1
return(position)
# Procédure du Tri par sélection
def tri_Selection(T):
n=len(T)
debut=0
while debut<n-1: # pour chaque position de la liste trouver le minimum de T[i], ..., T[n - 1]
p=position_Minimum(T,debut,n-1)
# Echanger ce minimum avec T[i]
T[debut],T[p]=T[p],T[debut]
debut+=1
Tri par sélection : version2
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
97
Langage python
def Tri_Selection(T) :
n=len(T)
for i in range(0,n-1) :
pmin=i #position du minimum
for j in range(i+1,n) :
if T[j]<T[pmin] :
pmin=j
T[i],T[pmin]=T[pmin],T[i]
#Programme tri par sélection
n=int(input("Donner le nombre d'éléments de la liste T:"))
T=[]
for i in range(n) :
e=int(input('Donner T[%d]='%(i)))
T=T+[e]
print(T)
Tri_Selection(T)
print(T)
input()
Tri par insertion
98
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
99
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
100
Tri par insertion : version1
Langage python
#Programme et Procédure du Trie Par insertion
# Procédure du réinsertion de i dans j
def reinsertion(T,i,j):
# Sauvegarder l’élément à déplacer
e=T[i]
# Faire remonter d'une position les éléments entre i et j
k=i
while k>j:
T[k]=T[k-1]
k=k-1
# Copier l’élément à déplacer en position j
T[j]=e
# Procédure du Trie Par insertion
def tri_Insertion(T):
n=len(T)
i=1
while i<n: # Pour chaque position de la liste chercher à quelle position réinsérer T[i]
j=i-1
while j>=0 and T[j]>T[i]:
j=j-1
# Effectuer la réinsertion
reinsertion(T,i,j+1)
i=i+1
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
101
Tri par insertion : version2
Langage python
def Tri_Insertion(T):
n=len(T)
for i in range(1,n):
e=T[i]
j=i
while j>0 and T[j-1]> e:
T[j]=T[j-1]
j-=1
T[j]=e
#Programme par insertion
n=int(input("Donner le nombre d'éléments de la liste T:"))
T=[]
for i in range(n) :
e=int(input('Donner T[%d]='%(i)))
T=T+[e]
print(T)
Tri_Insertion(T)
print(T)
input()
Tri à bulles
102
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
103
Tri à bulles : version1
Langage python
#Programme et Procédure du Trie à Bulles
# Procédure du Trie à Bulles
def Tri_bulle(T):
n=len(T)
change=True
while change :
change=False
for i in range(n-1) :
if T[i]>T[i+1] :
T[i],T[i+1]=T[i+1],T[i]
change = True
#Programme du Trie à Bulles
n=int(input("Donner le nombre d'éléments de la liste T:"))
T=[]
for i in range(n) :
e=int(input('Donner T[%d]='%(i)))
T=T+[e]
print(T)
Tri_bulle(T)
print(T)
input()
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
104
Tri à bulles : version2
Langage python
def Tri_Bulle(T):
n=len(T)
i=1
Trier=False
while not Trier :
Trier = True #on suppose que le tableau est trié
for i in range(0,n-1) :
if T[i]>T[i+1] :
T[i],T[i+1]=T[i+1],T[i]
Trier=False #le tableau n'est plus trié
#Programme du Tri à Bulles
n=int(input("Donner le nombre d'éléments de la liste T:"))
T=[]
for i in range(n) :
e=int(input('Donner T[%d]='%(i)))
T=T+[e]
print(T)
Tri_Bulle(T)
print(T)
input()
Tri par sélection : complexité
105
N | 103 | 106 | 109 |
temps | 1ms | 103 s | 31,62 ans |
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
106
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
107
Recherche séquentielle (linéaire) :
Exploration séquentielle de la liste.
Condition d’arrêt :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
108
Langage python
#Programme et Fonction Recherche linéaire
#Fonction Recherche linéaire
def Recherche_lineaire(L,X):
for t in L:
if X= =t:
return(True)
return(False)
#Programme Recherche linéaire
n=int(input("Donnez le nombre d'éléments de la liste T:"))
X=int(input("Donnez l'élement chercher dans la liste T:"))
T=[]
for i in range(n):
e=int(input('Donnez T[%d]='%(i)))
T=T+[e]
print(T)
if Recherche_lineaire(T,X):
print(X,"appartient à la liste T")
else:
print(X,"n'appartient pas à la liste T")
Recherche séquentielle (linéaire) :
#Fonction Recherche linéaire1
def Recherche_lineaire1(L,X):
return(t in L)
109
Complexité :
N | 103 | 106 | 109 |
temps | 1µs | 1ms | 1s |
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
110
Recherche dichotomique :
(T[0] et T[milieu-1]) ;
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
111
Exemple :
4 | 6 | 10 | 15 | 17 | 18 | 24 | 27 | 30 |
debut | 0 | 5 | 5 | 6 |
fin | 8 | 8 | 5 | 5 |
milieu | 4 | 6 | 5 | |
debut | 0 | 0 | 2 |
fin | 8 | 3 | 3 |
milieu | 4 | 1 | 2 |
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
112
Langage python
#Programme et Fonction Recherche dichotomique
#Fonction Recherche dichotomique
def Recherche_dichotomique(L,X):
N=len(L)
Debut=0
Fin=N-1
while Debut<=Fin:
Milieu=(Debut+Fin)//2
if X= =L[Milieu]:
return(True)
elif X>L[Milieu]:
Debut=Milieu+1
else:
Fin=Milieu-1
return(False)
#Programme Recherche dichotomique
n=int(input("Donnez le nombre d'éléments de la liste T:"))
X=int(input("Donnez l'élement chercher dans la liste T:"))
T=[]
for i in range(n):
e=int(input('Donnez T[%d]='%(i)))
T=T+[e]
print(T)
if Recherche_dichotomique(T,X):
print(X,"appartient à la liste T")
else:
print(X,"n'appartient pas à la liste T")
Recherche dichotomique :
113
Complexité :
Exemple :
Au lieu de N=1milion ≈220 opérations à effectuer avec une recherche séquentielle il suffit de 20 opérations avec une recherche dichotomique.
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
temps t
nombre des élements N
t = a · N
t = a · 2N
t = a · N2
t = a · logN
114
TABLEAUX DOUBLE DIMENSION
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
115
(i.e. : L'accès à un élément du tableau à deux dimensions se fait au moyen de deux indices.)
Exemple : T[i][j] donne la valeur de l'élément de la ligne i+1 et de la colonne j+1.
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
116
Syntaxe :
Variable Tableau identificateur[Nombre_lignes][Nombre_colonnes] : type
Exemple :
Variable Tableau T[30][50] : réel
Exemple :
Variable Tableau T[n][m] : réel
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
117
Algorithme :
Algorithme SaisieMatrice
Variables i , j , n, m : entier
Tableau A[n][m] : réel
Debut
Ecrire("Donner le nombre de lignes et de colonnes :")
Lire(n,m)
Pour i allant de 0 à n-1 faire
Pour j allant de 0 à m-1 faire
Ecrire ("Entrez l'élément de la ligne", i + 1,"et de la colonne", j+1)
Lire (A[i][j])
FinPour
FinPour
Fin
Saisir les éléments d’un Tableau 2D (Matrice)
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
118
Algorithme :
Algorithme AffichageMatrice
Variables i , j , n, m : entier
Tableau A[n][m] : réel
Debut
Ecrire("Donner le nombre de lignes et de colonnes :")
Lire(n,m)
Pour i allant de 0 à n-1 faire
Pour j allant de 0 à m-1 faire
Ecrire (A[i][j])
FinPour
FinPour
Fin
Afficher les éléments d’un Tableau 2D (Matrice)
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
119
>>> M=3*[2*[0]]
>>> M
[[0, 0], [0, 0], [0, 0]]
>>> D=5*[3*['']]
>>> D
[['', '', ''], ['', '', ''], ['', '', ''], ['', '', ''], ['', '', '']]
>>> C=3*[3*[False]]
>>> C
[[False, False, False],
[False, False, False],
[False, False, False]]
Programme python
Exemples :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
120
Déclaration
tableau A[10][10] : entier
tableau B[2][20] : réel
tableau C[3][3] : booléen
tableau D[5][3] : caractère
Exemples :
B=[20*[0.0] for i in range(2)]
C=[3*[False] for i in range(3)] D=[3*[''] for i in range(5)]
B=2*[20*[0.0]]
C=3*[3*[False]]
D=5*[3*['']]
121
#Programme Saisie Matrice
n=int(input('Donner le nombre de lignes :'))
m=int(input('Donner le nombre de colonnes :‘))
A=n*[m*[0]]
A = [m*[0] for i in range(n)]
for i in range(n):
for j in range(m):
A[i][j]=int(input('Elément de la ligne %d et
de la colonne %d :' % (i+1,j+1)))
Saisie
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
#Programme Affichage Matrice
n=int(input('Donner le nombre de lignes :'))
m=int(input('Donner le nombre de colonnes :‘))
for i in range(n):
for j in range(m):
print(A[i][j])
Affichage
122
Donner un programme qui calcul la somme de deux matrices T[n][m], L[n][m].
Exercice1 :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Langage python
#Programme Somme de deux Listes 2 Dimensions
#Saisir Liste 2 Dimensions
n=int(input('Donner le nombre de lignes :'))
m=int(input('Donner le nombre de colonnes :'))
T=[m*[0] for i in range(n)]
L=[m*[0] for i in range(n)]
M=[m*[0] for i in range(n)]
for i in range(n):
for j in range(m):
T[i][j]=int(input('T[%d][%d]='%(i,j)))
L[i][j]=int(input('L[%d][%d]='%(i,j)))
#Somme de T et L
for i in range(n):
for j in range(m):
M[i][j]=T[i][j]+L[i][j]
#Afficher la liste M=T+L
for i in range(n):
for j in range(m):
print('M[%d][%d]=%d'%(i,j,M[i][j]))
123
Donner un programme qui calcul le Produit k×T[n][m] avec kєN.
Exercice2 :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Langage python
#Produit d’un scalaire et une Liste 2 Dimensions
k=int(input('Donner le nombre k :'))
#Saisir Liste 2 Dimensions
n=int(input('Donner le nombre de lignes :'))
m=int(input('Donner le nombre de colonnes :'))
T=[m*[0] for i in range(n)]
M=[m*[0] for i in range(n)]
for i in range(n):
for j in range(m):
T[i][j]=int(input('T[%d][%d]='%(i,j)))
# Produit k*T
for i in range(n):
for j in range(m):
M[i][j]=k*T[i][j]
#Afficher la liste M=k*T
for i in range(n):
for j in range(m):
print('M[%d][%d]=%d'%(i,j,M[i][j]))
124
Donner un programme qui calcul le Produit de deux matrices T[n][m], L[m][n].
Exercice3 :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Langage python
#Programme Produit de deux Listes 2 Dimensions
#Saisir Liste 2 Dimensions
n=int(input('Donner le nombre de lignes :'))
m=int(input('Donner le nombre de colonnes :'))
T=[m*[0] for i in range(n)]
L=[n*[0] for i in range(m)]
M=[n*[0] for i in range(n)]
for i in range(n):
for j in range(m):
T[i][j]=int(input('T[%d][%d]='%(i,j)))
for i in range(m):
for j in range(n):
L[i][j]=int(input('L[%d][%d]='%(i,j)))
#Produit de T et L
for i in range(n):
for j in range(n):
M[i][j]=0
for k in range(m):
M[i][j]=M[i][j]+T[i][k]*L[k][j]
#Afficher la liste M=T*L
for i in range(n):
for j in range(n):
print('M[%d][%d]=%d'%(i,j,M[i][j]))
Récursivité : Algorithme (Factorielle)
Fonction fact (n : entier ) : entier
Si n=0 alors
retourne (1)
Sinon
retourne (n*fact(n-1))
Finsi
FinFonction
125
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Récursivité : Algorithme (Suite de Fibonacci)
U(n)=U(n-1)+U(n-2)
Fonction Fib (n : entier ) : entier
Variable res : entier
Si n=1 OU n=0 alors
res ←1
Sinon
res ← Fib(n-1)+Fib(n-2)
Finsi
retourne (res)
FinFonction
126
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Récursivité : Programmation (Suite de Fibonacci)
127
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Langage python
#Programme et Fonction Fibonacci Récursivité
#Fonction Factorielle Récursivité
def Fibonacci_Recursivite(n):
if n==0 or n==1:
return(1)
else:
return(Fibonacci_Recursivite(n-1)+Fibonacci_Recursivite(n-2))
#Programme Factorielle Récursivité
n=int(input('Donnez le nombre n:'))
print("le rang %d de la suite de Fibonacci est= %d"%(n,Fibonacci_Recursivite(n)) )
Récursivité : Programmation (Factorielle)
128
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Langage python
#Programme et Fonction Factorielle Récursivité
#Fonction Factorielle Récursivité
def Factorielle_Recursivite(n):
if n==0:
return(1)
else:
return(n*Factorielle_Recursivite(n-1))
#Programme Factorielle Récursivité
n=int(input('Donnez le nombre n:'))
print("la factorielle de %d est= %d"%(n,Factorielle_Recursivite(n)) )
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
129
Figure : Empilage/dépilage de 4 !
130
Pile :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
131
Pile : Exemples
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
132
Pile : Opérations
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
133
Pile : Python
134
File :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
135
File : Exemples
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
136
File : Opérations
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
137
File : Python
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
138
LES FICHIERS
Notion de fichier :
Un fichier stocke des informations sur un support physique (disque dur, clé USB, CD, DVD, carte mémoire...).
Ouvrir un fichier consiste à le charger dans la mémoire vive (RAM) de l'ordinateur (c'est une mémoire volatile : elle s'efface quand on éteint l'ordinateur). Enregistrer un fichier consiste à l'écrire sur un support physique de stockage (l'information est alors conservée de manière permanente).
Ouverture d’un fichier :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
139
Il existe deux types de fichiers :
Imaginons que vous ayez créé un fichier appelé "cpge.txt" (avec le bloc note par exemple).
Syntaxe :
fichier = open("cpge.txt","r")
Syntaxe :
fichier.close()
Les fichiers textes :
Instructions à connaître :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
140
On peut ensuite lire le contenu du fichier de différentes manières :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
141
Pour écrire dans un fichier, il faut également l'ouvrir ; il faut toutefois savoir si on veut écraser le fichier précédent ("w" comme "write") ou ajouter à la fin du fichier ("a" comme "append"). Dans les deux cas, si le fichier n'existe pas il sera créé.
Ensuite il suffit d'appliquer la méthode suivante pour écrire une ligne dans le fichier :
Syntaxe :
fichier.write("mon texte ici")
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
142
Exemple1 : Le mode écriture
Langage python
# Création et ouverture du fichier test.txt en mode write 'w' (écriture)
# Si le fichier test.txt existe déjà, il est écrasé !
fichier=open("testEciture.txt","w")
# Ecriture dans le fichier avec la méthode write()
fichier.write("bonjour tous le monde!")
# Fermeture du fichier avec la méthode close()
fichier.close()
Remarques :
Le fichier test.txt est créé dans le répertoire courant.
L'écriture dans un fichier se fait avec la fonction open() en mode écriture :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
143
Exemple2 : Le mode ajout
Langage python
# Ouverture du fichier test.txt en mode ajout ‘a' (append)
fichier=open("testEciture.txt","a")
# Ecriture dans le fichier avec le mode ajout(append)
fichier.write("\nUne deuxième ligne:\n") # '\n' saut de ligne
fichier.write("bonjour\ttous le monde\tune deuxieme fois!\n") # '\t' tabulation
# fermeture du fichier avec la méthode close()
fichier.close()
Pour écrire à la fin d'un fichier, on utilise la fonction open() en mode ajout :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
144
Exemple3 : Le mode lecture
Langage python
# Ouverture du fichier test.txt en mode lecture ' r' (Read)
fichier=open("testEciture.txt","r")
Le mode ajout
# Lecture Test(read)
ch=fichier.read()
print("Contenu du fichier :"+ch) # Affichage du contenue du fichier
# fermeture du fichier avec la fonction close()
fichier.close()
La lecture dans un fichier texte se fait avec la fonction open() en mode lecture :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
145
Langage python
#Lecture Nombres_pair1
f=open("testEciture.txt","r")
ch=f.readlines()
for i in ch:
print(i)
f.close()
Langage python
#Lecture test
f=open("testEciture.txt","r")
ch=f.read(4)
print(ch)
f.close()
Exemple4 : Le mode lecture
Exemple5 : Le mode lecture
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
146
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
147
Ingénierie numérique et simulation
148
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
149
Fonctions utiles de numpy
Créer des tableaux numpy :
La fonction array prend en argument une liste et renvoie un tableau numpy ayant les mêmes éléments. En cas de liste de listes, l’opérateur s’applique récursivement à chaque sous–liste : la valeur de retour est donc un tableau de tableaux.
Console python
>>> np.array([1, 2, 3]) # Un tableau d’entiers
array([1, 2, 3])
>>> np.array([1, 2, 3.0]) # On impose implicitement les flottants
array([ 1., 2., 3.])
>>> np.array([[1, 2], [3, 4]]) # Plus d’une dimensions
array([[1, 2],
[3, 4]])
Dans toute la suite on supposera qu’on a effectué :
Console python
>>>import numpy as np
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
150
arange, reshape :
Console python
>>> np.arange(1,6,2) # Même comportement que range, mais renvoie un array
array([1, 3, 5])
>>> a = np.arange(25) # Tableau 1D à 25 éléments
>>> a.reshape((5,5)) # Changé en tableau 2D à 5*5 éléments
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
Utilisation de matrix :
La classe des matrices, permet de faire du calcul matriciel
Console python
>>> import numpy as np
>>> A = np.matrix(np.arange(9).reshape((3,3)))
>>> A # La matrice A
matrix([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
151
Console python(suite)
>>> A**2 # Son carré matriciel,
matrix([[ 15, 18, 21],
[ 42, 54, 66],
[ 69, 90, 111]])
>>> A.transpose() # Sa transposée
matrix([[0, 3, 6],
[1, 4, 7],
[2, 5, 8]])
>>> A*A.transpose() # Le produit matriciel avec la transposée
matrix([[ 5, 14, 23],
[ 14, 50, 86],
[ 23, 86, 149]])
Pour une matrice numpy m, il est possible d’accéder directement à l’élément de ligne i et de colonne j avec la syntaxe m[i,j] (alors qu’avec une matrice python “classique” il faudrait écrire m[i][j]).
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
152
Exemple :
Console python
>>> a = [[2,3],[1,8]]
>>> b = np.array (a)
>>> b[1] # Ligne d’indice 1
array([1, 8])
>>> b[:,0] # Colonne d’indice 0
array([2, 1])
>>> b[:,-1] # Dernière colonne
array([3, 8])
>>> b[1,0] # Elément ligne 1 colonne 0
1
Ones et eye :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
153
Console python
>>> import numpy as np
>>> np.ones(2)
array([ 1., 1.])
>>> np.ones((2,3))
array([[ 1., 1., 1.],
[ 1., 1., 1.]])
>>> np.eye(2)
array([[ 1., 0.],
[ 0., 1.]])
Exemple :
Opérations sur les tableaux numpy :
Les opérations usuelles (addition, soustraction, multiplication, division) s’appliquent aux tableaux Numpy en opérant coefficient par coefficient.
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
154
Console python
>>> a=np.array([[1,4],[1,2]])
>>> b=np.ones((2,2))
>>> a*b
array([[ 1., 4.],
[ 1., 2.]])
>>> a/b # Au sens matriciel usuel b n’est pas inversible
array([[ 1., 4.],
[ 1., 2.]])
>>> a**2
array([[ 1, 16],
[ 1, 4]])
Exemple :
Remarque :
Chaque fonction mathématique usuelle possède une fonction Numpy qui lui est homonyme et qui calcule la même chose sur les objets de type float. Par exemple il existe math.sin et np.sin L’avantage des fonctions numpy f, c’est que si a est un tableau numpy a = array[a0, . . . , an-1], l’appel f(a) renvoie le tableau array[f(a0), . . . , f(an-1)]. Ce mécanisme s’applique aussi aux matrices.
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
155
Console python
>>> import numpy as np
>>> x=np.array([3,4])
>>> np.exp(x)
array([ 20.08553692, 54.59815003])
>>> import math
>>> math.exp(x)
TypeError: only length-1 arrays can be converted to Python scalars
Exemple :
Console python
>>> from numpy.linalg import dot
>>> dot ([[1,2],[3,4]], np.eye(2)) # Syntaxe correcte du produit matriciel
array([[ 1., 2.],
[ 3., 4.]])
>>> [[1,2],[3,4]] * np.eye(2) # Faux (produit terme a terme)
array([[ 1., 0.],
[ 0., 4.]])
Produit matriciel :
Exemple :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
156
Exemple : résolution de :
Résolution d’un système de Cramer :
Console python
>>> from numpy.linalg import solve
>>> solve ([[1,2],[3,4]], [2,8])
array([ 4., -1.])
Console python
>>> from numpy.linalg import det
>>> det ([[1,2],[3,4]])
-2.0000000000000004
Déterminant :
Exemple :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
157
Exemple :
Trace :
Console python
>>> from numpy import trace
>>> trace([[1,2],[3,4]])
5
Console python
>>> from numpy.linalg import inv
>>> inv ([[1,2],[3,4]])
array([[-2. , 1. ],
[ 1.5, -0.5]])
Inverse d’une matrice :
Exemple :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
158
Exemple :
Puissance d’une matrice :
Console python
>>> from numpy.linalg import matrix_power
>>> matrix_power ([[1,2],[3,4]], -2)
array([[ 5.5 , -2.5 ],
[-3.75, 1.75]])
Console python
>>> from numpy import transpose
>>> transpose([[1,2],[3,4]])
array([[1, 3],
[2, 4]])
Transposée d’une matrice :
Exemple :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
159
3.1415926535897931
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
160
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
161
Résolution d'équation algébrique
Résolution approchée d’une équation :
Cadre de travail :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
162
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
163
Méthode de dichotomie :
On suppose que :
Contexte de travail et idée de départ :
Démarche :
Technique à répéter :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
164
Langage python
def rech_solu_dichotomie(fonction,borne_inf,borne_sup,tolerance,nb_iterations_max) :
milieu=(borne_sup+borne_inf)/2
nombre_iterations=0
while abs(fonction(milieu) ) >tolerance and nombre_iterations<=nb_iterations_max :
if f(borne_inf)*f(milieu)<0 :
borne_sup=milieu
else :
borne_inf=milieu
milieu=(borne_sup+borne_inf)/2
nombre_iterations=nombre_iterations+1
return (milieu)
Remarques :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
165
Console python
>>> from scipy .optimize import bisect
>>>…….
>>> bisect(f,borne_inf,borne_sup)
Méthode de Newton :
Contexte de travail et idée de départ :
On suppose que :
On va considérer que la représentation graphique Cf de f est «proche» de sa tangente en un point : l’intersection de cette tangente avec (Ox) doit nous « rapprocher » de xsol
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
166
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
167
Démarche :
Technique à répéter :
xn+1 = xn –(f(xn)/f’(xn))
Langage python
def rech_solu_Newton(fonction,derivee_fonction,position_depart,tolerance,nb_iterations_max) :
xn =position_depart
nombre_iterations=0
while (abs(fonction(xn))>tolerance) and (nombre_iterations<=nb_iterations_max) :
xn = xn -fonction(xn)/fonction_derivee(xn)
nombre_iterations=nombre_iterations+1
return (xn)
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
168
Remarques :
Console python
>>> from scipy .optimize import newton
>>>…….
>>> newton(f,position_depart,der_f)
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
169
Résolution approchée(numérique) d'une équation différentielle
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
170
Méthode d'Euler :
Où est une fonction continue sur l’intervalle [a,b].
avec une condition initiale : y(a)=y0
Si h est suffisamment petit on a :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
171
from scipy.integrate import odeint
odeint(f, y0,T)
Programmation :
module scipy :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
172
Exemple :
Console python
>>> from scipy . integrate import odeint
>>>def f(y,t):
return (y)
>>> odeint(f,1,[0,0.25,0.5,0.75,1.0])
array([[ 1. ],
[ 1.28402541],
[ 1.64872127],
[ 2.11700009],
[ 2.7182819 ]])
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
173
T=[0.0,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0].
T=linspace(a,b,n) construit un tableau de n valeurs équidistantes dont la première est a et la dernière b.
Remarques :
Console python
>>> from numpy import linspace
>>> T=linspace(0,1,21)
>>> T
array([ 0. , 0.05, 0.1 , 0.15, 0.2 , 0.25, 0.3 , 0.35, 0.4 , 0.45, 0.5 , 0.55, 0.6 , 0.65, 0.7 , 0.75, 0.8 , 0.85, 0.9 , 0.95, 1. ])
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
174
arange(a,b,h) ou h est le pas, b étant exclu comme dans le cas de range. Si on veut un tableau identique aux précédents on écrit :
Console python
>>> from numpy import arange
>>> T=arange(0,1.05,0.05)
>>> T
array([ 0. , 0.05, 0.1 , 0.15, 0.2 , 0.25, 0.3 , 0.35, 0.4 , 0.45, 0.5 , 0.55, 0.6 , 0.65, 0.7 , 0.75, 0.8 , 0.85, 0.9 , 0.95, 1. ])
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
175
Langage python
from numpy import *
def Phi(x,y):
………
return(z)
def Euler(a,b,Phi,y0,n):
"""Méthode d'Euler d'intégration approchée de
y'=Phi(x,y(x)) sur [a,b] avec condition initiale y0=f(a)
avec n+1 points"""
x=linspace(a,b,n+1)
y=empty(n+1) # tableau vide de n+1 éléments
y[0]=y0
pas=(b-a)/float(n)
for k in range(n):
y[k+1]=y[k]+pas*Phi(x[k],y[k])
return(y)
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
176
Résolution d’EDO 2ème ordre
Langage python
from scipy.integrate import *
def phi(Y,t) :
lamb,w0=0.01,1.0
y,ypoint=Y
return([ypoint,-2*lamb*ypoint-w0**2*y])
Y0=[1.,0.]
t=range(4)
d=odeint(phiY0,t)
S=d[:,0]
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
177
Langage python
from scipy.integrate import *
from numpy import *
def phi(Y,t) :
lamb,w0,A,w=0.01,1.0,1.5,2.
y,ypoint=Y
return([ypoint,-2*lamb*ypoint-w0**2*y+A*cos(w*t)])
Y0=[1.,0.]
t=range(4)
d=odeint(phi,Y0,t)
S=d[:,0]
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
178
>>>import matplotlib.pyplot as plt
Matplotlib
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
179
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
180
Résolution d’un système linéaire :
Méthode de Gauss
Langage python
#Recherche du Pivot de Gauss
def pivot(m,s) :
n=len(m)
numpiv=s # numero du pivot provisoire
for i in range(s+1,n) : # boucle sur les lignes restantes
if abs(m[i][s])>abs(m[numpiv][s]):
numpiv=i
return (numpiv)
Recherche du pivot :
Langage python
# Création d'une matrice
def matrice(n,p) :
return([p*[0] for i in range(n)])
Création d'une matrice :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
181
Langage python
# Copie d'une matrice
def copie(m):
n=len(m)
p=len(m[0])
mat=matrice(n,p)
for i in range(n) : # boucle sur les lignes
mat[i]=m[i][:]
return(mat)
Echange de lignes :
Langage python
# Changement de lignes
def change(m,i,j):
n=len(m)
p=len(m[0])
mat=copie(m) # On fait l'échange sur une copie de la matrice
for k in range(p) : # Boucle sur les colonnes
mat[i][k],mat[j][k]=mat[j][k],mat[i][k]
return(mat)
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
182
Langage python
# Transvection
def transvection(m,s) : # s numéro du pivot utilisé
n=len(m)
p=len(m[0])
mat=copie(m)
for i in range(s+1,n) : # Boucle sur les colonnes
k=m[i][s]/m[s][s]
for j in range(s,p) : # Boucle sur les colonnes
mat[i][j]=mat[i][j]-k*mat[s][j]
return(mat)
Transvection :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
183
Langage python
# Résolution d'un système triangulaire
def solution(m):
n=len(m)
p=len(m[0])
sol=n*[None] # Création d'une solution vide
for i in range(n-1,-1,-1) : # Boucle sur les lignes
sol[i]=m[i][p-1]
for j in range(i+1,p-1):
sol[i]-=m[i][j]*sol[j]
sol[i]=sol[i]/m[i][i]
return(sol)
Résolution d’un système triangulaire :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
184
Programme final :
Langage python
# Programme final
def gauss(mat) :
n=len(mat)
for s in range(n-1) : # Le dernier pivot est à l'avant dernière ligne
piv=pivot(mat,s)
if piv !=s :
mat=change(mat,s,piv)
mat=transvection(mat,s)
sol=solution(mat)
return(sol)
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
185
Structures de données
Tuples :
Exemple :
Console python
>>> t = 2, ’deux’, 2.0, True, (1, 2, 3, 4)
>>> t
(2, ’deux’, 2.0, True, (1, 2, 3, 4))
>>> t, type(t), len(t)
((2, ’deux’, 2.0, True, (1, 2, 3, 4)), <type ’tuple’>, 5)
>>> t[1]
’deux’
>>> t[-1]
(1, 2, 3, 4)
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
186
Les ensembles sont des structures de données avec les caractéristiques suivantes :
On construit un ensemble par une expression de la forme set(séquence)
où séquence est une donnée parcourable (liste, tuple, chaine de caractères, etc.).
Ensembles :
Exemple :
Console python
>>> s = set("abracadabra")
>>> s
set([’a’, ’r’, ’b’, ’c’, ’d’])
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
187
élément in ensemble :
élément appartient-il `a ensemble ?
ensemble.add(élément) :
ajout de l’élément indiqué à l’ensemble indiqué.
ensemble.remove(élément) :
suppression de l’élément indiqué de l’ensemble indiqué.
ensemble1.issubset(ensemble2) :
tous les éléments de ensemble1 appartiennent-ils à ensemble2 ?
ensemble1.union(ensemble2) :
ensemble des éléments appartenant à ensemble1 ou à ensemble2.
ensemble1.intersection(ensemble2) :
éléments de ensemble1 qui sont aussi éléments de ensemble2.
ensemble1.difference(ensemble2) :
éléments de ensemble1 qui ne sont pas dans ensemble2.
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
188
Un dictionnaire, ou table associative, est une collection de couples (clé, valeur) telle que :
On construit explicitement un dictionnaire par une expression de la forme {clé1 : valeur1, clé2 : valeur2, ... clék : valeurk}
Dictionnaires :
Opérations principales :
dict[clé]=valeur :
ajoute au dictionnaire dict une paire (clé, valeur) ou, si une telle paire existait déjà modifie sa partie valeur.
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
189
dict[clé]=valeur :
ajoute au dictionnaire dict une paire (clé, valeur) ou, si une telle paire existait déjà modifie sa partie valeur.
dict[clé] :
renvoie la valeur correspondant à la clé donnée ; une erreur est déclenchée si une telle cl´e n’existe pas dans le dictionnaire.
dict.get(clé [,valsinon]) :
renvoie la valeur correspondant à la clé donnée ; si une telle clé est absente, renvoie valsinon ou (si valsinon est omise) None.
dict.has_key(clé) :
vrai si et seulement si la clé indiquée existe dans le dictionnaire dict.
del dict[clé] :
supprime du dictionnaire dict la paire (clé, valeur).
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
190
dict.keys( ) :
renvoie une copie de la liste des clés du dictionnaire dict.
dict.values( ) :
renvoie une copie de la liste des valeurs du dictionnaire dict.
dict.items( ) :
renvoie une copie de la liste des associations constituant le dictionnaire dict.
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
191
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
192
Exemple :
Console python
>>> t = 2, ’deux’, 2.0, True, (1, 2, 3, 4)
>>> t
(2, ’deux’, 2.0, True, (1, 2, 3, 4))
>>> t, type(t), len(t)
((2, ’deux’, 2.0, True, (1, 2, 3, 4)), <type ’tuple’>, 5)
>>> t[1]
’deux’
>>> t[-1]
(1, 2, 3, 4)
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
193
>>>import matplotlib.pyplot as plt
>>> y1 = sin(x)
>>> y2 = cos(x)
>>> plt.plot(x,y1,"r-",x,y2,"g.“)
>>> plt.show()
>>> plt.savefig(‘fichier.pdf’)
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
194
T=[0.0,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0].
T=linspace(a,b,n) construit un tableau de n valeurs équidistantes dont la première est a et la dernière b.
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
195
Matplotlib
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
196
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
197
Technique à répéter :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
198
Console python
>>> from numpy.linalg import solve
>>> solve ([[1,2],[3,4]], [2,8])
array([ 4., -1.])
Les opérations usuelles (addition, soustraction, multiplication, division) s’appliquent aux tableaux Numpy en opérant coefficient par coefficient.
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
199
Console python
Utilisation de np.matrix :
La classe des matrices, permet de faire du calcul matrice
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
200
Les fichiers binaires : l' information est stockée en binaire (une suite d'octets). Ils se manipulent octets par octets.
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
201
Langage python
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
202
Soit le tableau T initialisé comme suit :
T=6*[4*[0]]
Accès aux composantes
203
Saisir les éléments d’un Tableau 2D (Matrice)
Algorithme SaisieMatrice
Variables i , j , n, m : entier
Tableau A[n][m] : réel
Début
Ecrire("Donner le nombre de lignes et de colonnes :")
Lire(n,m)
Pour i allant de 0 à n-1 faire� Pour j allant de 0 à m-1 faire
Ecrire ("Entrez l'élément de la ligne", i + 1,"et de la colonne", j+1)
Lire (A[i][j])
FinPour
FinPour
Fin
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
204
n=int(input('Donner le nombre de lignes :'))
m=int(input('Donner le nombre de colonnes :‘))
A=n*[m*[0]]
A = [m*[0] for i in range(n)]
for i in range(n):
for j in range(m):
A[i][j]=int(input('Elément de la ligne %d et
de la colonne %d :' % (i+1,j+1)))
Programme python:
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
205
Fonction récursives : exemple
Une fonction récursive qui permet d'afficher la valeur binaire d'un entier n
Procédure binaire (n : entier )
Si (n<>0) alors
binaire (n/2)
Ecrire (n mod 2)
Finsi
FinProcédure
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
206
Exponentiation rapide : exercice
La fonction récursive suivante calcule xn pour un entier strictement positif n:
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
207
Exponentiation rapide : exercice
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
208
Fonction puissance ( x : réel, n : entier ) : réel
Variables n : entier, x, tmp : réel
DEBUT
SI (n=0) alors
retourne (1)
SINON
SI (n=1) alors
retourne (x)
SINON
tmp ← puissance( x , n/2 )
SI (n est pair) alors
retourne (tmp * tmp)
SINON
retourne (x * tmp * tmp)
Finsi
Finsi
Finsi
FinFonction
Algorithme d’Euclide : Exercice
Principe :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
209
Algorithme d’Euclide : Exercice
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
210
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
211
a et b entiers naturels
non nuls et a>b
Calculer le reste r de la
Division de a par b
a prend la valeur de b
b prend la valeur de r
r=0 ?
Pgcd b
Oui
Non
Organigramme :
Algorithme d’Euclide : Exercice
Algorithme d’Euclide : Exercice
Fonction Pgcd ( a : entier , b : entier ) : entier
Variable a,b : entier
Debut
Si (b=0) alors
retourne (a)
Sinon
retourne (Pgcd (b , a mod b))
Finsi
FinFonction
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
212
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
213
214
Ecrire un programme python qui calcule la somme de deux matrices A et B ayant 3 lignes et 3 colonnes.
Le programme doit contenir les fonctions suivantes:
1- SaisirMatrice (n,m) :
qui crée une matrice de n x m, la saisir par clavier puis la retourner.
2- AfficheMatrice (M) :
qui affiche les éléments de la matrice M
3-SommeMatrice(M1,M2) :
qui retourne la somme des matrices M1 et M2
Exercice3 :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
215
Recherche de la valeur x dans un tableau T de N éléments :
Algorithme recherche_ séquentielle
Variables i : entier
Trouve : booleen
tableau T[N],x: reel
Debut
i←0 , Trouvé ← Faux�TantQue ((i < N) ET (Trouve=Faux))
si (T[i]=x) alors� Trouve ← Vrai� sinon
i←i+1
finSi�FinTantQue
si (Trouve= Vrai) alors
Ecrire ("x appartient au tableau")�sinon
Ecrire ("x n'appartient pas au tableau")�finsi
Fin
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
216
Algorithme :
Algorithme recherche_ dichotomique
Variables i,inf,sup,milieu : entier
Trouve : booleen
tableau T[N],x : reel
Debut
inf←0 , sup←N-1, Trouve ← Faux
TantQue (inf <=sup) ET (Trouve=Faux)� milieu←(inf+sup)div2
si x=T[milieu] alors
Trouve ← Vrai
sinon
si x>T[milieu] alors� inf←milieu+1
sinon
sup←milieu-1
finsi� finsi
finTantQue
si (Trouve=Vrai) alors
Ecrire ("x appartient au tableau")
sinon
Ecrire ("x n'appartient pas au tableau")
finSi
Fin
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
217
Tri par sélection :
Pour i allant de 0 à N-2 Faire
Min ← T[i]
Pour j allant de i+1 à N-1 Faire � Si T[j] <Min alors� Min ← T[j]
T[j] ← T[i]
T[i] ← Min � Finsi� FinPour
FinPour
218
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Tri par insertion
Pour i allant de 0 à N
Pour j allant de 0 à i-1� Si (T[i] < T[j] ) alors� Min ← T[i]
Pour k allant de 0 à i-n-1
T[i-k] ← T[i-k-1]
FinPour
T[j] ← Min � Finsi� FinPour
FinPour
219
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Tri à bulles
220
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Tri à bulles : algorithme
221
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
222
Donner un programme qui calcul la valeur du polynôme de degré n pour un réel x .
Exercice2 :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Le programme doit contenir les fonctions suivantes:
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
223
def saisirpolynome():
n=int(input('Donner le degré n:'))
P=(n+1)*[0]
i=n
while i>=0:
P[i]=float(input('Donner le coeif numero %.0f: ' % (i) ))
i-=1
return P
def Affichepolynome(P):
n=len(P)
i=n-1
while i>0:
if P[i]!=0:
print (P[i],'*X^',i, end=' ')
if P[i-1]>=0:
print ('+', end=' ')
i-=1
if P[i]!=0: print (P[0])
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
224
def calculeValeur(P,x):
s=0
for i in range(0,len(P)):
s=s+P[i]*x**i
return s
�#programme principal
pol=saisirpolynome()
Affichepolynome(pol)
x=float(input('Donner x:'))
print('pol(',x,')=', calculeValeur(pol,x))
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
225
Ingénierie numérique et simulation
226
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
227
228
Exemple 1 :
Calcul de la somme de 20 entiers stockés dans un tableau.
# include<stdio.h >
main()
int i, som ;
int T[20] ;
for (i=0; i<20; i++)
{printf("Donner T[%d]=",i) ;
scanf("%d",&T[i]) ;
som+= T[i] ;
}
printf("La somme=%d",som) ;
}
{
som=0 ;
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
229
/* Valeur maximale */
#include< stdio.h >
main()
{
int i;
float Tab[12], Max ;
Max=Tab[0] ;
for i=1; i<11; i++
{
if (Max<Tab[i])
Max=Tab[i] ;
}
printf (“La valeur maximale du tableau est : %f “, Max);
}
Donner la valeur maximale d’un tableau Tab[12].
Exercice1 :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
230
Algorithme polynôme
Variables n, i, j : Entier
x,Som,Puiss, Coef[n+1] : Réel
Début
Ecrire (" Donner le nombre x et n : ")
Lire (x,n)
Som←Coef[0]
Pour i←1 jusqu’à n
Puiss ← 1
Pour j← 1 jusqu’à i
Puiss ← Puiss*x
Fin Pour
Som ← Puiss*Coef[i]+Som
Fin Pour
Ecrire ("Le polynôme de degre",n,"vaut",Som,"pour x=",x)
Fin
Donner un programme qui calcul la valeur du polynôme de degré n pour un réel x .
Exercice2 :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
231
/* La somme de deux matrices */
#include< stdio.h >
main()
{
int i,j ;
int A[3][3], B[3][3], C[3][3] ;
/* Lecture de la matrice A et de la matrice B */
for (i=0; i<3; i++)
{
for (j=0; j<3; j++)
{
printf (“Donner A[%d][%d] \n“,i,j);
scanf ("%d",&A[i][j]);
printf (“Donner B[%d][%d] \n“,i,j);
scanf ("%d",& A[i][j]);
}
}
/* Calcul et affichage de la somme */
for (i=0; i<3; i++)
{
for (j=0; j<3; j++)
{
C[i][j]=A[i][j]+B [i][j] ;
printf("C[%d][%d] =%d\n",i,j,C[i][j]) ;
}
}
}
Donner un programme qui calcul la somme de deux matrices A[3][3], B[3][3].
Exercice3 :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
232
/* Calcul du produit */
#include< stdio.h >
main()
{
int i,j,k ;
int A[3][3], T[3][3] ;
/* Lecture de la matrice A et de la matrice B */
for (i=0; i<3; i++)
{
for (j=0; j<3; j++)
{
printf (“Donner A[%d][%d] \n“,i,j);
scanf ("%d",&A[i][j]);
printf (“Donner B[%d][%d] \n“,i,j);
scanf ("%d",& A[i][j]);
}
}
/* Calcul et affichage du produit */
for (i=0; i<3; i++)
{
for (j=0; j<3; j++)
{
T[i][j]=k*A [i][j] ;
printf(“T[%d][%d] =%d\n",i,j,T[i][j]) ;
}
}
}
Donner un programme qui calcul le Produit k×A[3][3] avec kєN.
Exercice4 :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
233
/* Calcul du produit de deux matrices */
#include< stdio.h >
main()
{
int i,j,k ;
int A[3][3], B[3][3], C[3][3] ;
/* Lecture de la matrice A et de la matrice B */
for (i=0; i<3; i++)
{for (j=0; j<3; j++)
{printf (“Donner A[%d][%d] \n“,i,j);
scanf ("%d",&A[i][j]);
printf (“Donner B[%d][%d] \n“,i,j);
scanf ("%d",& A[i][j]); }
}
/* Calcul du produit */
for (i=0; i<3; i++)
{ for (j=0; j<3; j++)
{C [i] [j]=0 ;
for (k=0; k<3; k++)
{C[i][j]=C[i][j]+ A[i][k]*B[k][j] ;}
}
}
/* Affichage de la matrice C */
for (i=0; i<3; i++)
{ for (j=0; j<3; j++)
{ printf("C[%d][%d] =%d\n",i,j,C[i][j]) ;}
}
}
Donner un programme qui calcul le Produit de deux matrices A[3][3], B[3][3].
Exercice5 :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
234
/* Calcul du produit de deux matrices */
#include< stdio.h >
main()
{
int i,j,k ;
int A[3][3], B[3][3], C[3][3] ;
/* Lecture de la matrice A et de la matrice B */
for (i=0; i<3; i++)
{
for (j=0; j<3; j++)
{
printf (“Donner A[%d][%d]\n“,i,j);
scanf ("%d",&A[i][j]);
printf (“Donner B[%d][%d]\n“,i,j);
scanf ("%d",& A[i][j]);
}
}
/* Calcul du produit et Affichage de la matrice C */
for (i=0; i<3; i++)
{
for (j=0; j<3; j++)
{
C [i] [j]=0 ;
for (k=0; k<3; k++)
{
C[i][j]=C[i][j]+ A[i][k]*B[k][j] ;
}
}
printf("C[%d][%d] =%d\n",i,j,C[i][j]) ;
}
}
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
235
#include< stdio.h >
main()
{
int i,j ;
float Mass=0,S=0,X,P[2][4] ;
for (i=0; i<2; i++)
{for (j=0; j<4; j++)
{if(i==0)
{ Printf (“Donner la masse du point%d\n “,j+1);
scanf ("%f",&P[i][j]);
Mass=Mass+P[0][j]; }
else
{ Printf (“Donner l’abscisse du point %d\n “,j+1);
scanf ("%f",&P[i][j]);
S=S+(P[0][j]*P[1][j]);}
}
}
X=S/Mass;
printf("L’abscisse du barycentre est : %f\n",X) ;
}
Donner un programme qui détermine l’abscisse X du centre de masse de quatre points matériels.
Exercice6 :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
236
Les chaînes de caractères :
Char mot ;
mot = "bonjour" ;
Exemple :
Exemple :
Char ch[12] ;
Char ch[12] = "bonjour" ;
Char ch[12] = {‘b’,’o’,’n’,’j’,’o’,’u’,’r’,’\0’ } ;
On pourra aussi faire :
Char ch[] = "bonjour" ;
ch = "bonjour" ;
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
237
Char ch[12] = "bonjour" ;
b | o | n | j | o | u | r | \0 | 0 | 0 | 0 | 0 |
Affichage de chaînes de caractères :
printf ("%s",ch ) ;
puts (ch ) ;
Lecture de chaînes de caractères :
scanf ("%s",ch ) ;
gets (ch ) ;
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
238
Fonctions | Opérations |
strlen(s) | Longueur de s |
strcpy(s,ct) | Copie ct dans s |
strncpy(s,ct,n) | Copie jusqu’à n caractères |
strcat(s,ct) | Concatène ct après s |
strncat(s,ct,n) | Concatène jusqu’à n caractère |
memcpy(s,ct,n) | Copie n caractères de ct dans s |
Opérations sur les chaînes de caractères : <string.h>
s, t : chaînes de caractères
ct : chaîne de caractères constante
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Le langage C permet de manipuler les adresses mémoires «&» par l’intermédiaire de variables nommées « pointeurs ».
239
Les pointeurs :
Déclaration :
Exemple :
int *adr ;
int n=20 ;
adr :
* :
*adr :
& :
pointeur sur les entiers (adresse d’un entier)
opérateur qui désigne le contenu de l’adresse qui le suit
désigne le contenu de l’adresse adr
opérateur unaire qui fournit comme résultat l’adresse de son opérande
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Le nom d’un tableau est un pointeur sur le premier élément du tableau.
240
20
30
n
adr
n
adr
adr= & n
*adr=30
Remarque :
Exemple :
int tab[20] ;
int i;
tab
tab+1
tab+i
&tab[0] ;
&tab[1] ;
&tab[i] ;
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
241
#include< stdio.h >
main()
{
int x,y ;
int *pti, *ptj ; /*Déclaration de 2 pointeurs pti et ptj vers des entiers */
x=123 ;
y=456 ;
/*1 */
pti=&x ; /*Le pointeur pti reçoit l’adresse de x */
ptj=&y ; /*Le pointeur ptj reçoit l’adresse de y */
/*2 */
*pti=789 ; /*L’entier pointé par pti reçoit 789 */
*ptj=(*pti)-123 ; /*L’entier pointé par ptj reçoit la valeur de l’entier pointé par pti, moins 123 */
/*3 */
ptj=pti ; /*Le pointeur pti reçoit la valeur du pointeur ptj, moins 123 */
}
Exemple :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
242
123
456
x
pti
y
ptj
789
666
x
pti
y
ptj
789
666
x
pti
y
ptj
1
2
3
* pti vaut 123
* ptj vaut 456
x vaut 789
y vaut 666
*pti et *ptj valent 666
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Ingénierie numérique et simulation
Fonctions et procédures
243
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Fonctions et procédures
244
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Fonctions
Fonction nom_fonction (paramètres et leurs types) : type_fonction
Instructions constituant le corps de la fonction
retourne (…)
FinFonction
245
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Langage C :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
246
Fonctions : exemples
Fonction SommeCarre (x : réel, y: réel ) : réel
variable z : réel
z ←x^2+y^2
retourne (z)
FinFonction
Fonction Pair (n : entier ) : booléen
retourne (n mod 2=0)
FinFonction
247
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Utilisation des fonctions
variables z : réel, b : booléen
Début
b ←Pair(3)
z ←5*SommeCarre(7,2)+1
Ecrire("SommeCarre(3,5)= ", SommeCarre(3,5))
Fin
248
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Arguments d'une fonction :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
249
Procédures
Procédure nom_procédure (paramètres et leurs types)
Instructions constituant le corps de la procédure
FinProcédure
250
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Appel d'une procédure
Procédure exemple_proc (…)
…
FinProcédure
Algorithme exepmleAppelProcédure
Début
exemple_proc (…)
…
Fin
251
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Paramètres d'une procédure
252
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Transmission des paramètres
Il existe deux modes de transmission de paramètres dans les langages de programmation :
253
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Transmission des paramètres :exemples
Procédure incrementer1 (x : entier par valeur, y : entier par adresse)
x ← x+1
y ← y+1
FinProcédure
Algorithme Test_incrementer1
variables n, m : entier
Début
n ← 3
m ← 3
incrementer1(n, m)
Ecrire (" n= ", n, " et m= ", m)
Fin
Résultat :
n=3 et m=4
Remarque : l'instruction x ← x+1 n'a pas de sens avec un passage par valeur
254
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Transmission par valeur, par adresse : exemples
Procédure qui échange le contenu de deux variables :
Procédure Echange (x : réel par adresse, y : réel par adresse)
variables z : réel
z ← x
x ← y
y ← z
FinProcédure
255
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Variables locales et globales (1)
256
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Variables locales et globales (2)
257
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Récursivité
Fonction fact (n : entier ) : entier
Si (n=0) alors
retourne (1)
Sinon
retourne (n*fact(n-1))
Finsi
FinFonction
258
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Fonctions récursives : exercice
U(n)=U(n-1)+U(n-2)
Fonction Fib (n : entier ) : entier
Variable res : entier
Si (n=1 OU n=0) alors
res ←1
Sinon
res ← Fib(n-1)+Fib(n-2)
Finsi
retourne (res)
FinFonction
259
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
Fonctions récursives : exercice (suite)
Fonction Fib (n : entier ) : entier
Variables i, AvantDernier, Dernier, Nouveau : entier
Si (n=1 OU n=0) alors
retourne (1)
Finsi
AvantDernier ←1, Dernier ←1
Pour i allant de 2 à n
Nouveau← Dernier+ AvantDernier
AvantDernier ←Dernier
Dernier ←Nouveau
FinPour
retourne (Nouveau)
FinFonction
Remarque: la solution récursive est plus facile à écrire
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
260
Fonction récursives : exemple
Une fonction récursive qui permet d'afficher la valeur binaire d'un entier n
Procédure binaire (n : entier )
Si (n<>0) alors
binaire (n/2)
Ecrire (n mod 2)
Finsi
FinProcédure
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
261
Exponentiation rapide : exercice
La fonction récursive suivante calcule xn pour un entier strictement positif n:
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
262
Exponentiation rapide : exercice
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
263
Fonction puissance ( x : réel, n : entier ) : réel
Variables n : entier, x, tmp : réel
DEBUT
SI (n=0) alors
retourne (1)
SINON
SI (n=1) alors
retourne (x)
SINON
tmp ← puissance( x , n/2 )
SI (n est pair) alors
retourne (tmp * tmp)
SINON
retourne (x * tmp * tmp)
Finsi
Finsi
Finsi
FinFonction
Algorithme d’Euclide : Exercice
Principe :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
264
Algorithme d’Euclide : Exercice
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
265
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
266
a et b entiers naturels
non nuls et a>b
Calculer le reste r de la
Division de a par b
a prend la valeur de b
b prend la valeur de r
r=0 ?
Pgcd b
Oui
Non
Organigramme :
Algorithme d’Euclide : Exercice
Algorithme d’Euclide : Exercice
Fonction Pgcd ( a : entier , b : entier ) : entier
Variable a,b : entier
Debut
Si (b=0) alors
retourne (a)
Sinon
retourne (Pgcd (b , a mod b))
Finsi
FinFonction
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
267
Exemples : lecture d'une matrice
Procédure SaisieMatrice (n : entier par valeur, m : entier par valeur , tableau A : réel par référence )�Début
variables i,j : entier
Pour i allant de 0 à n-1� Ecrire ("saisie de la ligne ", i + 1)
Pour j allant de 0 à m-1
Ecrire ("Entrez l'élément de la ligne ", i + 1, " et de la colonne ", j+1)
Lire (A[i][j])
FinPour
FinPour
FinProcédure
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
268
Exemples : affichage d'une matrice
Procédure AfficheMatrice (n : entier par valeur, m : entier par valeur ,tableau A : réel par valeur )�Début
variables i,j : entier
Pour i allant de 0 à n-1� Pour j allant de 0 à m-1
Ecrire ("A[",i, "] [",j,"]=", A[i][j])
FinPour
FinPour
FinProcédure
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
269
Exemples : somme de deux matrices
Procédure SommeMatrices (n, m : entier par valeur,
tableau A, B : réel par valeur , tableau C : réel par référence )�Début
variables i,j : entier
Pour i allant de 0 à n-1� Pour j allant de 0 à m-1
C[i][j] ← A[i][j]+B[i][j]
FinPour
FinPour
FinProcédure
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
270
Appel des Fonctions définies sur les matrices
Exemple d'algorithme principale où on fait l'appel des Procédures définies précédemment pour la saisie, l'affichage et la somme des matrices :
Algorithme Matrices
variables tableau M1[3][4],M2 [3][4],M3 [3][4] : réel
Début
SaisieMatrice (3, 4, M1)
SaisieMatrice (3, 4, M2)
AfficheMatrice (3,4, M1)
AfficheMatrice (3,4, M2)
SommeMatrice (3, 4, M1,M2,M3)
AfficheMatrice (3,4, M3)
Fin
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
271
Recherche séquentielle :
x , N et T sont des paramètres de la fonction
Fonction Recherche(x : réel, N: entier, tableau T : réel ) : booléen
Variable i: entier
Pour i allant de 0 à N-1� Si (T[i]=x) alors� retourne (Vrai)
FinSi� FinPour
retourne (Faux)
FinFonction
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
272
273
Il existe très peu de contraintes dans l’écriture d’un programme C. Aussi existe-t-il un certain nombre de conventions :
Les conventions d’écriture d’un programme C :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
274
275
Analyse descendante : Diviser pour régner
Diviser pour régner consiste à décomposer le problème complexe à résoudre en plusieurs sous problèmes moins complexes. A refaire cette décomposition sur les sous problèmes jusqu’à obtenir des sous problèmes faciles à résoudre.
Conclusion :
La solution à un problème bien défini peut être formulée comme une suite des trois énoncés suivants :
Exemple :
Algorithme de résolution d'équation de second degré :
a x2 + b x + c = 0
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
276
ax2+bx+c=0
bx+c=0
ax2+bx+c=0
c=0
Infinités de solutions
Pas de solutions
x=-c/b
Δ=b2-4ac
Δ=0
x=-b/2a
Δ≠0
Δ<0
Pas de solutions réelles
Δ>0
x1=-b-(Δ)1/2/2a
x2=-b+(Δ)1/2/2a
a=0
a≠0
b=0
c=0
b≠0
c≠0
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
277
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
278
Algorithme Eq_Second_Degré
Réel a, b, c , Delta
Début
Ecrire ("Donner les coefficients : ")
Lire(a,b,c)
Si (a = 0) alors
Si (b = 0) alors
Si (c = 0) alors
Ecrire ("Infinités de solutions")
Sinon
Ecrire ("Pas de solutions")
FSi
Sinon
Ecrire ("Equation de 1er degré, une racine réelle : ",-c/b)
FSi
Sinon
Delta ← b*b –4*a*c
Si (Delta = 0) Alors
Ecrire ("Une racine réelle double : " , -b/(2*a))
Sinon
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
279
Si (Delta > 0) Alors
Ecrire("Deux racines réelles : x1 = ", (-b + racine(Delta)) /(2*a) , " x2 = ", (-b + racine(Delta)) /(2*a) )
Sinon
Ecrire("Pas de solutions réelles ")
FSi
FSi
FSi
Fin
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
280
\f | Saut de page |
\n | Saut de ligne |
\r | Retour chariot |
\t | Tabulation horizontale |
\v | Tabulation verticale |
\ \ | \ |
\" | " |
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
281
282
Algorithme somme2
Variables som, i : entier
Debut
som ← 0
i ← 1
TantQue (som <=100)
som ← som + i
i ← i+1
FinTantQue
Ecrire ("La valeur cherchée est N= ",i-1)
Fin
#include<stdio.h>
main ()
{
Int i,som ;
som=0;
i=0 ;
while (som <=100)
{ som = som + i ;
i = i+1 ;}
Printf ("La valeur cherchée est N=%d ",i-1);
}
Exercice :
Algorithme :
Langage C :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
283
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
284
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
285
Algorithme
Selon que identificateur vaut
Valeur 1 faire Instructions 1
Valeur 2 faire Instructions 2
Valeur n faire Instructions n
Autrement que Instructions n+1
Finselon
Langage C
Switch (Expression)
{ case n1 : action 1;
break;
case n2 : action 2;
break;
case n3 : action 3;
break;
default : action n;
}
Algorithme jour_de_travail
Variable jour : chaine de caractères
Debut
Lire (jour)
Selon que jour vaut
Lundi Mardi Mercredi jeudi Vendredi faire Ecrire ("c’est un jour de travail")
Samedi Dimanche faire Ecrire ("c’est weekend")
Autrement que Ecrire ("Le nom du jour invalide")
Finselon
Fin
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
286
Opérateurs | Signification | Représentation algorithmique | Exemple |
= | égal | = | A=B |
≠ | Différent de… | <> | A<>B |
< | Strictement plus petit que… | < | A<B |
> | Strictement plus grand que… | > | A>B |
≤ | plus petit ou égal à… | <= | A<=B |
≥ | plus grand ou égal à… | >= | A>=B |
Par convention, l’algorithme note certains opérateurs de comparaison différemment :
Remarques :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
287
Opérateurs | Signification | Représentation algorithmique | Exemple | Représentation Langage C | Exemple |
= | égal | = | A=B | = = | A= =B |
≠ | Différent de… | <> | A<>B | != | A!=B |
< | Strictement plus petit que… | < | A<B | < | A<B |
> | Strictement plus grand que… | > | A>B | > | A>B |
≤ | plus petit ou égal à… | <= | A<=B | <= | A<=B |
≥ | plus grand ou égal à… | >= | A>=B | >= | A>=B |
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
288
Exemple de langages :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
289
LANGAGE DE PROGRAMMATION
I) Définitions :
Un langage de programmation est un langage informatique composé d’un ensemble d’instructions pouvant être traduites et exécutées par un ordinateur.
Exemple :
Basic, Pascal, COBOL, Fortaran, C, C++, LOGO,…
1) Définition d’un langage de programmation :
2) Définition d’un programme :
Un programme est une suite ordonnée d’instructions, compréhensibles par l’ordinateur, appliqué à des données afin d’obtenir des résultats.
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
290
1) L’identificateur :
Un identificateur en langage C doit débuter par une lettre suivie par un nombre de lettres ou de chiffres.
x, max, val4
Exemples :
2) Les types de données :
Le langage C distingue plusieurs types d’entiers tels que :
Type | Taille (Octet) | Plage de valeur |
int | 2 | -231 à 231 |
unsigned int | 2 | 0 à 232 |
long int | 4 | -263 à 263 |
II) Langage de programmation C :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
291
int n ;
unsigned int n ;
long n ;
En langage C les réels sont subdivisés en plusieurs types :
Déclaration :
Type | Taille (Octet) | Plage de valeur |
float | 4 | -3.4 1038 à 3.4 1038 |
double | 8 | -1.7 10308 à 3.4 10308 |
long double | 12 | -3.4 104932 à 1.1 104932 |
float x ;
double x ;
long double x ;
Déclaration :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
292
Ce type sert à manipuler les caractères.
char a ;
Déclaration :
Ce type prend la valeur 0 pour faux et une valeur différente de 0 (Exemple : 1) pour vrai.
bool p ;
Déclaration :
Remarques :
Chaque déclaration est obligatoirement suivie d’un point virgule.
Un caractère
Chaîne de caractères
char d[10] ;
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
293
3) Les instructions :
a) l’instruction d’entrée :
L’instruction de lecture est symbolisée par scanf, elle permet le transfert des données vers la mémoire centrale .
Syntaxe :
scanf("code d’entrée", adresse de l’identificateur) ;
Remarques :
Les codes d’entrée pour scanf sont :
Type | Format |
Entier | %d |
Entier non signé | %u |
Entier long | %ld |
Réel (Flottant) | %f |
Réel double | %lf |
Réel long double | %Lf |
Caractère | %c |
Chaîne de caractères | %s |
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
294
Exemples :
scanf("%d",&n) ;
scanf("%u",&n) ;
scanf("%ld",&n) ;
scanf("%f",&x) ;
scanf("%lf",&x) ;
scanf("%Lf",&x) ;
scanf("%c",&c) ;
scanf("%s",ab) ;
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
295
b) l’instruction de sortie :
L’écriture se fait de façon semblable que la lecture à l’aide de l’instruction printf.
Syntaxe :
printf("code de sortie", l’identificateur) ;
Remarque :
Les codes d’entrée pour scanf deviennent les codes d’affichage pour printf.
Exemples :
printf ("%d",n) ;
printf ("%u",n) ;
printf ("%ld",n) ;
printf ("%f",x) ;
printf ("%lf",x) ;
printf ("%Lf",x) ;
printf ("%c",a) ;
printf ("%s",ab) ;
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
296
Important :
Au début d’un programme utilisant les fonctions d’affichage et de saisie il est nécessaire d’écrire # include <stdio.h>, car toutes les fonctions sont déclarées dans ce fichier d’en-tête.
c) l’instruction d’affectation :
Cette instruction permet de mettre une valeur dans une variable. Le symbole de l’affectation est =
Syntaxe :
variable = valeur ;
Remarques :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
297
d) les instructions conditionnelles :
Syntaxe :
if (condition) Instruction;
Syntaxe :
if (condition)
InstructionA;
else
InstructionB;
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
298
Syntaxe :
if (condition1)
if (condition2)
InstructionA;
else
InstructionB;
else
if (condition3)
InstructionC;
Syntaxe :
Switch (Expression)
{ case n1 : action 1;
break;
case n2 : action 2;
break;
case n3 : action 3;
break;
default : action n;
}
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
299
Si un bloc contient plus qu’une instruction, il doit être délimité par les accolades « {} ».
Remarque :
Opérateurs | Signification | Représentation en langage C | Exemple |
= | égal | = = | A= =B |
≠ | Différent de… | != | A!=B |
< | Strictement plus petit que… | < | A<B |
> | Strictement plus grand que… | > | A>B |
≤ | plus petit ou égal à… | <= | A<=B |
≥ | plus grand ou égal à… | >= | A>=B |
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
300
3) Format simple d’un programme en C :
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
301
/*Programme Temperature_eau*/
#include <stdio.h>
main()
{
int Temperature ;
printf("Entrez la température de l’eau :") ;
scanf("%d",&Temperature) ;
if(Temperature<=0)
printf("C’est de la glace") ;
else
if(Temperature<=100)
printf("C’est du liquide") ;
else
printf("C’est du vapeur") ;
}
Algorithme Temperature_eau
Variable Temperature : Entier
Debut
Ecrire ("Entrez la température de l’eau :")
Lire (Temperature)
Si (Temperature<=0) Alors
Ecrire ("C’est de la glace")
Sinon
Si (Temperature<=100) Alors
Ecrire ("C’est du liquide")
Sinon
Ecrire ("C’est du vapeur")
Finsi
Finsi
Fin
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
302
*
Ingénierie numérique et simulation-MPSI/TSI/PCSI
303
Type | Format | |
Entier | int | %d |
Entier non signé | unsigned int | %u |
Entier long | long | %ld |
Entier long non signé | unsigned long | %lu |
Réel (Flottant) | float | %f ou %e |
Réel double | double | %lf ou %le |
Réel long double | Long double | %Lf |
Caractère | char | %c |
Chaîne de caractères | char | %s |