Examen du baccalauréat Session principale juin 2014 ... · PDF fileCorrigé...
Click here to load reader
Transcript of Examen du baccalauréat Session principale juin 2014 ... · PDF fileCorrigé...
Corrigé d'Algorithmique et programmation-SI-Session principale juin 2014 Page 1/6
Examen du baccalauréat
Session principale juin 2014
Section : sciences de
l'informatique
Epreuve : Algorithmique et
programmation
Corrigé
Exercice 1 :
1. après l'exécution du programme Jeux ci dessus pour N=1, le message affiché sera :
F « Balle sous Goblet 1 » V « Balle sous Goblet 2 » F « Balle sous Goblet 3 »
Justification :
La procédure Jeu1 est déclarée avec deux paramètres formels passées par passage, alors que La
procédure Jeu2 est déclarée avec deux paramètres formels passées par valeur.
2. Soit F un fichier de booléens :
1) Pour remplir un champ de la variable g3, on peut utiliser l'instruction :
F Lire(g3.balle) V Lire(g3.couleur) V Lire(f,g3.balle)
Just
ific
ati
on
L'instruction Lire(g3.balle) permet de remplir un seul champ de g3 de type booléen. C'est impossible
de lire un champ de type booléen.
L'instruction Lire(g3.couleur) permet de remplir un seul champ de g3 de type chaine de caractère.
C'est vrai.
L'instruction Lire(f,g3.balle) permet de lire l'élément (booléen) du fichier f, et le stocke dans g3.balle
(equivalent à une afféctation à un champ de type booléen). C'est vrai.
2) Pour afficher le contenu de la variable g1, on peut utiliser l'instruction :
F ecrire(g1) V ecrire(g1.balle , g1.couleur) F ecrire(f, g1.balle)
Just
ific
ati
on
G1 est de type enregistrement, donc l'instruction ecrire(g1) est faux.
L'instruction ecrire(g1.balle , g1.couleur) permet d'afficher le contenu du deux champs formants
l'enregistrement g1. C'est vrai.
L'instruction ecrire(f, g1.balle), permet d'écrire dans le fichier f et non pas d'afficher le contenu de la
variable g1. C'est faux.
Exercice 2 :
Pour la suite U :
U0 est un entier positif pris au hasard (3≤U0≤40)
Un=Un-1 DIV 2, si est Un-1 pair, sinon Un=3*Un-1+1 (n>0)
Corrigé d'Algorithmique et programmation-SI-Session principale juin 2014 Page 2/6
L'algorithme d'un module récursif est :
0) Def Fn Suite( u0 :entier):entier
1) Si ( u0 = 4 ) alors
suite <-- 1
sinon
suite <-- 1+ Fn suite( Fn U(u0))
Fin si
2) Fin Suite
L'algorithme de la fonction U :
0) Def Fn U(nb: entier ):entier
1) Si ( nb MOD 2=0 ) alors
r<-- nb DIV 2
sinon
r <-- 3*nb + 1
Fin si
2) u<—r
3) Fin u
Exercice 3 :
L'algorithme d'un module qui permet de calculer le PGCD des entiers positifs dans une
matrice:
0) Def Fn Calcul( M:Mat ; n:entier):entier
1) pour L de 2 à N faire
pour C de 1 à N-L+1 faire
M[L,C]<--Fn PGCD( M[L-1,C], M[L-1,C+1] )
Fin pour
Fin pour
2) Calcul ←-M[L,C]
3) Fin Calcul
Un module récursif pour calculer le PGCD de deux entiers positifs :
0) Def Fn PGCD(a,b:entier):entier
1) si a < b alors
aux <-- a
a <-- b
b <-- aux
finsi
2) si b = 0 alors
pgcd <-- a
sinon pgcd <--pgcd(b,a MOD b)
Fin si
3) Fin PGCD
Corrigé d'Algorithmique et programmation-SI-Session principale juin 2014 Page 3/6
Problème :
Analyse du programme principal :
Nom : MasseMolaireMoléculaire
Résultat=Fr
Fr = [ ] Proc Remplir_Resultat( fm, fr )
fr= Assigner(fr,''c:\Resultats.dat'')
fm= Assigner(fm,''c:\Molecules.txt'')
fa= [ ] Proc Remplir_Atome( n , fa )
fa= Assigner(fa,''c:\atomes.dat'')
n= [ ] Proc saisie( n )
Tableau de nouveau Type
Type
matiere=enregistrement
nom : chaine
masse : réel
fin matiere
Fres= fichier de matiere
Fatom= fichier de matiere
Tableau de déclaration des objets globaux
objet T/N role
Fr
fa
Fm
n
Remplir_Result
at
Remplir_Atome
saisie
Fres
Fatom
Texte
entier
procedue
procedue
procedue
Fichier de matiere (ici, la matière est équivalente à une molécule)
Fichier de matiere (ici, la matière est équivalente à une atome)
Fichier texte pour sauvegarder les détails des molécules.
nombre d'atome à saisir
Procédure pour sauvegarder la masse molaire moléculaire de
chaque molécule.
Procédure pour sauvegarder les données relatives à N atomes.
Procédure pour saisir le nombre d'atome.
Analyse de la procédure Saisir : {procédure pour lire le nombre d’atome N }
Def Proc Saisir ( Var N:entier )
Résultat= n
n= [ ] Repeter
N=donnée(''saisir le nombre d'atomes'')
jusqu'à ( N ≤ 50 )
Analyse de la procédure Remplir_Atome : {procédure pour remplir le fichier FA avec les
enregistrements }:
Def Proc Remplir_Atome( n:entier ; var fa:Fatom )
Resultat= Fa
Corrigé d'Algorithmique et programmation-SI-Session principale juin 2014 Page 4/6
Fa = [ ReCreer(Fa) ] Pour i de 1 à N Faire
Avec At Faire
Repeter
nom=Donnée(''saisir le nom de l'atome'')
jusqu’à ( FN verif(nom) )
Repeter
masse=Donnée(''saisir la masse de l'atome'')
jusqu’à ( masse Dans [1.. 294] ) {M.A hydrogène =1, M.A Ununoctium=294 (Ref)}
Fin avec
Ecrire( Fa, At )
Fin Pour
Fin Remplir_Atome
{ à la fin fermer(Fa) }
Tableau de déclaration des objets Locaux
objet T/N
At
Verif
i
matiere
fonction
entier
Analyse de la Fonction Verif : {Fonction pour vérifier le nom d’un atome}:
Def Fn Verif( nom : chaine ) : booléen
Resultat= Verif
Verif<-- Test
Test=[ Test<--faux] Si (nom[1] dans [''A''.. ''Z''] ET ( Long(nom)=1 OUex nom[2] dans
[''a''.. ''z'']) ) Alors
test<--Vrai
Fin si
Fin Verif
Tableau de déclaration des objets Locaux
objet T/N
Test booléen
Analyse de la procédure Remplir_Resultat : {procédure pour remplir le fichier résultat FR
avec le nom et la masse molaire moléculaire de chaque molécule}
Def Proc Remplir_Resultat( var fm:texte ; var fr:Fres )
Résultat= Fr
Fr= [ Ouvrir(Fm), ReCreer(Fr) ] Tant que (Non_fin_fichier (Fm) ) Faire
Lire_nl( Fm, ch )
nom_mol <-- sous-chaine( Ch, 1, pos( ''*'', Ch)-1 )
Efface( Ch, 1, pos( ''*'', Ch) )
Molecule <-- Ch
Corrigé d'Algorithmique et programmation-SI-Session principale juin 2014 Page 5/6
mas_mol<-- Fn M( Molecule )
Avec Res Faire
nom<-- nom_mol
masse<--mas_mol
fin avec
Ecrire( Fr, Res )
Fin tant que
Fin Remplir_Resultat
{ à la fin fermer(Fm), fermer(Fr) }
Tableau de déclaration des objets Locaux
objet T/N
Ch, nom_mol, Molecule
mas_mol
Res
M
Chaine
réel
matiere
fonction
Analyse de la fonction M :{une fonction pour déterminer la masse molaire moléculaire
d’une molécule }:
Def Fn M( Molecule:chaine ):réel
Résultat= M
M<--sm
sm = [ sm<--0 ] Tant que (Molecule ≠ '''' ) Faire
atome<-- sous-chaine( Molecule, 1, 1 )
Efface ( Molecule, 1, 1 )
Si ( Molecule[1] Dans [''a''..''z''] ) Alors
atome<--atome + sous-chaine( Molecule,1 ,1 )
Efface ( Molecule, 1, 1 )
Fin si
Répéter
nbr =[ ]Si ( Molecule[1] Dans [''2''..''9''] ) Alors
[ nbr<--0 ]Tant que ( Molecule[1] Dans [''0''..''9''] ) Faire
Valeur( Molecule[1], nb, e )
Efface ( Molecule, 1, 1 )
nbr<--nbr*10 + nb
Fin tant que
sinon
nbr<--1
Fin si
sm <--sm + nbr * Fn A( atome, Fa )
Fin tant que
Fin M
Avec Res Faire
nom<-- sous-chaine( Ch, 1,
pos( ''*'', Ch)-1 )
Efface( Ch, 1, pos( ''*'', Ch) )
masse<-- Fn M( Ch )
fin avec
Remarque : Toute formule chimique correcte d’une molécule doit être écrite dans l’ordre comme suit : 1ère position : une lettre majuscule. 2ème position : une lettre minuscule ou un entier naturel ( 2,3, …) ou VIDE (le vide est équivalent à 1 ). …
Corrigé d'Algorithmique et programmation-SI-Session principale juin 2014 Page 6/6
Tableau de déclaration des objets Locaux
objet T/N
sm
atome
nbr, nb,e
A
Réel
Chaine
entier
fonction
Analyse de la fonction A :{une fonction qui renvoie la masse atomique d’un atome donnée
depuis le fichier FA}:
Def Fn A( atome:chaine; Var Fa:Fatom ):réel
Résultat= A
A<--m
m=[ Ouvrir(Fa), m<--0, exit<--faux ] Repeter
lire(Fa, At)
Si (At.nom=Atome ) Alors
m<--At.masse
exit<--vari
fin si
jusqu'à (exit OU fin_fichier(Fa) )
Fin A
{ à la fin fermer(Fa) }
Tableau de déclaration des objets Locaux
objet T/N
m
exit
Réel
booléen