You are on page 1of 6

Épreuve pratique d’informatique

Sections :
Mathématiques, Sciences expérimentales et
Sciences techniques
Prof : Lotfi Sahli Durée : 1 heure Coefficient : 0.5

Important : Dans le répertoire Bac2022, créez un dossier de travail ayant comme nom votre numéro
d’inscription (6 chiffres) et dans lequel vous devez enregistrer, au fur et à mesure, tous les fichiers solutions de
ce sujet.
Dans le cadre d’une campagne publicitaire, une société commerciale a décidé d’organiser chaque semaine un jeu de
chance pour ses clients.
Le principe du jeu consiste à calculer le nombre de chance à partir du numéro de téléphone du client donné et d’afficher le
message "Félicitations, vous avez gagné." dans le cas où ce nombre est premier ou le message "Désolé, vous n’avez pas
gagné." dans le cas contraire.
Sachant que :
 Le numéro de téléphone devrait commencer par 2, 4, 5 ou 9.
 Le nombre de chance est la somme de chaque chiffre du numéro de téléphone multiplié par son indice avec
l’indice du premier chiffre est 0.
 Un nombre premier est un nombre qui est divisible par 1 et par lui-même.
Exemple :
Donner le numéro : 29234560
Le programme affiche : Désolé, vous n’avez pas gagné.
En effet, le nombre de chance est égal à 99 qui n’est pas un nombre premier.
99 = 2 * 0 + 9 * 1 + 2 * 2 + 3 * 3 + 4 * 4 + 5 * 5 + 6 * 6 + 0 * 7 c’est la somme de chaque chiffre du
numéro de téléphone multiplié par son indice :

Numéro téléphone 2 9 2 3 4 5 6 0
Indice 0 1 2 3 4 5 6 7
Ci-après, un algorithme de la fonction "Chance" à exploiter pour résoudre le problème posé.
Fonction Chance (Ch : Chaine) : Chaine
DEBUT
Si NON ( Estnum ( Ch ) ET long ( Ch ) = 8 ET Ch[0]
∈ ["2","4","5","9"] ) Alors
msg  "Vérifier le numéro de téléphone !"
Sinon
msg  "Désolé, vous n’avez pas gagné."
s0
Pour i de 0 à long ( Ch ) - 1 Faire
s s + valeur ( Ch [i] ) * i
Fin Pour Annexe
Si premier (s) Alors from PyQt5.uic import loadUi
msg  "Félicitation, vous avez gagné." from PyQt5.QtWidgets import QApplication
FinSi ……
FinSi ……
Retourner msg
app = QApplication([])
FIN
windows = loadUi ("Nom_Interface.ui")
windows.show()
windows.Nom_Bouton.clicked.connect Nom_Module)
app.exec_()

1
La société a décidé de créer l’interface graphique présentée ci-dessus, comportant les éléments suivants :
 Un label contenant le nom de la société.
 Un label demandant la saisie du numéro de téléphone.
 Une zone de saisie permettant la saisie du numéro de téléphone.
 Un bouton nommé "Jouer".
 Un label pour afficher un message.
Travail demandé :
1) Concevoir une interface graphique comme illustré ci-dessus et l’enregistrer, dans votre dossier de travail, sous le nom
"Interface_Jeu".
2) Implémenter en Python la fonction "Chance" dans un programme et l’enregistrer sous le nom "Jeu0", dans votre dossier
de travail.
3) Développer la fonction "Premier" permettant de vérifier si un nombre, passé comme paramètre, est premier ou non
puis l’enregistrer dans votre dossier de travail sous le nom "Jeu1".
4) Dans le programme "Jeu1", ajouter les instructions permettant :
 D’appeler l’interface graphique intitulée "Interface_Jeu" en exploitant l’annexe ci-dessous.
 D’implémenter un module "Play", qui s’exécute à la suite d’un clic sur le bouton "Jouer", permettant de récupérer
