examen du baccalauréat session principale juin 2014 ... · pdf filecorrigé...

6

Click here to load reader

Upload: duongdien

Post on 06-Mar-2018

218 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Examen du baccalauréat Session principale juin 2014 ... · PDF fileCorrigé d'Algorithmique et programmation-SI-Session principale juin 2014 Page 2/6 L'algorithme d'un module récursif

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)

Page 2: Examen du baccalauréat Session principale juin 2014 ... · PDF fileCorrigé d'Algorithmique et programmation-SI-Session principale juin 2014 Page 2/6 L'algorithme d'un module récursif

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

Page 3: Examen du baccalauréat Session principale juin 2014 ... · PDF fileCorrigé d'Algorithmique et programmation-SI-Session principale juin 2014 Page 2/6 L'algorithme d'un module récursif

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

Page 4: Examen du baccalauréat Session principale juin 2014 ... · PDF fileCorrigé d'Algorithmique et programmation-SI-Session principale juin 2014 Page 2/6 L'algorithme d'un module récursif

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

Page 5: Examen du baccalauréat Session principale juin 2014 ... · PDF fileCorrigé d'Algorithmique et programmation-SI-Session principale juin 2014 Page 2/6 L'algorithme d'un module récursif

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 ). …

Page 6: Examen du baccalauréat Session principale juin 2014 ... · PDF fileCorrigé d'Algorithmique et programmation-SI-Session principale juin 2014 Page 2/6 L'algorithme d'un module récursif

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