Vous êtes sur la page 1sur 7

REPUBLIQUE TUNISIENNE ‫الجمهورية التونسية‬

Ministère de l'Enseignement Supérieur


et de la Recherche Scientifique ‫وزارة التعليم العالي والبحث العلمي‬
Concours Nationaux d’Entrée ‫انمناظرات انىطنية نهدخىل‬
‫إنى مراحم تكىين انمهندسين‬
aux Cycles de Formation d’Ingénieurs
2022 ‫دورة‬
Session 2022

Concours Biologie et Géologie


Correction Epreuve d’Informatique
BARÈME PROBLÈME I: 40 + PROBLÈME II: 75 TOTAL 115/100
PROBLEME 1 (40 points)
1. (7.5 points)
def ExtraireQuiz(nomFich):
f = open(nomFich,"r")
questions = dict()
propositions = dict()
reponses = dict()
i = 1
while True:
q = f.readline()
if q == "":
break
questions[i] = q.strip()
propositions[i] = []
reponses[i] = []
while True:
p = f.readline().strip()
if p.startswith("*"):
break
elif p.startswith("+"):
propositions[i].append(p[1:])
reponses[i].append(True)
else:
propositions[i].append(p[1:])
reponses[i].append(False)
i+=1
return questions,propositions,reponses

2. (7.5 points)
def affichequestion(Questions,propositions,num):
print("({}){}?".format(num,Questions[num]))
k = 97
for j in propositions[num]:
print("({}):{}".format(chr(k),j))
k+=1

Concours (Biologie et Géologie) - Session Juin 2022 Correction Epreuve d’Informatique Page 1/7
3. (7.5 points)
def initialiserdictCandidat(propositions):
d_Cand = dict()
for i,j in propositions.items():
d_Cand[i] = [False]*len(j)
return d_Cand

4. (7.5 points)
def LectureRepQCM(num,dCand):
while True:
rc = input("donner la/les lettre(s) alphabétique(s) \
associée(s) au(x) choix du votre reponse\
(séparés par des espaces):")
ter = input("Voulez-vous confirmer votre réponseO/N ? ")
if ter == "O":
if rc == "":
break
else:
L = rc.split()
for i in L:
dCand[num][ord(i)-97]=True
break

5. (5 points)
def NoterRepQCM(dCand,reponses,num):
c = reponses[num].count(True)
k = len(reponses[num])
nbF = dCand[num].count(False)
if nbF == k:
return 0
else:
Note = 0
for i in range(0,len(dCand[num])):
if dCand[num][i]==True:
if reponses[num][i]==True:
Note+=1/c
else:
Note-=1/(k-c)
return Note

6. (5 points)
questions,propositions,reponses=ExtraireQuiz("Quiz.txt")
dCand = initialiserdictCandidat(propositions)
NoteTot = 0
for num in questions.keys():
affichequestion(questions,propositions,num)
LectureRepQCM(num,dCand)

Concours (Biologie et Géologie) - Session Juin 2022 Correction Epreuve d’Informatique Page 2/7
NoteQ = NoterRepQCM(dCand,reponses,num)
NoteTot+=NoteQ
print(NoteTot)

PROBLEME 2 (75 points)


Partie 1 : Algèbre Relationnelle (7.5 points)
1. (3.75 points)

Les quiz qui n’ont jamais été programmés en tant


qu’examens de certification (les quiz qui n’ont pas de
tentatives)

2. (3.75 points)

La liste des questions avec leurs réponses correctes (le


corrigé de la base des questions)

Partie 2 : SQL (47.5 points)


1. (2.5 points)
create table Proposition(IdProp int,IdQs int,textProp text,veracite
int,primary key(IdProp,IdQs),foreign key(IdQs) references
Question(IdQs),check (veracite=0 or veracite=1))
2. (2.5 points)

insert into DetailQuiz values(228,17546)


3. (2.5 points)

