Cours Progammation Python
Cours Progammation Python
PROGRAMMATION
PYTHON
Niveau : 3SI/4SC
Cours 3SI
ProgrammationPython
Chapitre 1 : Les structures de données et les structures simples
Chapitre 2 : Les structures algorithmiques de contrôle
Chapitre 3 : Les sous programmes
Chapitre 4 : Le vecteur et la matrice
Chapitre 5 : Les algorithmes de tri et de recherche
Chapitre 6 : Les algorithmes récurrents
Chapitre 7 : Les algorithmes arithmétiques
Chapitre 8 : Les enregistrements
Chapitre 9 : Les fichiers
I. L’opération d’entrée:
1. Définition :
L’opération d’entrée c’est l’instruction qui permet à l’utilisateur de rentrer ou de saisir des
valeurs au clavier pour qu’elles soient utilisées par le programme. Cette opération est la lecture.
2. Vocabulaire et syntaxe:
Algorithme Python
Lire (variable) variable = type (input( ))
3. Exemple :
Algorithme Python
Lire (n) n = int (input( ))
4. Remarque:
▪ Quand on demande à la machine de lire un variable, cela implique que l’utilisateur va devoir
écrire cettevaleur.
▪ Les données qui sont lues doit être compatibles aux variables réservées enmémoire.
2. Vocabulaire et syntaxe:
En algorithme En Python
Affichage d’un texte : Affichage d’un texte :
3. Exemple :
En algorithme En Python
Ecrire ("La valeur de n est : ") print ("La valeur de n est : ")
Ecrire (n) print (n)
ou bien ou bien
Ecrire ("La valeur de n est : ", n) print ("La valeur de n est : ", n)
4. Remarque:
▪ Quand on demande à la machine d’écrire une valeur, c’est pour que l’utilisateur puisse lalire.
5. Application:
Ecrire l’algorithme et son implémentation en Python d’un programme qui permet de
calculer puis d’afficher la somme de deux réels a et b.
➢ Solution:
En algorithme En Python
Algorithme Somme
Début
Ecrire("a="), Lire (a) a = float(input("a="))
Ecrire("b="), Lire(b) b = float(input("b="))
som a+b som = a+b
Ecrire (som) print ("som=", som)
Fin
Résultat d’exécution
▪ T.D.O :
O T/N
a,b, som Réels
1. Définition :
L’opération d’affectation c’est une action qui permet d’affecter une valeur à une variable.
Elle est représentée par une flèche orientée vers la gauche « ».
2. Vocabulaire et syntaxe:
Algorithme Python
Variable valeur Variable = valeur
3. Exemple :
Algorithme Python Commentaire Résultat
x5 x =5 x reçoit 5 x=5
ax+3 a =x+3 a reçoit la valeur de l’expression x+3 a = 5+3 = 8
xx-2 x =x-2 x reçoit la valeur de l’expression x-2 x = 5-2 = 3
4. Remarque:
▪ Il est évident que la variable située à gauche soit de typenumérique.
▪ Le type des variables situées à droite doit être de même type ou de type compatible que celle
située àgauche.
5. Application 1 :
Soit la séquence d'affectations suivante :
1) x 10
2) y 8
3) z x
4) x y
5) y z
1. Donner le résultat d'exécution de cette séquence sous forme d'untableau.
2. Quelles sont les valeurs finales de x et de y?
3. Quel est le rôle de cette séquence?
4. Quelle est l'utilité de la variable z?
6. Application 2 :
Ecrire l’algorithme et son implémentation en Python d’un programme qui permet de permuter
les contenus de deux réels a et b.
Opérations Opérations
Rôles Exemples
(en Algorithme) (enPython)
+ + Adition 5+2=7
- - Soustraction 5–2=3
* * Multiplication 5 * 2 = 10
/ / Division 5 / 2 = 2.5
DIV // Division entière 5 // 2 = 2
= == Egalité 5 = = 5 renvoie vrai
< < Inférieur 2 < 5 renvoievrai
> > Supérieur 5 > 2 renvoievrai
≤ <= Inférieur ou égal 2 <= 5 renvoie vrai
≥ >= Supérieur ou égal 5 >= 2 renvoie vrai
≠ != Différent 5 != 2 renvoie vrai
Xn X ** n Puissance 5 ** 2 = 25
MOD % Modulo 5%2=1
c. Application:
On se propose de saisir l'heure en seconde et de l'affiche en heure, minute et seconde. Pour ce
fait, on vous demande de d'écrire l'algorithme correspondant et le traduire en Python.
d. Application:
Ecrire un algorithme d’un programme qui permet de saisir un réel R, puis de calculer et
d’afficher sa racine carrée Rc.
3. Le type Booléen ( bool):
a. Définition:
Le type booléen comporte deux valeurs Vrai et Faux (True et False en Python).
x y NON(x) x ET y x OU y x OUex y
V V F V V F
V F F F V V
F V V F V V
F F V F F F
Remarque :
▪ Si n = 0 alors la chaîne est dite vide ("" : chaîne vide).
▪ Les valeurs chaîne de caractères sont définies entreguillemets
Fonctions Fonctions
Exemples
en algorithme enPython
Concat (ch1, ch2) ch1 +ch2 "Bon" + "jour" renvoie "Bonjour"
Long (ch) len (ch) len ("Bonjour") renvoie 7
Ch = " Bonjour papa "
EffaceEspace(Ch) Ch.Strip()
Ch.Strip() renvoie "Bonjour papa"
Ch = "Bonjour"
Pos (ch1, ch) Ch.find (ch1)
Ch.find ("on") renvoie 1
Ch = "Bonjour papa"
Remplace (Ch1, Ch2, Ch) Ch.replace(Ch1, Ch2) Ch.replace("papa","maman")
renvoie "Bonjour maman"
MAJUS (Ch) Ch.upper() Ch = "Bonjour"
Ch.upper() renvoie "BONJOUR"
MINUS (Ch) Ch.lower() Ch = "Bonjour"
Ch.lower() renvoie "bonjour"
Occurrence (Ch1, Ch) Ch.count(Ch1) Ch = "Bonjour"
Ch.count("on") renvoie 1
# liste entiers
list=[1, 2, 3]
# premier élément
print(list[0])
# 2èmeélément
print(list[1])
# dernier élément
print(list[-1])
# premierélément
print(list[0])
# ->9
# 2ème élément
print(list[1])
# ->5
# dernier élément
print(list[-1])
# ->13
7. Méthodes
▪ sum()
Calcule la somme de tous les éléments de la liste.
1 # syntaxe : sum(List)
2 List=[1, 6, 3, 9]
3 print(sum(List))
▪ count()
Calcule le nombre d'occurrence d'un élément donné de la liste.
1 # syntaxe : List.count(valeur)
2 List=[10, 2, 3, 9, 2, 1, 2, 3, 2]
3 print(List.count(3))
4 # -> 2
▪ length()
Calcule la taille de la liste
1 # syntaxe : len(liste)
2 List=[10, 2, 3, 9, 2, 1, 2, 3, 2]
3 print(len(List))
4 # -> 9
▪ index()
Retourne l'index de première occurrence. Les index de début et de fin ne sont pas des paramètres
nécessaires.
1 #syntaxe : List.index(valeur[,debut[,fin]])
2 List=[10, 2, 3, 9, 2, 1, 2, 3, 2]
3 print(List.index(2))
4 # -> 1
5
6 # rechercher a partir de la position 3
7 print(List.index(2,3))
8 # -> 4
9
10 # rechercher dans la plage 3 - 6
11 print(List.index(2,3,7))
12 # -> 4
▪ min()
Calcule le minimum de tous les éléments de la liste.
1 # syntaxe min(List)
2 List=[10, 2, 3, 9, 2, 1, 2, 3, 2]
3 print(min(List))
4 # -> 1
▪ max()
Calcule le maximum de tous les éléments de la liste.
1 # syntaxe max(List)
2 List = [10, 2, 3, 9, 2, 1, 2, 3, 2]
3 print(max(List))
4 # -> 10
▪ reverse()
Inverser l'ordre des éléments dans la liste
1 # syntaxe List.reverse()
2 List = [10, 2, 3, 9, 2, 1, 2, 3, 2]
3 List.reverse()
4 print(List)
5 # [2, 3, 2, 1, 2, 9, 3, 2, 10]
▪ sort()
Triez (tuple et liste) par ordre croissant.
Key et reverse_flag ne sont pas des paramètres nécessaires et reverse_flag est défini sur False, si
rien n'est passé par sort().
▪ del()
supprimer un élément mentionné à l'aide du nom de la liste et son indice
▪ Opérateur"in"
Cet opérateur est utilisé pour vérifier si un élément est présent ou non dans la liste. Renvoie true si
l'élément est présent dans la liste, sinon renvoie false.
1 List=[10, 2, 3, 9, 2, 1, 2, 3, 2]
2 if9inList:
3 print("élément est présent dans la liste")
4 else:
5 print("l'élément n'est pas présent dans la liste")
▪ Opérateur "notin"
Cet opérateur est utilisé pour vérifier si un élément n'est pas présent dans la liste. Renvoie true si
l'élément n'est pas présent dans la liste, sinon renvoie false.
1 List=[10, 2, 3, 9, 2, 1, 2, 3, 2]
2 if9notinList:
3 print("l'élément n'est pas présent dans la liste")
4 else:
5 print("l'élément est présent dans la liste")
"*" : Cet opérateur est utilisé pour multiplier la liste «n» fois et renvoyer une seule liste.
1 L1 = [1, 2,3]
2 L2 = [4, 5,6]
3
4 List1=L1+L2
5 # -> [1,2, 3, 4, 5, 6]
6
7 List2=L1 *3
8 # [1, 2, 3, 1, 2, 3, 1, 2, 3]
▪ clear()
Cette fonction permet d'effacer tous les éléments de la liste. Après cette opération, la liste devient
vide.
1 List=[10, 2, 3, 9, 2, 1, 2, 3, 2]
2 List.clear()
3 print(List)
4 # []
4. Remarque:
▪ Lorsque l'évaluation de la condition produit la valeur:
- Vrai : les instructions entre Alors et Fin Si sontexécutées.
- Faux : les instructions entre Alors et Fin Si ne sont pasexécutées.
▪ La condition peut être simple oucomposée.
▪ Si traitement 2 est vide, on parle de structure conditionnelle simple réduite qui à la syntaxe
suivante:
Algorithme Python
Si condition alors if condition :
<traitement 1> <traitement 1>
Fin Si
2. Solution de l’activité 1:
Algorithme Implémentation en Python
Algorithme Signe
Début
Ecrire ("Taper n : "), Lire(n) n = int (input ("Taper n : "))
Si n ≥ 0 Alors if n >= 0 :
msg ← "positif " msg = "positif"
Sinon else :
msg ← "négatif " msg = "négatif"
FinSi
Ecrire (n, " est ", msg) print (n, " est ", msg)
Fin
T.D.O :
Objets Type/ Nature
n Entier
msg Chaine de caractère
3. Vocabulaire et syntaxe:
Algorithme Python
Si condition1 alors if condition1 :
<traitement1> <traitement 1>
Sinon Si condition2 alors elif condition2 :
<traitement2> <traitement 2>
… ...
Sinon Si conditionN-1 alors elif condition N-1:
<traitement N-1> <traitementN-1>
Sinon else :
<traitement N> <traitement N>
Fin Si
4. Remarque:
▪ L’exécution d’un traitement entraîne automatiquement le non exécution des autres
traitements.
▪ La condition peut être simple oucomposée.
5. Solution de l’activité 2:
Algorithme Implémentation en Python
Algorithme Signe
Début
Ecrire ("Taper n : "), Lire(n) n = int (input ("Taper n : "))
Si n > 0 Alors if n > 0 :
msg ← "strictement positif " msg = "strictement positif"
Sinon Si n<0 Alors elif n < 0 :
msg ← " strictement négatif " msg = " strictement négatif"
Sinon else :
msg ← "nul " msg = "nul"
Fin Si
Ecrire (n, " est ", msg) print (n, " est ", msg)
Fin
T.D.O :
Objets Type/ Nature
n Entier
msg Chaine de caractère
2. Définition :
La structure itérative complète Pour … Faire est utilisée lorsqu'on a un nombre de répétition
connu à l’avance d’un traitement donné.
3. Vocabulaire et syntaxe:
Algorithme Python
Pour <compteur>de <Vi>à <Vf>Faire for <compteur>in range (Vi, Vf):
<traitement1> <traitement1>
Fin pour else :
<traitement 2>
4. Remarque:
• Le compteur est une variable de type scalaire énuméré (généralement entier ou caractère) et sa
pas d’incrémentation est par défaut de 1.
• Le compteur est initialisé à sa valeur initiale Vi et passe à sa valeur suivante après chaque
répétition jusqu'à attendre la valeur finaleVf.
• Vi et Vf sont de même type ou de type compatible que lecompteur.
• Si on utilise range(Vf) alors la valeur initiale Vi=0
• Si on utilise range(Vi, Vf, P) alors sa pas d’incrémentation devient de valeurP
• Dans toutes les structures, chaque traitement peut comporter une ou plusieursinstructions.
• La clause else est facultatif et elle n’est exécutée que lorsque on a attendre la valeur finale Vf-1
de la bouclefor
• On peut utiliser l’instruction break pour sortir de la boucle et passer à l’instructionsuivante
• On peut utiliser l’instruction contenue pour passer directement à l’itérationsuivante
5. Solution de l’activité 3:
Algorithme Implémentation en Python
Algorithme affichage
Début
Pour i de 0 à 1000 faire for i in range(1000) :
Ecrire ("Informatique") print("Informatique")
Fin Pour
Fin
T.D.O :
Objets Type/ Nature
i Entier
3. Vocabulaire et syntaxe:
Algorithme Implémentation en Python
Répéter While True:
<traitement> <traitement>
Jusqu'à <condition de sortie> if <condition de sortie>
break
4. Remarque:
• S’il y a un éventuel compteur, il faut l’initialiser avant la boucle pour assurer son avancement
dans laboucle.
• La condition d‘arrêt est considérée comme une condition de sortie de la boucle car, une fois
elle est vérifier on quitte laboucle.
• La condition de sortie de la boucle peut être simple oucomposée.
• La boucle Répéter … Jusqu’à est une structure adaptée pour le contrôle de la saisie des
données. Elle impose l’utilisateur d’entrer des données qui vérifient certainescontraintes.
5. Solution de l’activité 4:
Algorithme Implémentation en Python
Algorithme Mot_Passe
Début
Répéter While True :
Ecrire (" Mot de passe:"), Lire (mot1) mot1=str(print("Mot de passe:"))
Ecrire ("Confirmation:"), Lire (mot2) mot2=str(print("Confirmation:"))
Jusqu’à (mot1 = mot2) if mot1 = mot2 :
Ecrire (" Mot de passe confirmé") break
Fin print("Mot de passe confirmé")
T.D.O :
Objets Type ou Nature
mot1, mot2 Chaîne de caractère
2. Définition :
La structure Tant que … Faire est utilisée lorsqu'on a dans le cas ou le nombre de répétition
d’un traitement donné est inconnu et que le traitement sera exécuté zéro ou un nombre variable de
fois.
3. Vocabulaire et syntaxe:
Algorithme Python
Tant que <condition d’entrée>Faire while <condition d’entrée>:
<traitement 1> <traitement 1>
Fin Tant que else :
<traitement 2>
4. Remarque:
• S’il y a un éventuel compteur, il faut l’initialiser avant la boucle pour assurer son avancement
dans laboucle.
• La condition d‘arrêt est considérée comme une condition d’entrée car, tant que elle est
vérifier on itère encore jusqu’à sa nonvérification.
• La condition d’entrée dans la boucle peut être simple oucomposée.
• La clause else est facultatif et elle n’est exécutée que lorsque la condition d’entrée de laboucle
whiledevientfalse
• On peut utiliser l’instruction break pour sortir de la boucle et passer à l’instructionsuivante
• On peut utiliser l’instruction contenue pour passer directement à l’itérationsuivante
5. Solution de l’activité 5:
Algorithme Implémentation en Python
Algorithme PGCD
Début
Ecrire ("Taper n : "), Lire(n) n = int (input ("Taper n :"))
Ecrire ("Taper m : "), Lire(m) m = int (input ("Taper m :"))
Tant que (m≠n) Faire while(m!=n) :
Si m>n Alors if m>n :
m ← m-n m = m-n
Sinon else :
n ← n-m n = n-m
Fin Si
Fin Tant que
Ecrire ("PGCD=", m) print ("PGCD=", m)
Fin
T.D.O :
Objets Type/ Nature
m,n Entier
I. Introduction:
Afin de faciliter la résolution d’un problème complexe et de grande taille, on a intérêt à le
décomposer en sous problèmes indépendants et de taille réduite. A chaque sous problème on
associe un module assurant sa résolution qui peut être une fonction ou une procédure.
II. Les fonctions:
1. Activité 1:
Ecrire un algorithme et son implémentation en Python d’un programme qui permet de calculer
puis d’afficher le nombre de combinaison de P objets parmi N.
CPN= N! / (P!(N-P)!) ; N, P sont deux entiers strictement positifs avec N>P.
Remarque:
OnconstatequelecalculdeN!,P!et(N-
P)!sefaitdelamêmemanièreetletraitementquicalculelafactorielleserépètetroisfoisetbiens
urleprogrammedévienttrèslong.
2. Vocabulaire et syntaxe:
Algorithme
Fonction Nom_fonction (pf1: type1, pf2: type2, … , pfn : typen) : Type_résultat
DEBUT
<Traitement>
Retourner Résultat
FIN
Implémentation en Python
def Nom_fonction (pf1, pf2 , … , pfn ) :
<traitement>
Return Résultat
3. Solution de l’activité 1:
➢ Solution:
En algorithme Implémentation en Python
Algorithme NbCombinaison
Début def Fact(M):
Répéter F=1
Ecrire ("N="), Lire (N) foriin range(2,M+1) :
Ecrire ("P="), Lire (P) F=F*i
Jusqu'à ((N>P) et (P>0))
F1Fact (N) return(F)
F2Fact (P)
F3Fact (N-P)
C F1/F2*F3 while (True) :
Ecrire (C) N = int(input("N="))
Fin P = int(input("P="))
▪ T.D.O.Globaux: if(N>=P) and (P>0):
Objets Type/ Nature break
F1,F2,F3,N, P, C Entiers F1=Fact(N)
F2=Fact(P)
Fonction Fact (M : Entier) : Entier F3=Fact(N-P)
Début C=F1/F2*F3
F 1 print("C=" , C)
Pour i de 1 à M+1Faire
F F*i Résultat d’exécution pour N=9 et P=5
Fin Pour
Retourner (F)
Fin
▪ T.D.O.Locaux:
Objets Type/Nature
i,F Entiers
4. Caractéristiques
▪ Une fonction est un sous-programme qui retourne un type simple (entier,réel,…).
▪ Une fonction comporte des paramètres autres que lerésultat(paramètres formels).
▪ Retenons qu’une fonction est essentiellement un module de calcul et renvoi une seule
valeur d’un typesimple.
5. Remarque:
• Tout nouvel objet utilisé dans une fonction est appelé objetlocal.
• Tout objet déclaré dans le programme principal est appelé objetglobal.
• L’appel d’une fonction peut être effectué au niveau du programme principal ou au niveau d’un
moduleappelant et doit être affectée à une variable ou affichée directement
• Les paramètres formels qui figurent dans l’en tête de la déclaration de la fonction
correspondent à des variables locales utilisées dans soncorps.
• Les paramètres effectifs utilisés dans l’instruction d’appel de la fonction sont substitués aux
paramètres formels au moment de l’appel.
Remarque:
Onnepeutpasutiliserdesfonctionscommesolutioncarunefonctionestessentiellement
u
n
moduledecalcul.Donconabesoindedéfiniruneautremanièrededécomposition.
2. Vocabulaire et syntaxe:
Algorithme
Procédure Nom_procédure (pf1: type1, pf2: type2, … , pfn: typen)
DEBUT
<Traitement>
FIN
Python
def Nom_procédure (pf1, pf2, … , pfn) :
<Traitement>
3. Solution de l’activité 2:
➢ Solution:
4. Remarque:
• Tout nouvel objet utilisé dans une procédure est appelé objetlocal.
• Tout objet déclaré dans le programme principal est appelé objetglobal.
• L’appel d’une procédure peut être effectué au niveau du programme principal ou au
niveau d’un moduleappelant.
5. Les paramètres:
➢ Exemple:
En algorithme En Python
# Avec les listes
▪ TDO T = [int ( )] * 20
O T/N
# Avec la bibliothèque numpy
T tableau de 20 entiers
from numpy import array
T =array ([int ( )] * 20)
➢ Remarque :
▪ Un vecteur est une suite de cases mémoire qui peut contenir des valeurs de mêmetype.
▪ Un vecteur est caractérisé par son nom, sa taille et les types de ses éléments.
➢ Solution:
T 20 2 10 50 70
0 1 2 3 4
En algorithme En Python
➢ Exemple:
En algorithme En Python
▪ TDO
O T/N
# Avec la bibliothèque numpy
T tableau de 2 lignes * 3 from numpy import array
colonnes des entiers T =array ([[int( )]*3 for i in range (2)])
3. Application: (La somme des éléments pairs et le produit des éléments impairs d'unematrice)
Ecrire un algorithme et son implémentation en Python d’un programme qui permet de trouver et
d'afficher La somme des éléments pairs et le produit des éléments impairs d'une matrice M des entiers
de L lignes et de C colonnes avec (3≤L≤20) et (3≤C≤20).
for i in range(l):
for j in range(c):
if parité(M[i][j])==True:
som = som + M[i][j]
else :
prod = prod * M[i][j]
print("Somme pairs =", som, " et Produit impairs", prod )
l=int(input('nombre de lignes'))
while not(3<=l<=20):
l=int(input('nombre de lignes'))
c=int(input('nombre de colonnes'))
while not(3<=c<=20):
c=int(input('nombre de colonnes'))
M=array([[int()]*c for i in range (l)])
print(M)
saisie(M,l,c)
print(M)
affichesomprod(M,l,c)
4. APPLICATION 1:
On désire afficher, à partir d’une matrice carréeM rempli par n*n entiers strictement positifs, tous les
élémentsqui sont premiers palindromes (les nombres qui sont à la fois premiers et palindromes)
SOLUTION :
from numpy import array
def palindrome(x):
ch=str(x)
l=len(ch)
pal=True
for i in range (l):
if ch[i]!=ch[l-i-1]:
pal=False
return pal
def premier (y):
prem=True
for i in range (2,(y//2)+1):
if y%i==0:
prem=False
return prem
def premierpalindrome(z):
if palindrome(z) and premier(z):
print(M[i][j],' est premier palidrome')
n=int(input('entrer taille matrice carré'))
while n<=0:
n=int(input('entrer taille matrice carré'))
M=array([[int()]*n for i in range (n)])
for i in range (n):
for j in range (n):
M[i][j]=int(input('M['+str(i)+']['+str(j)+']='))
for i in range (n):
for j in range (n):
premierpalindrome(M[i][j])
11 est un nombre premier palindrome 101 est un nombre premier palindrome 131 est un nombre premier
palindrome 151 est un nombre premier palindrome 181 est un nombre premier palindrome 191 est un
nombre premier palindrome 313 est un nombre premier palindrome 353 est un nombre premier
palindrome 373 est un nombre premier palindrome 383 est un nombre premier palindrome 727 est un
nombre premier palindrome 757 est un nombre premier palindrome 787 est un nombre premier
palindrome 797 est un nombre premier palindrome 919 est un nombre premier palindrome 929 est un
nombre premier palindrome 10301 est un nombre premier palindrome 10501 est un nombre premier
palindrome
5. Application 2 :
Ecrire un programme qui permet de saisir une matrice de caractères m de l lignes (2<=l<=10) et c
colonnes (2<=c<=15) par des caractères alphabétiques minuscules puis une chaine de caractères non
vide puis de vérifier si la chaine ch existe dans m en horizontal et en vertical.
Solution :
from numpy import array
def verif(t1,t2,l,c,ch):
for i in range (l):
if ch==t1[i]:
return True
return False
12 10 0 -5 8 12 -2 2 40 -1
0 1 2 3 4 5 6 7 8 9
Soient premier et dernier les extrémités gauche et droite de l’intervalle dans lequel on cherche la valeur x, on
calcule m, l’indice de l’élément du milieu:
m=(premier + dernier ) div 2
Principe:
Il y a 3 cas possibles:
• x<T[m], l’élément x s’il existe, il se trouve dans l’intervalle [premier... m-1]
• x > T[m], l’élément de valeur x, s’il existe, se trouve dans l’intervalle [m+1... Dernier]
•x=T[m], x est trouvé, la recherche est terminée
La recherche dichotomique consiste à itérer ce processus jusqu’à ce que l’on trouve x ou que l‘intervalle de
recherche soit vide.
Exemple:
Soit T un tableau contenant les10 éléments suivants:
-5 -2 -1 0 2 8 10 12 12 40
0 1 2 3 4 5 6 7 8 9
O T/N
a, b,m Entiers
trouve Booléen
Fin Pour
Fin
T.D.OLocaux:
O T/N
i, j,posmin,aux Entiers
V. Application :
Ecrire un algorithme et son implémentation en Python d’un programme qui permet de vérifier
l’existence d’un entier x saisi au clavier dans un vecteur T de n entiers avec (5≤n≤20). On utilisant la
méthode de recherche dichotomique.
Exemple:Siondonnen=8,T = 2 | 5 | 8 | 1 | 0 | 9 | 5 | 7 etx=1 le résultat est " 1 Existe dans T ".
➢ Solution:
En algorithme Implémentation en Python
Fonction saisir( ) : entier from numpy import array
Début T =array ([int ( )] * 20)
Répéter
Ecrire ("n="), Lire (n) def saisir():
Jusqu’à (5≤n≤20) while (True) :
retourner (n) n = int(input("n="))
Fin if(5<=n<=20) :
▪ TDO.Locaux break
Objet Type/Nature return(n)
n entier
def remplir(n,T):
Fonction remplir( n : entier ;T : Tab) for i in range(n):
Début T[i]=int(input("T["+str(i)+"]="))
Pour i de 0 à n-1 Faire
Ecrire (" T[ ", i , " ]= "), Lire(T[i]) def TriBulles(n,T):
Fin pour while True:
Fin Tri=True
▪ TDO.Locaux for i in range(n-1) :
Objet Type/Nature if T[i]>T[i+1]:
i entier aux =T[i]
T[i]=T[i+1]
T[i+1] =aux
Procedure TriBulles (n : Entier ; @T : Tab)
Tri = False
Debut
if Tri==True :
Répéter
break
Tri Vrai
Pour i de 0 à n-2 Faire
def Dichotomique(x,n,T) :
Si (T[i] >T[i +1] ) Alors
a = 0
aux T[i]
b = n-1
T[i] T[i+1] Existe =False
T[i+1] aux while True:
Tri Faux p = (a+b) // 2
Fin Si if ( T[p]==x ):
Fin Pour Existe = True
Jusqu'à (Tri = Vrai) elif (x<T[p]) :
Fin b = p-1
• T.D.OLocaux: else :
O T/N a = p+1
i Entier if (Existe==True) or (a>b) :
Tri Booléen break
return(Existe)
Fonction Dichotomique(x, n:Entier ;
@T:Tab):Booléen def afficher(n,T):
Début x=int(input("x="))
a 1 if Dichotomique(x,n,T)==True:
bn print(x,"Existe dans le tableau")
Existe Faux else:
Répéter print(x,"N'existe pas dans le tableau")
p (a+b) DIV 2
Si ( T[p]=x )Alors n=saisir()
Existe Vrai remplir(n,T)
Sinon Si (x<T[p]) Alors TriBulles(n,T)
b p-1 afficher(n,T)
Sinon
a p+1
Fin Si
Jusqu'à ((Existe = Vrai) OU (a>b))
Retourner(Existe)
Fin
• T.D.OLocaux:
O T/N
a,b, p Entiers
Existe Booléen
Algorithme Existence
Début
n saisir()
remplir(n, T)
TriBulles(n,T)
afficher(n,T)
Fin
▪ TDNT
Type
Tab= tableau de 20 entiers
▪ TDO.Globaux
Objet Type/Nature
n entier
T Tab
✓ un algorithme récurrent est dit d’ordre 2 si un résultat dépend des deux résultatsprécédents.
Exemple :
Dans la suite de Fibonacci, Bn = Bn-1 + Bn-2
Dans la suite de ce chapitre, nous allons traiter quelques algorithmes récurrents d’ordre 1 et d’ordre 2.
2. Applications
a. Application1
Ecrire un algorithme et son implémentation en Python d’une fonction Somme1 qui permet de
calculer la somme de n entiers saisis.
➢ Solution:
En algorithme Implémentation en Python
Fonction Somme1 (n : entier ) : entier def Somme1 (n) :
Début S=0
S0 for i in range(n) :
Pour i de 0 à n-1 Faire m=int(input("m ="))
S=S+m
Ecrire ("m ="), Lire (m)
return(S)
S S+m
Fin Pour
retourner (S)
Fin
▪ TDO.Locaux
Objet Type/Nature
i,m,S Entiers
b. Application2
Ecrire un algorithme et son implémentation en Python d’une fonction Somme2 qui permet de
calculer la somme des éléments réels d’une matrice carrée comportant n lignes et n colonnes.
➢ Solution:
En algorithme Implémentation en Python
Fonction Somme2 (M : Matrice ; n : entier ) : entier def Somme2 (M,n) :
Début S=0
S0 for L in range(n) :
Pour L de 0 à n-1 Faire for C in range(n) :
S=S+M[L,C]
Pour C de 0 à n-1Faire
return(S)
S S +M[L,C]
Fin Pour
Fin Pour
retourner (S)
Fin
▪ TDO.Locaux
Objet Type/Nature
L,C Entiers
S Réel
2. Applications
a. Application 1:
Ecrire un algorithme et son implémentation en Python d’une fonction MinMax qui permet de
chercher la plus petite et la plus grande valeur de n entiers saisis.
➢ Solution:
En algorithme Implémentation en Python
Procédure MinMax (n : entier def MinMax (n) :
)Début m=int(input("m ="))
Ecrire ("m ="), Lire (m) mini=m
mini m maxi=m
for i in range(1,n) :
maxi m m=int(input("m ="))
Pour i de 1 à n-1 Faire if m<mini :
Ecrire ("m ="), Lire (m) mini=m
Si m < mini alors if m>maxi :
mini m maxi=m
return(mini,maxi)
Fin Si
Si m > maxi alors
maxi m
Fin Si
Fin Pour
Retourner (mini, maxi)
Fin
▪ TDO.Locaux
Objet Type/Nature
m, i Entiers
b. Application 2:
Ecrire un algorithme et son implémentation en Python d’un programme qui permet de déterminer
puis d’afficherle minimum et le maximum des éléments réels d’une matrice carrée comportant
n lignes et n colonnes avec(3≤n≤20).
➢ Solution:
En algorithme Implémentation en Python
Algorithme RechercheMinMax from numpy import array
Début M =array ([[float ( )] * 20 for i in
nSaisir () range(21)])
Remplir (M, n)
def saisir():
mini,maxiPetitGrand(M,n)
while (True) :
Afficher (M, n, mini, maxi) n = int(input("n="))
Fin if(3<=n<=20):
break
▪ TDNT return(n) #Matrice carrée
Type
Mat=tableau de 20 lignes * 20 def remplir(M,n):
colonnes des entiers for i in range(n) :
for j in range(n) :
▪ TDO.Globaux M[i,j]=int(input("M["+str(i)+
Objet Type/Nature ","+ str(j)+ "]="))
n Entier
M Mat def PetitGrand (M, n) :
Remplir Procédure mini=M[0,0]
Afficher Procédure maxi=M[0,0]
for i in range(n):
Fonction saisir( ) : entier for j in range(n):
Début if M[i,j]<mini:
Répéter mini =M[i,j]
Ecrire ("n="), Lire (n) if M[i,j]>maxi:
Jusqu’à (3≤n≤20) maxi =M[i,j]
retourner (n) return(mini,maxi)
Fin
def afficher(M,n,mini,maxi) :
▪ TDO.Locaux mini, maxi = PetitGrand (M, n)
Objet Type/Nature print ("Minimum=", mini,
n entier "Maximum=", maxi)
n=saisir ()
Fonction remplir( M :Mat ;n:entier)
remplir (M, n)
Début
mini,maxi=PetitGrand(M,n)
Pour i de 0 à n-1 Faire
afficher (M, n, mini, maxi)
Pour j de 0 à n-1 Faire
Ecrire (" M[ ", i , ",", j, " ]= "),
Lire(M[i,j])
Fin pour
Fin pour
Fin
▪ TDO.Locaux
Objet Type/Nature
i, j entiers
▪ TDO.Locaux
Objet Type/Nature
PetitGrand Fonction
▪ TDO.Locaux
Objet Type/Nature
L, C Entiers
p Réel
1. Présentation
La manipulation des suites permet de faire beaucoup de calculs récurrents. Avec des suites
arithmétiques, géométriques ou autres, nous pouvons faire des recherches du néme terme, un calcul de la
somme des p premiers termes, ….
On s’intéressera dans la suite aux traitements récurrents d’ordre 1.
2. Applications
a. Application1
Ecrire un algorithme et son implémentation en Python d’une procédure TermeN qui permet de
chercher et d’afficher les n premiers termes de la suite U définie par :
U0 = 5
Un = 2Un-1 +1.5
b. Application2
Ecrire un algorithme et son implémentation en Python d’un programme qui permet :
✓ DedéterminerlederniertermeDtpourlequellasommedesnpremierstermesd’unesuite
W dépasse une limite L (100 ≤ L ≤ 500).
✓ D’afficher la liste des termes qui précèdentDt.
▪ TDO.Locaux
Objet Type/Nature
L entier
Résultat d’exécution pour L=400
Fontion Chercher (L : entier)
Début
W[0] 7
Som 7
i -1
Tant que Som ≤ L faire
ii+1
W[i] 2 * W[i-1] + 3.5
Som Som + W[i]
Fin Tant que
Dt W[i]
Di i
retourner (W, Dt,Di)
Fin
▪ TDO.Locaux
Objet Type/Nature
I,Di Entier
Som,Dt Réel
W Tab
V. Triangle dePascal
1. Présentation
Le triangle de Pascal fournit les coefficients de (a+b)n. C’est un procédé très utilisé et obtenu de
différentes façons en utilisant les combinaisons, ou un algorithmerécurrent.
2. Application
Ecrire un algorithme et son implémentation en Python d’une procédure PascalN qui permet de
remplir les n premières lignes du triangle de Pascal (n étant une donnée entière vérifant 2 ≤ n ≤ 20).
▪ TDO.Locaux
Objet Type/Nature
i, j Entiers
▪ TDO.Locaux
Objet Type/Nature
i, j Entiers
2. Définition
Le plus grand commun diviseur de deux entiers a et b appelé aussi PGCD est le plus grand
entier permettant de diviser a et b. On le note PGCD (a,b).
3. Applications :
a.Application1
Ecrire un algorithme et son implémentation en Python d’une fonction qui permet d’utiliser
l’algorithme d’Euclide pour déterminer le PGCD de deux entiers donnés m et n.
➢ Solution:
En algorithme Implémentation en Python
Fonction PGCD_Euclide (m, n : entier ) : entier def PGCD_Euclide (m,n) :
Début while n!=0 :
Tantque (n ≠ 0) Faire R = m % n
R m Mod n m =n
mn n =R
nR
Fin Tantque return(m)
retourner (m)
Fin
▪ TDO.Locaux
Objet Type/Nature
R Entier
c. Application 2 :
PGCD par différence :
▪ Si a=b alors PGCD(a,b) = a (oub)
▪ Sinon PGCD(a,b) = PGCD(a-b,b) si a >b
▪ Sinon PGCD(a,b) =PGCD(a,b-a)
➢ Solution:
En algorithme Implémentation en Python
Fonction PGCD_Diff (m, n : entier ) : entier def PGCD_Diff (m,n) :
Début while m!=n :
Tantque (m ≠ n) Faire if m>n:
Si m > n alors m=m-n
mm–n else :
Sinon n=n-m
nn–m
Fin Si return(m)
Fin Tantque
retourner (m)
Fin
2. Définition
Le plus petit commun multiple de deux entiers a et b appelé aussi PPCM est le plus petit entier
multiple à la fois de a et de b. On le note PPCM (a,b).
3. Application
Ecrire un algorithme et son implémentation en Python d’une fonction qui permet de renvoyer le
PPCM de deux entiers donnés m et n.
➢ Solution:
En algorithme Implémentation en Python
Fonction PPCM (m, n : entier) : entier def PPCM (m,n) :
Début if m > n :
Si m > n alors max = m
max m else :
Sinon max = n
i=m*n
max n
while i>=max :
Fin Si if i%m==0 and i%n==0:
I=m*n multiple=i
Tantque (i>=max) Faire i=i-1
Si i mod m=0 et i mod n = 0 alors return(multiple)
Multiplei m=int(input('entrer m='))
Fin Si n=int(input('entrer n='))
Ii-1 print('PPCM de ',m,' et ',n,'=',PPCM(m,n))
Fin Tantque
Retourner (multiple)
Fin
▪ TDO.Locaux
Objet Type/Nature
max,multiple,i Entiers
1. Présentation
Pour tester si un entier supérieur à 1 est premier, il suffit de :
▪ Déterminer ses diviseurs
▪ Vérifier que le nombre de ses diviseurs est exactement 2 (1 et lui même).
2. Définition
Un entier supérieur à 1 est dit premier s’il n’est divisible que par 1 et par lui-même.
3. Applications
a) Application1
Ecrire un algorithme et son implémentation en Python d’une fonction qui permet de vérifier si un
entier supérieur à 1 est premier ou non
➢ Solution:
En algorithme Implémentation en Python
Fonction Premier (n : entier ) : booléen def Premier (n) :
Début i=2
i 2 while n % i != 0 and i
<= (n // 2) :
Tantque (n mod i ≠ 0) et (i ≤ (n div 2)) Faire
i=i+1
ii+1 if i>n//2 :
Fin Tantque P=True
Si (i > n div 2) alors else :
P Vrai P=False
Sinon
P Faux return(P)
Fin Si
Retourner (P)
Fin
▪ TDO.Locaux
Objet Type/Nature
i Entier
P Booléen
b) Application2
Utilisez l’application précédente pour écrire un programme qui cherche puis affiche les nombres
premiers de l’intervalle [100,300].
➢ Solution:
En algorithme Implémentation en Python
Algorithme AffichePremier def Premier(n) :
Début i=2
Ecrire ("les nombres premiers de l’intervalle [ while (n % i) != 0 and i <=
(n // 2) :
100,300 ] sont") i=i+1
Pour i de 100 à 300 Faire if i>(n//2) :
P Premier (i) P=True
Si P=Vrai Alors else :
Ecrire (i, "|") P=False
Fin Si return(P)
Fin Pour
Fin print ("les nombres premiers de
▪ TDO.Globaux l’intervalle [ 100,300 ] sont")
Objet Type/Nature for j in range(100, 301) :
i Entier if Premier(j)==True :
P Booléen print (j, "|", end="")
Résultat d’exécution
2. Définition
La décomposition d’un entier en produit de facteurs premiers consiste à écrire cet entier sous la forme
d’un produit de ces diviseurs premiers.
3. Application
Ecrire un algorithme et son implémentation en Python d’un programme qui permet de chercher puis
d’afficher la décomposition en produit de facteurs premiers d’un entier n donné sachant que (4≤n≤100).
➢ Solution:
En algorithme Implémentation en Python
Algorithme FacteursPremiers from numpy import array
Début Fact =array ([int ( )] * 100)
n=Saisir (n)
RemplirFact (Fact, f, n) def saisir():
Afficher (Fact, f) while (True) :
Fin n = int(input("n="))
▪ TDNT if(4<=n<=100) :
Type break
Tab= tableau de 100 entiers return(n)
▪ TDO.Globaux
Objet Type/Nature def RemplirFact(n) :
n,f Entier i = 2
Fact Tab f = -1
Fonction Saisir( ) : entier while True :
if n % i == 0 :
Début
n = n // i
Répéter
f = f + 1
Ecrire ("n="), Lire (n)
Fact[f] =i
Jusqu’à (5≤n≤20)
else :
retourner (n)
i = i + 1
Fin
if(n==1):
▪ TDO.Locaux break
Objet Type/Nature return(Fact,f)
n entier
Fonction RemplirFact ( n : entier) def Afficher (Fact , f) :
Début for i in range (f):
i2 print (Fact[i], " * ",end="")
f -1 print (Fact[f])
Répéter
Si n Mod i = 0 Alors
n n Div i n=Saisir()
V. Le calcul du factoriel
1. Présentation
Pour calculer la factorielle d’un entier, il suffit de le multiplier par le produit de tous les entiers
naturels non nuls qui le précèdent.
n ! = 1*2*3*…*(n-1)*n
2. Définition
La factorielle d’un entier n donné est le produit de tous les entiers de l’intervalle [1,n]. Le factoriel de
n est noté n !
3. Application
Ecrire un algorithme et son implémentation en Python d’une fonction qui permet de calculer la
factorielle d’un entier n donné.
➢ Solution:
En algorithme Implémentation en Python
Fonction Fact (n : entier) : entier
Début
f 1
Pour i de 1 a n+1Faire
ff*i
Fin Pour
Retourner (f)
Fin
▪ TDO locaux
Objet Type/Nature
i, f Entier
VI. 3 Binaire-octal :
1. Principe :
(1010)2=(….)8
2. Application :
Ecrire une Fonction qui convertit une valeur de la base binaire à la base octale
VI.4 Binaire-hexadécimal :
1. Principe :
(11010)2=(….)16
2. Application :
Ecrire une Fonction qui convertit une valeur de la base binaire à la base hexadécimale
1. Définition
Convertir un entier positif N dans une base b au moins égale à 2 consiste à chercher la représentation
de N dans la base b. En effet, dans un système de numération b, tout entier positif N admet une et une
seule décomposition : N = an*bn + an-1*bn-1 + an-2*bn-2 + … + a1b + a0
Ou les aksont des naturels compris entre 0 et (b-1) inclus. b est appelée base de numération.
2. Applications
a) Application1
Ecrire un algorithme et son implémentation en Python d’un programme qui permet de convertir un
nombre entier positif N en binaire. La conversion se fera de la base de numération 10 (ou base décimale)
a la base 2 (ou base binaire).
➢ Solution:
En algorithme Implémentation en Python
b) Application2
Ecrire un algorithme et son implémentation en Python d’un programme qui permet de convertir un
nombre entier positif N en hexadécimal. La conversion se fera de la base de numération 10 (ou base
décimale) a la base 16 (ou base hexadécimale).
➢ Solution:
En algorithme Implémentation en Python
Algorithme Conversion_10_2 from numpy import array
Début Fact =array ([int ( )] * 100)
Ecrire ("n="), Lire(n)
T, c = Chercher16 (n) def Chercher16(n) :
Afficher16 (T, c) c = -1
Fin while True :
c = c + 1
▪ TDNT T[c] = n %16
Type n = n // 16
Tab= tableau de 100 entiers if (n==0):
break
▪ TDO.Globaux return(T,c)
Objet Type/Nature
N,c Entier
T Tab
def Afficher16 (T , c) :
for i in range (c,-1, -1) :
Fonction Chercher16 (n : entier)
if 0<=T[i]<=9:
Début
print (T[i],end="")
c -1
else:
Répéter print(chr(ord('A')+ T[i]-
cc+1 10),end="")
T[c] n Mod 16
n n div 16 n=int(input("n="))
Jusqu’à (n=0) T,c = Chercher16(n)
Retourner (T, c) Afficher16 (T, c)
Fin
▪ TDO.Locaux
Objet Type/Nature Résultat d’exécution pour n=5625
c Entier
T Tab
▪ TDO.Locaux
Objet Type/Nature
i Entier
Questions :
1) Déterminer le volume de la boîte en fonction de x sachant que : v= surface de base * hauteur
2) Ecrire l’algorithme de la fonction nommée Valeur (pas) permettant de déterminer la valeur de x pour que le
volume v de la boîte soit maximal.
3) écrire le programme en Python qui permet de varier le pas de variation de 10-1 à 10-5 ( en multipliant dans
chaque cas le pas par 10-1 ), déterminer et afficher la valeur de x pour que le volume v de la boîte soit maximal
ainsi que le pas utilisé et la valeur approchée du volume de la boîte Sachant que la valeur exacte de x qui
correspond à un volume maximum est théoriquement égale à 10/6, donc de l’ordre de 1.666666666666666
4) En observant les résultats du programme précédent que constatez-vous ? Constatation : Remarquons que si la
valeur du pas diminue, on s’approche de plus en plus de la valeur exacte de x
Le directeur de lycée veut créer un programme permettant la saisie et le traitement de ces listes sachant
que chaque classe comporte au maximum 40 élèves.
a. Donnez la structure de données nécessaire pour les objets à utiliser.
b. Donnez une déclaration algorithmique de cesobjets.
Solution :
a. On peut utiliser 6 tableaux, un tableau pour chaque colonne(champ).
b. Déclaration algorithmique :
Objet Type/Nature Rôle
Num Tableau de 40 entiers Tableau contenant les numéros des élèves d’une classe
Nom Tableau de 40 chaînes Tableau contenant les noms des élèves d’une classe
Prenom Tableau de 40 chaînes Tableau contenant les prénoms des élèves d’une classe
Genre Tableau de 40 caractères Tableau contenant les genres des élèves d’une classe
Date Tableau de 40 chaînes Tableau contenant les dates de naissance des élèves d’une classe
Moy Tableau de 40 Réels Tableau contenant les moyennes annuelles des élèves d’une classe
Remarque :
Nous remarquons que la solution proposée est trop longue car on ne peut pas ranger des données de types
différents dans un seul tableau.
Nous allons voir une nouvelle structure appelée ENREGISTREMENT (CLASS en Python) qui permet
de réaliser cette tache.
2. Définition:
Un enregistrement est un type de données défini par l'utilisateur et qui permet de grouper un nombre fini
d'éléments (ou champs) de types éventuellement différents.
3. Déclaration :
En algorithme En Python
▪ TDNT
Type
class NomEnregistrement :
NomEnregistrement=Enregistrement
Champ1 = valeur d’initialisation
Champ1 : Type1
----
----
ChampN = valeur d’initialisation
ChampN : TypeN
Fin
▪ TDO
O T/N
NomVariable = NomEnregistrement ( )
NomVariable NomEnregistrement
En algorithme En Python
▪ TDNT
Type
class Fiche :
Fiche = Enregistrement
Num = 0
Num : Entier
Nom = ""
Nom : Chaîne
Prénom = ""
Prénom : Chaîne
Genre = ""
Genre : Caractère
Date = ""
Date : Chaîne
Moy = 0
Moy : Réel
Fin
▪ TDO
O T/N
Eleve = Fiche ( )
Eleve Fiche
5. Activité 2:
Solution :
En algorithme En Python
▪ TDNT
Type
Date = Enregistrement class Date :
jj : 1..31 jj = 1
mm : 1..12 mm = 1
aa :Entier aa = 2020
Fin
▪ TDO
O T/N
Calendrier Date Calendrier = Date ( )
1. Affectation:
En Algorithme En Python
variable.champ valeur variable.champ = valeur
Activité 3 :
On se pose que Eleve est une variable de type Fiche de l’activité 1, affectez respectivement les valeurs
suivantes à cette variable : 15, "Kéfi", "Nour", "F", "27/11/2006" et 13.25
Remarque :
a. Il est possible d'affecter une variable enregistrement dans une autre à condition qu'ils aient la même
structure.
Exemple :
e1, e2 = Fiche ( )
Il est possible d'écrire : e1= e2
Tous les champs de la variable enregistrement à affecter seront recopies dans les champs de l'autre.
b. Un champ a exactement les mêmes propriétés qu'une variable du mêmetype.
c. Le champ d'une variable enregistrement peut être lui-même unenregistrement.
Activité 4 :
Reprenez l'activité 1 et déclarez le champ Date comme étant un enregistrement de l’activité 2.
Solution :
En algorithme En Python
▪ TDNT
Type
Date = Enregistrement class Date :
jj : 1..31 jj = 1
mm : 1..12 mm = 1
aa :Entier aa = 2020
Fin
2. Lecture:
En Algorithme En Python
Lire (variable.champ) variable.champ = input()
Exemple :
En Algorithme En Python
Lire (Eleve.Nom) Eleve.nom = input()
3. Ecriture:
En Algorithme En Python
Ecrire (variable.champ) print (variable.champ)
Exemple :
En Algorithme En Python
Ecrire (Eleve.Nom) print (Eleve.Nom )
Activité 5 :
Soit la structure Fiche constituée par :
Num : Entier
Nom : Chaîne
Prénom : Chaîne
Genre : Caractère
Date : Chaîne
Moy : Réel
Ecrivez les algorithmes des différents modules d'un programme nommé FicheEleve, qui permet la saisie
et l'affichage de l'enregistrement d'un Elève. Puis les implémenter en Python.
Solution :
AlgorithmeFicheEleve
Début
Saisir (Eleve)
Afficher (Eleve)
Fin
✓ TDNT :
Type
FicheEleve = Enregistrement
Num : Entier
Nom : Chaîne
Prénom : Chaîne
Genre : Caractère
Date : Chaîne
Moy : Réel
Fin
✓ TDO :
Objet Type/Nature
Eleve FicheEleve
Saisir Procédure
Afficher Procédure
• Algorithme de la procédureSaisir
• Implimentation en Python:
classFiche :
num =0
nom =""
prenom =""
genre =""
date =""
moy =0
eleve = Fiche
defSaisir (eleve) :
eleve.num = int(input("Entrer le numéro de l’élève: "))
eleve.nom = str(input ("Entrer son nom : "))
eleve.prenom = str(input("Entrer sa prénom : "))
eleve.genre = str(input("Entrer son genre : "))
eleve.date = str(input("Entrer sa date de naissance : "))
eleve.moy = float(input("Entrer sa moyenne : "))
defAfficher (eleve) :
print ("Num :",eleve.num)
print ("Nom :",eleve.nom)
print ("Prénom :",eleve.prenom)
print ("Genre :",eleve.genre)
print ("Date de naissance :",eleve.date)
print ("Moyenne :",eleve.moy)
# Programme Principal
Saisir (eleve)
Afficher (eleve)
4. Vecteur d'enregistrements:
Activité 6 :
Reprenons l'enregistrement Fiche de l'activité 5
Nous voulons utiliser cet enregistrement non pas pour un seul élève, mais pour tous les élèves d'une
classe.
Question : Pouvons-nous déclarer un tableau d'enregistrements ?
Solution :
Un tableau ne peut contenir que des éléments de même type, y compris le type enregistrement. Nous
pouvons donc utiliser un tableau ou un vecteur d'enregistrements.
Activité 7 :
Nous supposons que le nombre d'étudiants dans une classe est égal à N (4 < N < 31).
Question : Proposez une structure de données utilisant un vecteur d'enregistrements pour représenter ces
N étudiants ?
Solution :
En algorithme En Python
Remarque :
• numpy est une bibliothèque destinée à manipuler des matrices ou tableaux
multidimensionnels ainsi que desfonctions
• Pour utiliser la bibliothèque « numpy » on doit l’installer : Dans la console cmd de Windows
tapez la commande « pip install numpy » avec version de python 3.6 ou plus (le pc doit être
connecté àinternet)
Activité 8 :
Une société veut informatiser la gestion de ses employés. Elle détient pour chacun les informations
suivantes :
- Le nom et le prénom (chaîne decaractères)
- Le grade : uniquement G1, G2, G3 ouG4
- Le code fiscal (un entier nonsigné)
- L’assurance maladie (O pour oui et N pournon)
- Le nombre d'employés est N avec 4 ≤ N ≤120.
Questions :
Ecrivez un programme modulaire nommé GESTION, qui permet la saisie de toutes les fiches de
renseignements puis d'afficher :
1. Toutes les fiches (une par une et avec une attente jusqu'à l'appui sur la toucheENTREE).
2. Le nombre d'employés ayant un grade donné et leur pourcentage par rapport au nombre total des
employés.
Implémentez ce programme en Python et l'enregistrez sous le nom GestEmployés.
▪ Les fichiers textes : les informations sont sous un format texte qui est lisible par n’importe quel
éditeur detexte.
▪ Les fichiers de données (ou binaires) : les informations ne sont lisibles que par le programme qui les a
conçus.
Ecrire l’algorithme et son implémentation en Python d’un programme qui permet d’ouvrir le fichier
"Voitures.txt" en lecture et de stoker leur contenu dans une chaine de caractère ch puis d’afficher le
contenu de ce fichier
➢ Solution
En algorithme En Python
#ouverture en lecture
Algorithme voiture f = open("C:\Voitures.txt","r")
Début #lecture
Ouvrir ("C:\Voitures.txt", f, "r") ch = f.read()
Lire (f, ch) #affichage
Ecrire ("** contenu de ch **") print("** contenu de ch **")
Ecrire (ch) print(ch)
Ecrire ("** fin contenu **") print("** fin contenu **")
Fermer ( f ) #fermeture
f.close()
Fin
Résultat d’exécution
▪ TDNT
Type
Fichtext = Fichier texte
▪ TDO
O T/N
f Fichtext
ch Chaine decaractère
➢ Remarque:
▪ open() permet d’ouvrir un fichier, en lecture ici avec l’option « r ». La fonction renvoie un objet
de type fichier stocké dansf
▪ le curseur de fichier est placé sur la premièreligne
▪ read() lit tout le contenu du fichier d’unbloc
▪ close() ferme le fichier (et donc ledéverrouille)
Ecrire l’algorithme et son implémentation en Python d’un programme qui permet d’ouvrir le fichier
"Voitures.txt" en lecture ligne par ligne itérativement et de stoker leur contenu dans une chaine de
caractère ch puis d’afficher le contenu de ce fichier
➢ Solution
En algorithme En Python
#ouverture en lecture
f = open("C:\Voitures.txt","r")
Algorithme voiture #lecture ligne itérativement
Début while True:
Ouvrir ("C:\Voitures.txt", f, "r") ch = f.readline()
Répéter if (ch != ""):
Lire_ligne (f, ch) print(ch)
Ecrire (ch) else:
Jusqu’à (ch="") break;
Fermer ( f ) #fermeture
f.close()
Fin
Résultat d’exécution
▪ TDNT
Type
Fichtext = Fichier texte
▪ TDO
O T/N
f Fichtext
ch Chaine decaractère
➢ Remarque:
En Python
#ouverture en lecture ✓ C’est la forme la plus efficace – et la
f = open("C:\Voitures.txt","r") plus concise – pour une lecture ligne à
#lecture ligne itérativement ligne.
for ch in f:
print(ch)
✓ Le caractère \n est présenttoujours
#fermeture
f.close()
Résultat d’exécution
Ecrire l’algorithme et son implémentation en Python d’un programme qui permet d’ouvrir le fichier
"Voitures.txt" (de l’activité 1) en lecture et de stoker leur contenu dans une liste lst puis d’afficher le
contenu de ce fichier
➢ Solution
En algorithme En Python
Algorithme voiture #ouverture en lecture
Début f = open("C:\Voitures.txt","r")
Ouvrir ("C:\Voitures.txt", f, "r") #lecture
Lire_Lignes (f, lst) lst = f.readlines()
#affichage
Ecrire ("** contenu de lst **")
print("** contenu de lst **")
Ecrire (lst) print(lst)
Ecrire ("** fin contenu **") print("** fin contenu **")
Fermer ( f ) #fermeture
Fin f.close()
▪ TDNT
Type Résultat d’exécution
Fichtext = Fichier texte
▪ TDO
O T/N
f Fichtext
lst Liste de chaine de caractère
➢ Remarque:
▪ Le contenu du fichier est stocké dans une liste, une ligne = unélément.
▪ Le caractère \n est maintenu. Il n’est pas présent sur la dernière ligne de notre fichierexemple.
Ecrire l’algorithme et son implémentation en Python d’un programme qui permet d’ouvrir le fichier
"moto.txt" en écriture et d’écrire les trois noms suivants ("honda", "yamaha", "ducati") chacun dans
une ligne dans le fichier créer précédemment
➢ Solution1
En algorithme En Python
Algorithme moto #ouverture en écriture
Début f = open("C:\moto.txt","w")
Ouvrir ("C:\moto.txt", f, "w") #écriture
Ecrire (f, "honda") f.write("honda")
f.write("yamaha")
Ecrire (f, "yamaha")
f.write("ducati")
Ecrire (f, "ducati")
#fermeture
Fermer ( f ) f.close()
Fin
Résultat d’exécution
▪ TDNT
Type
Fichtext = Fichier texte
▪ TDO
O T/N
f Fichtext
➢ Remarque:
▪ open() permet d’ouvrir un fichier en écriture avec l’option « w ». La fonction renvoie un objet de
type fichier référencée parf
▪ Avec « w », le fichier est écrasé s’il existedéjà
▪ write() permet d’écrire la chaîne decaractères
▪ Dans le résultat d’exécution, il manque les sauts de ligne pour distinguer chaque moto pour ce la il
faut que nous insérons le caractère saut de ligne « \n » après chaque moto, sauf la dernière comme
la suivante:
➢ Solution2
En algorithme En Python
Algorithme moto #ouverture en écriture
Début f = open("D:\moto.txt","w")
Ouvrir ("D:\moto.txt", f, "w") #écriture
EcrireNL (f, "honda") f.write("honda\n")
f.write("yamaha\n")
EcrireNL (f, "yamaha")
f.write("ducati")
Ecrire (f, "ducati") #fermeture
Fermer ( f ) f.close()
Fin
Résultat d’exécution
▪ TDNT
Type
Fichtext = Fichier texte
▪ TDO
O T/N
f Fichtext
Ecrire l’algorithme et son implémentation en Python d’un programme qui permet d’ouvrir le fichier
"moto.txt" en écriture et d’écrire le contenu de la liste lst dans le cet fichier sachant que lst=
["honda\n","yamaha\n","ducati"]
➢ Solution
En algorithme En Python
Algorithme moto #ouverture en écriture
Début f = open("D:\moto.txt","w")
Ouvrir ("D:\moto.txt", f, "w") #liste
lst←["honda\n","yamaha\n"," lst=["honda\n","yamaha\n","ducati"]
ducati"] #écriture
Ecrire_lignes (f, lst) f.writelines(lst)
Fermer ( f ) #fermeture
f.close()
Fin
Résultat d’exécution
▪ TDNT
Type
Fichtext = Fichier texte
▪ TDO
O T/N
f Fichtext
lst Liste de chaine de caractère
➢ Remarque:
▪ writelines() permet d’écrire directement le contenu d’une liste. Nous devons quand même insérer
le caractère « \n » pour que le saut de ligne soit effectif dans lefichier.
➢ Solution
En algorithme En Python
#ouverture en ajout
Algorithme moto f = open("D:\moto.txt","a")
Début #ajouter un saut de ligne
Ouvrir ("D:\moto.txt", f, "a") f.write("\n")
Ecrire (f, "\n") #écriture
Ecrire (f, "laverda") f.write("laverda")
Fermer ( f ) #fermeture
f.c lose()
Fin
Résultat d’exécution
▪ TDNT
Type
Fichtext = Fichier texte
▪ TDO
O T/N
f Fichtext
➢ Remarque:
▪ open() avec l’option « a » permet d’ouvrir un fichier en modeajout
▪ write() permet d’écrire la chaîne decaractères
▪ Attention toujours au saut de ligne « \n»
▪ Une ouverture en mode lecture / écriture est possible avec l’option « r+ » mais se positionner sur
telle ou telle ligne pour y modifier ou insérer des informations estcompliqué.
1. Déclaration:
Déclaration en algorithme
▪ TDNT
Type
NomFichier = Fichier de Type _élément
▪ TDO
O T/N
NomLogique NomFichier
2. Activité 1:
Nous voulons saisir et enregistrer les notes des élèves d'une classe dans un fichier de réels.
Question : Déclarez en algorithmique la structure de fichier adéquate.
➢ Solution:
Déclaration en algorithme
▪ TDNT
Type
NotesElève = Fichier de réels
▪ TDO
O T/N
Notes NotesElève
3. Activité 2:
Au lieu de sauvegarder seulement les notes des élèves, nous proposons d'enregistrer dans un fichier
appelé CARNET, la fiche de renseignements et les notes de chaque élève.
Une fiche de renseignements comporte les informations suivantes :
- Nom etprénom,
- Genre (F ouG),
- Date denaissance,
- Les notes sont : Note1, Note2 etNote3.
➢ Solution:
Déclaration en algorithme
▪ TDNT
Type
FicheElève = enregistrement
NomPrenom : Chaîne de caractère
Genre : Caractère
DateNaissance : Chaîne
Note1, Note2, Note3 : Réel
Fin FicheElève
CarnetElèves
➢ Remarque:
▪ Comme on a déjà dit un fichier doit être enregistré sur un support externe, donc ce fichier doit
avoir un nom et de préférence une extension. Ce nom est appelé le nom externe (ou le nom
physique)
▪ Le nom de l’objet déclaré dans le tableau des objets comme nom de fichier est le nom interne du
fichier (ou aussi le nom logique). C’est le nom utilisé dans les instructions duprogramme.
▪ Les fichiers de données (data) ont une extension .dat, .fch, …
5. Activité 3:
Un produit est caractérisé par un code, une désignation et son prix unitaire.
Ecrire l’algorithme et son implémentation en Python d’un programme permettant de saisir les
informations de n produits dans un fichier nommé FicheProd.dat
➢ Solution:
En Algorithme En Python
Algorithme Produit from pickle import *
class prod:
Début code=""
designation=""
prix_unitaire=0
Ouvrir ("D:\FicheProd.dat", f, wb ) p=prod()
{Ouvrir le fichier en mode écriture}
f = open("D:\FicheProd.dat ","wb")
Ecrire("Taper le nombre de produit"), n=int(input("Taper le nombre de produit
lire(n) "))
for i in range(n) :
Pour i de 0 à n-1 faire
p.code=str(input("saisir le code"))
Ecrire("saisir le code"), lire(p.code) p.designation=str(input("saisir la
désignation") )
p.prix_unitaire=float(input("saisir
Ecrire("saisir la désignation") , le prix unitaire "))
lire(p.designation)
dump(p,f)
Fin Pour
Fermer ( f )
Fin