le numéro de téléphone saisi puis d’exploiter la fonction "Chance" afin d’afficher le message retourné via un label
de l’interface "Interface_Jeu".

Correction ;
from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QApplication
def premier(N):
nb=0
for i in range(1,N+1):
if(N%i==0):
nb=nb+1
return nb==2
def chance(CH):
if(not((CH.isdecimal()==True)and(len(CH)==8)and Exemples d’exécution :
(CH[0]in["2","4","5","9"]))):

2
msg="verifier votre numéro"
else:
msg="Désolé, vous n’avez pas gagné."
s=0
for i in range(0,len(CH)):
s=s+int(CH[i])*i
if(premier(s)==True):
msg="Félicitation, vous avez gagné."
return msg
def play():
CH=f.ch.text()
Resultat= chance(CH)
f.label_res.setText(Resultat)
app=QApplication([])
f=loadUi("Interface_jeu.ui")
f.show()
f.Jouer.clicked.connect(play)
app.exec_()

Problème 2 : Travail demandé : Important : Utiliser le même Annexe ,précédant


1) Concevoir une interface graphique comme illustré ci-dessous et l’enregistrer, dans votre dossier de travail, sous le nom
"conversion_bin".
2) Implémenter en Python la fonction "conv_2" dans un programme et l’enregistrer sous le nom "conv0", dans votre dossier
de travail.
3) Dans un fichier python nommé "conv1", ajouter les instructions permettant :
 D’appeler l’interface graphique intitulée " conversion_bin " en exploitant l’annexe ci-dessous.
 D’implémenter un module "conversion", qui s’exécute à la suite d’un clic sur le bouton "convertir", permettant de
récupérer la valeur saisi en décimal puis d’exploiter la fonction " conv_2 " afin d’afficher le résultat conversion de
décimal vers binaire via une zone de texte de l’interface " conversion_bin ".

3
Fonction conv_2 (N :entier) :chaine Fonction conv_16(N :entier) :chaine
Debut Debut hexa" "
Bin" " Tantque ( N>0) alors
Tantque ( N>0) alors R N mod 16
Binconvch( N mod 2) + Bin Si( R>=10)alors
NN div 2 hexachr( R+55) + hexa
finTantque sinon
retourner Bin hexa convch( R) + hexa
fin finsi
NN div 16
faire le même exercice pour conv_16 finTantque
retourner hexa
fin
Problème 3 :
Important : Utiliser le même Annexe ,précédant

Fonction Amis (ch1, ch2 : chaine) : chaine


Debut
okvrai , i-1 , msg""
si(non(alpha(ch1) et alpha(ch2)) alors
msg" saisi non valide "
sinon
repéter
ii+1
si( pos( ch1[i],ch2)=-1) alors
okfaux
jusqu’à (ok=faux) ou (i= long(ch1)-1)
si( ok=vrai) alors
msgch1+" et "+ch2+ " sont amis "
sinon
msgch1+" et "+ch2+ " non amis "
finsi
retourner msg
fin
def verification() :
……………………………..
…………………………. …………….
……………………….. w……………………clicked.connect(………………….)
…………………………….
………………

Travail demandé :
1) Concevoir une interface graphique comme illustré ci-dessus et l’enregistrer, dans votre dossier de travail, sous le nom "mot_amis".
2) Implémenter en Python la fonction "Amis" dans un programme et l’enregistrer sous le nom "amie0", dans votre dossier de
travail.
3) Dans un fichier python nommé "amie1", ajouter les instructions permettant :
 D’appeler l’interface graphique intitulée " mot_amis " en exploitant l’annexe ci-dessous.
 D’implémenter un module "verification", qui s’exécute à la suite d’un clic sur le bouton "Tester", permettant de