delete from question where dateCr<"2012%"


4. (2.5 points)

select *
from candidat

where nom like "%L%" and nom like "%A%"

Concours (Biologie et Géologie) - Session Juin 2022 Correction Epreuve d’Informatique Page 3/7
5. (2.5 points)

select tronc, textprop

from detailquiz dq, question q, proposition p

where Idquiz=175 and dq.IdQs=q.IdQs and p.IdQs=q.IdQs


6. (5 points)

select *

from quiz

where datefin <current_date


7. (5 points)

select q.idQs,tronc,textprop

from question q,proposition p


where q.idQs=p.idQs and q.idqs not in (select idQs from detailQuiz)
8. (5 points)

select idQs
from proposition
where textprop in("Vrai","Faux")
9. (5 points)

select tronc

from proposition p,Question q

where p.idQs=q.idQs

group by p.idQs
having count(*)>=4

Concours (Biologie et Géologie) - Session Juin 2022 Correction Epreuve d’Informatique Page 4/7
10. (5 points)

select idQs
from (select IdQs,count(*)

from proposition

group by IdQs
having count(*) between 3 and 5

intersect

select IdQs,count(*)

from proposition
where veracite=1
group by IdQs)
11. (5 points)

select t.*

from tentative t,quiz q


where t.idquiz=q.idquiz
and(JulianDay(datehfin)– JulianDay(datehdeb)) * 24 * 60 >duree
12. (5 points)

select distinct idQuiz

from detailQuiz

where idQuiz not in(select idQuiz


from proposition p,detailquiz dq

where p.IdQs=dq.IdQs and textprop in ("Vrai","Faux"))

Concours (Biologie et Géologie) - Session Juin 2022 Correction Epreuve d’Informatique Page 5/7
Partie 3 : Sqlite 3 (20 points)
1. (7.5 points)
def Score_Question(Cur,V,IdQ):
Cur.execute("select veracite
from Proposition P
where IdQs={}".format(IdQ))
Lv=Cur.fetchall()
Lv=[i[0] for i in Lv]
c=Lv.count(1)
k=len(Lv)
Cur.execute("select Rc.IdProp,veracite
from ReponseCandidat Rc,Proposition P
where Voucher='{}' and P.IdQs=Rc.IdQs
and P.IdProp=Rc.IdProp
and P.IdQs={}".format(V,IdQ))
L=Cur.fetchall()
ScoreQ=0
for i in L:
if i[1]==1:
ScoreQ+=1/c
else:
ScoreQ-=1/(k-c)

return ScoreQ

2. (7.5 points)
def Score_Quiz(Cur,V):
Cur.execute("select distinct IdQs
from ReponseCandidat
where Voucher='{}'".format(V))
L=cur.fetchall()
Lq=[i[0] for i in L]
ScoreQz=0
for i in Lq:
ScoreQz+=Score_Question(Cur,V,i)
Cur.execute("update Tentative
set scoreG={}
where Voucher='{}'".format(ScoreQz,V))

Concours (Biologie et Géologie) - Session Juin 2022 Correction Epreuve d’Informatique Page 6/7
3. (5 points)
def Stat_Certif(Cur):
Cur.execute("select idQuiz,max(scoreG),avg(scoreG)
from Tentative group by idQuiz ")
L=cur.fetchall()
print(L)
from math import sqrt
L1=[]
for i in L:
Cur.execute("select scoreG
from Tentative
where idQuiz={}
and scoreG is not null".format(i[0]))
LScoreGQz=Cur.fetchall()
print(LScoreGQz)
s=0
for j in LScoreGQz:
s+=abs(j[0]-i[1])**2
Ecart=sqrt(s/len(L))
i+=(Ecart,)
L1.append(i)
return(L1)

Concours (Biologie et Géologie) - Session Juin 2022 Correction Epreuve d’Informatique Page 7/7

Vous aimerez peut-être aussi