Exercices BAC 2022 2023
Exercices BAC 2022 2023
Exercices BAC 2022 2023
Projet 1:
Un jeu de devinette consiste à générer un nombre
x(Aléatoire entre 1 et 100) puis essayer de le deviner .
(Ajouter perdu, si le nombre n’est pas trouvé dans 10 essais)
Aléa Permet de générer un entier au hasard. Pour affecter une valeur à une variable, on utilise le
Point d'information
Point d'information
Point d'information
Objectif 3 : On veut afficher un message suivant la valeur entrée : « Bravo » si la réponse est
juste et « plus grand » ou « plus petit » sinon .
Algorithme
Structure conditionnelle si
Algorithme multiplication from random import *
Algorithme Python
Début x=randint(1,100)
xAléa(1,100) y=int(input('Donner un entier Si condition alors if condition :
Ecrire("Donner un entier (entre 1-100) = ')) Traitement1 traitement1
Point d'information
entre 1 et 100:") if y==x : Sinon Traitement 2 else :
Lire(y) print('Bravo') FinSi traitement2
Si x=y alors elif y>x: • En Python on doit utiliser la tabulation pour
Ecrire("Bravo") print('plus petit !') exprimer un bloc d’instructions
Sinon si y>x alors else: • Pour rester sur la même ligne et empêcher un
Ecrire("Plus petit") print('Plus grand :') retour à la ligne suivante avec print, on pourra
Sinon utiliser l’instruction suivante : print('___',end=' ')
Ecrire("Plus grand")
Fin
Point d'information
Répéter valide=False
Algorithme Python while valide==False:
Traitement
Pour i de 0 à n-1 faire for i in range(n) : Jusqu'à condition(s) Traitement
Traitement Traitement valide=(cond(s))
FinPour La boucle Tant que faire
• En Python on doit utiliser la tabulation pour Algorithme Python
exprimer un bloc d’instructions Tant que Cond(s) Faire while condition :
Traitement Traitement
• range(4) donne 0 1 2 3 range(1,4) donne 1 2 3
Fin Tantque
On va avoir la solution suivante :
Algorithme
Algorithme nombre from random import *
Début x=randint(1,100)
XAléa(1,100) valide=False
Répéter while valide==False:
Ecrire("Donner un entire entre 1 et 100:"),Lire(y) y=int(input('Donner un entier (entre 1-100) = '))
Si x=y alors Ecrire("Bravo") if y==x :
Sinon si y>x alors Ecrire("Plus petit") print('Bravo')
Sinon Ecrire("Plus grand") elif y>x:
Finsi print('plus petit !')
Jusqu’à (x=y) else:
Fin print('Plus grand :')
valide= (x==y)
On pourra aussi implémenter l’algorithme en utilisant While :
Objectif 5 : Ajouter le nombre d’essai nb, et le jeu se termine si le joueur trouve le nombre
caché et un message « Bravo » est affiché ou si le joueur fait 10 essais sans trouver
le nombre et un message « Perdu ! » et affiché, ainsi que le nombre à trouver.
Exercice 2:
Soit l’algorithme permettant de compter le nombre des Ajouter le cas de consonnes :
voyelles dans une chaine CH. Algorithme Lettres2
Début
Algorithme Lettres Ecrire("Donner ch="),lire(ch)
Début Nb0
Ecrire("Donner ch="),lire(ch) nbc0
Nb0 Pour i de 0 à long(ch)-1 faire
Pour i de 0 à long(ch)-1 faire Si Majus(ch[i]) ∈ {"A","E","I","O","U","Y"} alors nbnb+1
Si Majus(ch[i]) ∈ {"A","E","I","O","U","Y"} alors Sinon si Majus(ch[i])∈["A".."Z"] alors nbcnbc+1
nbnb+1 Finsi
Finsi FinPour
FinPour Ecrire('Le nombre de voyelles=',nb)
Ecrire('Le nombre de voyelles=',nb) Ecrire('Le nombre de consonnes=',nbc)
Fin Fin Déclaration des objets
Déclaration des objets Objets Types/Nature
Objets Types/Nature Ch chaîne
Ch chaîne i, nb,nbc entier
i, nb entier en Python:
ch=input('Donner ch=')
Donner une implimentation en Python: nb=0
ch=input('Donner ch=') nbc=0
nb=0 for i in range(len(ch)):
for i in range(len(ch)): if ch[i].upper() in {'A','E','I','O','U','Y'}:
if ch[i].upper() in {'A','E','I','O','U','Y'}: nb=nb+1
nb=nb+1 elif "A"<=ch[i].upper()<="Z":
nbc=nbc+1
print('Le nombre de voyelles=',nb) print('Le nombre de voyelles=',nb)
print('Le nombre de consonnes=',nbc)
Projet 3:
On veut faire la moyenne des notes d’une classe.
Exemple d’exécution :
Nbre d’élèves=3
Note 1=10.5
Note 2=13.2
Note 3=18
La moyenne de la classe=13.91
Objectif 1 : Saisir le nombre d’élèves, puis la note de chaque élève, enfin afficher la moyenne de la classe.
1ère solution :
Algorithme
Algorithme Moyenne
Début
Ecrire("Nbre d’élèves="), Lire(n) Déclaration des objets
S0 Objets Types/Nature
Pour i de 0 à n-1 faire i,n Entier
Ecrire("Note ",i+1,"="), Lire(x) x,S, moy réel
SS+x
Finpour
MoyS/n
Ecrire("moy classe=",Moy)
Fin
Objectif 3 : Ajouter un contrôle de saisie sur les notes pour être entre 0 et 20 et sur le nombre des élèves
pour être entre 2 et 25.
Implémentations en python
Méthode 1 Méthode 2
from numpy import * from numpy import *
T1=array([float()]*25) T1=array([float()]*25)
T1 = array ([str( )] * N)
Déclarer un tableau de chaînes de caractère :
Déclaration
T2 = array ([str] * N)
Algorithme
Algorithme du programme principal : from numpy import *
Algorithme Classe: T1=array([float()]*25)
DEBUT T2=array([str]*25)
Saisir(n) def saisir():
Remplir(T1,T2 n) valide=False
Moymoyenne(T1,n) while valide==False :
n=int(input('Nombres élèves='))
Mmaximum(T1,n) valide=(2<=n<=25)
Ecrire("moy classe=",Moy, "Meilleure note=",M) return n
FIN
Nouveaux Types def remplir(T,T2,n):
TAB= tableau de 25 réels for i in range(n):
TAB2=Tableau de 25 chaînes print("Nom:", i+1, '=', end=' ')
T.D.O.globaux T2[i]=input()
Objet Type/Nature valide=False
while valide==False :
n Entier
print("Note", i+1, '=', end=' ')
moy, M réel
T[i]=float(input())
T1 TAB
valide=(0<=T[i]<=20)
T2 TAB2
Saisir, remplir Procédures def moyenne(T,n):
Moyenne,maximum fonctions s=0
for i in range(n):
s=s+T[i]
Algorithme de la procédure remplir : moy=s/n
Procédure Remplir(@T:tab,@T2:tab2,n :entier) return moy
Début
Pour i de 0 à n-1 faire def maximum(T,n):
Ecrire("Nom ",i+1,"="), Lire(T2[i]) X=T[0]
Répéter for i in range(1,n) :
Ecrire("Note ",i+1,"="), Lire(T[i]) if T[i]>X :
Jusqu’à 0<=T[i]<=20 X=T[i]
Finpour return X
Fin
T.D.O.Locaux #programme principal
Objets Types/Nature n=saisir()
remplir(T1,T2,n)
i Entier
moy=moyenne(T1,n)
M=maximum(T1,n)
print('moy de la classe=',moy,'\nMeilleure
note=',M)
Algorithme
Algorithme du programme principal : from numpy import *
Algorithme Classe: T1=array([float()]*25)
DEBUT T2=array([str]*25)
Saisir(n) def saisir():
Remplir(T1,T2, n) valide=False
Moymoyenne(T1,n) while valide==False :
n=int(input('Nombres élèves='))
Mmaximum(T1,n) valide=(2<=n<=25)
Afficher(T1,T2,n) return n
Ecrire("moy classe=",Moy, "Meilleure note=",M)
FIN def remplir(T,T2,n):
Nouveaux Types for i in range(n):
TAB= tableau de 25 réels print("Nom:", i+1, '=', end=' ')
TAB2=Tableau de 25 chaînes T2[i]=input()
valide=False
T.D.O.globaux
while valide==False :
Objet Type/Nature
n Entier print("Note", i+1, '=', end=' ')
moy, M réel T[i]=float(input())
T1 TAB valide=(0<=T[i]<=20)
T2 TAB2
Saisir, remplir, afficher Procédures def moyenne(T,n):
Moyenne,maximum fonctions s=0
for i in range(n):
s=s+T[i]
Algorithme de la procédure Afficher : moy=s/n
Procédure Afficher(T1:tab,T2:tab2,n :entier) return moy
Début
Pour i de 0 à n-1 faire def maximum(T,n):
Ecrire(T2[i] , " : ", T1[i] ) X=T[0]
Finpour for i in range(1,n) :
Fin if T[i]>X :
T.D.O.Locaux X=T[i]
Objets Types/Nature return X
i Entier def afficher(T1,T2,n):
for i in range(n):
print(T2[i], ' : ', T1[i])
#programme principal
n=saisir()
remplir(T1,T2,n)
moy=moyenne(T1,n)
M=maximum(T1,n)
afficher(T1,T2,n)
print('moy de la classe=',moy,'\nMeilleure
note=',M)
Objectif 7 : Ajouter un contrôle de saisie sur les noms des élèves pour être composés par des lettres et des
espaces seulement.
Algorithme
Algorithme du programme principal : from numpy import *
Algorithme Classe: T1=array([float()]*25)
DEBUT T2=array([str]*25)
Saisir(n) def saisir():
Remplir(T1,T2, n) valide=False
Moymoyenne(T1,n) while valide==False :
Mmaximum(T1,n) n=int(input('Nombres élèves='))
valide=(2<=n<=25)
Afficher(T1,T2,n)
return n
Ecrire("moy classe=",Moy, "Meilleure note=",M) def verif(ch):
FIN ok=True
Nouveaux Types i=-1
TAB= tableau de 25 réels while (ok==True) and (i<len(ch)-1):
TAB2=Tableau de 25 chaînes i=i+1
T.D.O.globaux if not(('A'<=ch[i].upper()<='Z') or (ch[i]==' ')):
Objet Type/Nature ok=False
n Entier return ok
moy, M réel def remplir(T,T2,n):
T1 TAB for i in range(n):
T2 TAB2 valide=False
Saisir, remplir Procédures while valide==False:
Moyenne,maximum fonctions print("Nom:", i+1, '=', end=' ')
Algorithme de la fonction verif: T2[i]=input()
Fonction verif(ch:chaine):booléen valide=verif(T2[i])
Début
i← -1, ok←vrai valide=False
Répéter while valide==False :
i←i+1 print("Note", i+1, '=', end=' ')
si NON(Majus(ch[i]) ["A".."Z"] ou ch[i]=" ") T[i]=float(input())
alors ok ←Faux valide=(0<=T[i]<=20)
Finsi def moyenne(T,n):
Jusqu'a (i=long(ch)-1) ou (ok=faux) s=0
Retourner ok for i in range(n):
Fin T.D.O.Locaux s=s+T[i]
Objet T/N moy=s/n
I Entier return moy
ok booléen def maximum(T,n):
Algorithme de la procédure remplir : X=T[0]
Procédure Remplir(@T:tab,@T2:tab2,n :entier) for i in range(1,n) :
Début if T[i]>X :
Pour i de 0 à n-1 faire X=T[i]
Répéter return X
Ecrire("Nom ",i+1,"="), Lire(T2[i]) def afficher(T1,T2,n):
Jusqu’à vérif(T2[i])=vrai for i in range(n):
Répéter print(T2[i], ' : ', T1[i])
Ecrire("Note ",i+1,"="), Lire(T[i]) #programme principal
Jusqu’à 0<=T[i]<=20 n=saisir()
Finpour remplir(T1,T2,n)
Fin T.D.O.Locaux moy=moyenne(T1,n)
Objets Types/Nature M=maximum(T1,n)
i Entier afficher(T1,T2,n)
verif fonction print('moy de la classe=',moy,'\nMeilleure note=',M)
FinPour echange=False
Fin for i in range(n-1):
T.D.O.Locaux if ( ch[i] > ch[i+1]):
echange=True
Objet T/N
ch=ch[:i]+ch[i+1]+ch[i]+ch[i+2:]
I Entier
n=n-1
return ch
Remarque : Pour convertir la chaine résultat ch2 en un entier, on peut utiliser la fonction Valeur(ch2) en Python int(ch2)
Exercice 9: (Vaccination): On se propose de réaliser un programme, permettant de s’inscrire dans la campagne de vaccination
contre le covid-19. Le script permet de saisir un numéro d’identification, puis le stocker dans un tableau ID.
● Si le numéro n’existe pas, il sera ajouté au tableau,
● Si le numéro existe déjà, le numéro ne sera pas ajouté et on demande un autre numéro.
0 1 2 3
ID 09990999 08888888 07777777 09898888
Exemple d’exécution:
Donner le nombre de personnes = 4 Donner ID n°2: 08888888
Donner ID n°0: 09990999 Donner ID n°2: 07777777
Donner ID n°1: 08888888 Donner ID n°3: 09898888
Travail à faire: Ecrire un algorithme puis un script Python permettant de saisir le nombre de personne n puis leurs n° ID (sous
forme de chaîne de caractères) à inscrire dans un tableau ID.
Algorithme Vaccination: Nouveaux Types from numpy import *
DEBUT TAB= tableau de n chaînes
Saisir(n) def saisir():
T.D.O.Globaux global n
Remplir(ID, n)
Objet Type/nature n=int(input('Donner le nbre de personnes='))
FIN
n Entier
ID Tab def chercher(x,T,n):
Saisir procédure trouve=False
remplir procédure i=-1
Algorithme de la procédure saisir : while (trouve==False) and (i!=n):
Procédure saisir(@n :entier) i=i+1
Début if T[i]==x:
Ecrire("Donner le nombre de personnes") trouve=True
Lire(n) return trouve
Fin
Algorithme de la procédure remplir : def remplir(T,n):
Procédure remplir(@T :TAB, n :entier) print('Donner ID n°0 :')
Début T[0]=input()
Ecrire("Donner ID n° 0") for i in range(1,n):
Lire(T[0]) valide=False
Pour i de 1 à n-1 faire while valide==False:
Répéter print('Donner ID n°',i,':')
Ecrire("Donner ID n°",i), Lire(T[i]) T[i]=input()
Jusqu’à chercher(T[i], T, i-1)=faux valide=chercher(T[i],T,i-1)==False
Finpour
Fin #Programme principal
T.D.O.Locaux saisir()
Objet Type/Nature T=array(n*[str])
i Entier remplir(T,n)
chercher fonction
Algorithme de la fonction Chercher : n
PP
Fonction chercher(x : chaîne , T :Tab, n :entier) :booléen n
Début
TrouveFaux saisir T remplir
i-1
Répéter trouve x,T,n
ii+1
Si T[i]=x alors trouvevrai FinSi
chercher
Prof:N.DHIFALLAH Page 15 / 22 Année scolaire 2021-2022
Année 2022-2023-Bac Maths, Sciences et Techniques version 8 novembre 2022 Matière : Informatique
Jusqu’à (trouve=vrai) ou (i=n)
Retourner trouve
Fin N.B. : En python, les paramètres de type tableau sont, par
T.D.O.Locaux défaut passés par référence
Objet Type/Nature • Toute variable déclarée au sein d’un module a une portée
i Entier locale.
trouve booléen • Toute variable déclarée au sein d’un module précédée par
le mot clé global a une portée globale. Par conséquent, elle
ne devra pas figurer parmi les paramètres de ce module.
▶Ajouter un contrôle de saisie sur les identificateurs pour être composés de 8 chiffres exactement:
Procédure remplir(@T :TAB, n :entier) def remplir(T,n):
Début ok=False
Répéter while ok==False:
Ecrire("Donner ID n°0:"), lire(T[0]) print('Donner ID n° 0:')
Jusqu’a long(T[0])=8 et EstNum(T[0]) T[0]=input()
ok=len(T[0])==8 and T[0].isdecimal()
Pour i de 1 à n-1 faire for i in range(1,n):
Répéter ok=False
Ecrire("Donner ID n°",i,":"), lire(T[i])
while ok==False:
Jusqu’à (long(T[i])=8) et EstNum(T[i])
print('DonnerID n°',i,':')
et chercher(T[i],T,i-1)=faux
T[i]=input()
FinPour
ok= len(T[i])==8 and T[i].isdecimal() and chercher(T[i],T,i-1)==False
Fin
Algorithme
Algorithme du programme principal : from numpy import *
Algorithme Décomposition: Paramètre effectif T=array([int()]*10)
DEBUT def afficher_fact(T,j):
for i in range(j):
Saisir(n) print(T[i],'x',end=' ')
Remplir_fact(T, i , n) Appel d’une
procédure print(T[j])
Afficher_fact(T,i) def remplir_fact(T,x):
FIN global j
Nouveaux Types i=2
TAB= tableau de 10 entiers j=-1
while x!=1:
T.D.O.globaux
if x % i==0:
Objet Type/Nature j=j+1
i,n Entier T[j]=i
T TAB x=x//i
Saisir, remplir_fact,afficher_fact Procédures else:
Algorithme de la procédure saisir : i=i+1
Procédure saisir(@n :entier) def saisir():
valide=False
DEBUT
while valide==False:
Répéter n=int(input('n à décomposer ?='))
Ecrire("Donner un entier (entre 10 et 1000)=") valide= 10<=n<=1000
lire(n) return n
Jusqu’à n>=10 et n<=1000 #programme principal
FIN n=saisir()
Algorithme de la procédure rempli_fact : remplir_fact(T,n)
afficher_fact(T,j)
Procédure Remplir_fact(@T:tab, @ j:entier , x:entier)
DEBUT Passage
Autre méthode :
i2 j-1 par variable from numpy import *
Tantque x≠1 faire T=array([int()]*10)
Paramètre
si x mod i = 0 alors def afficher_fact(T,j):
formel for i in range(j):
jj+1
T[j]i print(T[i],'x',end=' ')
print(T[j])
xx div i def remplir_fact(T,x):
sinon i i+1 i=2
Finsi j=-1
FinTantque while x!=1:
Fin. if x % i==0:
j=j+1
T.D.O.Locaux
T[j]=i
Objets Types/Nature x=x//i
i Entier else:
i=i+1
Algorithme de la procédure Afficher_fact :
return j
Procédure afficher_fact(T :tab,j :entier) def saisir():
DEBUT valide=False
Pour i de 0 à j-1 faire while valide==False:
Ecrire(T[i], "x") Passage n=int(input('n à décomposer ?='))
Finpour par valeur valide= 10<=n<=1000
Ecrire(T[j]) return n
FIN
T.D.O.Locaux #programme principal
Objets Types/Nature n=saisir()
j=remplir_fact(T,n)
i Entier afficher_fact(T,j)
Exercice14:
Écrire un programme qui permet de saisir deux entiers n et p (tq 1≤p≤n) et de calculer puis afficher le nombre de combinaison
de p éléments parmi n : CNP, sachant que:
PP
n,p n,p
Algorithme combinaison: T.D.O.Globaux Calculer
cnp
DEBUT Objet Type/nature
Saisir(n,p) n,p,cnp Entier saisir
f x
cnpcalculer(n,p) Saisir procédure
Ecrire("La CNP=",cnp) calculer fonction
Fact
FIN
Algorithme de la procédure saisir : Algorithme de la fonction calculer : Une implémentation en python:
Procédure saisir(@n ,@p :entier) Fonction calculer(n,p :entier) :entier def saisir():
Début Début n=int(input('n='))
Ecrire("n="), Lire(n) cfact(n) div (fact(p)*fact(n-p)) ok=False
Répéter Retourner c while ok==False:
Ecrire("p="), Lire(p) Fin p=int(input('p='))
Jusqu’a p ∈[1..n] T.D.O.Locaux ok=1<=p<=n
Fin Objet Type/Nature return n,p
c Entier def fact(x):
fact fonction f=1
Algorithme de la fonction fact: for i in range(2,x+1):
Fonction fact(x :entier) :entier f=f*i
Début T.D.O.Locaux return f
f1 Objet Type/Nature def calculer(n,p):
pour i de 2 à x faire i,f Entier c=fact(n)//(fact(p)*fact(n-p))
ff*i return c
finpour #programme principal
retourner f n,p=saisir()
Fin cnp=calculer(n,p)
print('cnp=',cnp)
Exercice 15: La propagation de l’épidémie Covid-19 suit une croissance exponentielle. Pour déterminer et afficher le nombre
total de personnes contaminées pendant un nombre de jours donné (N) et pour x personnes initialement contaminées on
utilise la formule suivante :
Objectif 8 : Ajouter un contrôle de saisie sur les noms des élèves pour être distincts .
Feltana : 20
Foulena : 13.25
Felten : 15
Foulen : 10.5