récupérer les deux chaines saisis alphabetiques puis d’exploiter la fonction " Amis " afin d’afficher le résultat via un
Label e de l’interface " mot_amis ".
Problèmes corrigées :
Exemple 4 corrigé from PyQt5.uic import loadUi def traiter2 ():
from PyQt5.QtWidgets import a=int (f.n1. text ())
QApplication b=int (f.n2. text ())
def puissance (x,n): rs=factoriel(a)/factoriel(b)*factoriel(a-b)
p=1 f.l2.setText ("la combinaison de "+str(a)
for i in range (1,n+1): +"et"+str(b)+"="+str(rs))
p=p*x
return p def Effacer():
def factoriel (n): f.n1. setText ("")
f=1 f.n2. setText ("")
for i in range (1,n+1):
4
f=f*i
return f app =QApplication ([ ])
def traiter1 (): f = loadUi("mathématique.ui")
a=int (f.n1. text ()) f . show ()
b=int (f.n2. text ()) f.puissance.clicked . connect(traiter1)
rs=puissance (a,b) f.combinaison.clicked . connect(traiter2)
f.l1.setText ("la puissance de f.effacer.clicked . connect(Effacer)
"+str(a)+"et"+str(b)+"="+str(rs)) app.exec_()

Exemple 5 corrigé from PyQt5 import QtWidgets , uic elif ch==cap :


from random import randint message="bravo captcha correct"
def charger() : else :
rs="" message="desolé captcha incorrect"
for i in range (1,11): f.r.setText(message)
rs=rs+chr(randint(65,90))
f.cp.setText(rs) app=QtWidgets.QApplication([])
def verif() : f=uic.loadUi("interface_captcha.ui")
ch=f.s.text() f.show()
cap=f.cp.text() f.charger.clicked.connect(charger)
if (not(ch.upper==ch)): f.verif.clicked.connect(verif)
message="verif la saisie" app.exec_()

Procédure ou fonction Def


Exemple de traduction Procedure crypter( ch :chaine) Def crypter( ch ) :
X3 Debut Rs=’’
Repeter Rs "" for i in range ( len(ch)) :
X X*2 Pour i de 0 à long(ch)-1 faire y=ord(ch[i])+k
yord(ch[i])+k if( y>90) :
Jusquà X> 50
Si( y>90) alors y=y-26
yy-26 RsRs+chr(y)
En python : finsi print(‘‘la nouvelle chaine est’’,Rs)
X=3 RsRs+chr(y)
while( not( X> 50)) : Finpour
X X*2 Ecrire(‘‘la nouvelle chaine est’’,Rs)
fin
Pour i de 0 à long(ch)-1 : for i in range ( len(ch)) : Tantque(n≠0) faire while( n !=0) :

Si (non( ok)) alors if(not( ok)) : Si(x=y) alors if( x==y) :

Sinon si elif : sinon else :

Ch majus(mot) Ch=mot.upper() Ssouschaine(ch ,2,8) S=ch[ 2 : 8]

Ch.isalpha() Pour tester si ch Pour tester si majuscule ou Pour tester si minuscule?


alphabetique ou non non Mot.islower()
Mot.isupper()
EstNum(ch)  ch.isdecimal() ord("A")=65 ord("Z")=90
Pour tester si la chaine est contient ou ord ord
seullement des chiffres ch.isnumeric() ord("a")=97 ord("z")=122
Xalea(1 ,6) X= randint(1 ,6) chr(65)= "A" chr(97)=’’a’’

Ppos(x,ch) P=ch.find(x) Ecrire(‘donner n’) N=int(input(‘donner n’))


Lire(n)
N ∈ [‘a’,’e’,’i’,’o’,’u’,’y’] N in [‘a’,’e’,’i’,’o’,’u’,’y’] Lire(n) n=int(input())
ChConvch(n) Ch=str(n) Xvaleur(ch) X=int(ch)
Long(ch) Len(ch) N ∈ [2..100] 2 <= N<=100

5
6

You might also like