éNoncés+corrections bac2008

7

Click here to load reader

Transcript of éNoncés+corrections bac2008

Page 1: éNoncés+corrections bac2008

Année Scolaire : 2011-2012 4 SC

Lycée Attarine Ariana 2012

REPUBLIQUE TUNISIENNE

MINISTERE DE L’EDUCATION

ET DE LA FORMATION

***

Sections: Math. + Tech. + Sc.Exp.

EPREUVE PRATIQUE D’INFORMATIQUE

EXAMEN DU BACCALAUREAT

SESSION 2008

DATE : 22 mai 2008 10h30

DUREE : 1 h – COEFFICIENT : 0.5

Sujet : Programmation Pascal

Important : 1) Une solution modulaire au problème est exigée.

2) Enregistrez au fur et à mesure votre programme dans le dossier Bac2009 se trouvant sur la racine C:\ en lui

donnant comme nom votre numéro d’inscription.

On se propose d’écrire un programme Pascal permettant de déterminer et d'afficher un code à

partir d'un entier N strictement positif et supérieur à 100, selon le principe suivant :

1. Calculer la somme S des chiffres qui composent le nombre N

2. Recommencer le calcul de la somme des chiffres de la somme obtenue S tant que celle-ci

n'est pas comprise entre 1 et 9.

3. Le code sera le nombre formé par N auquel on place à sa gauche la dernière somme

obtenue.

Exemple:

Pour N= 9867, le programme affichera : le code est : 39867

En effet:

Pour N= 9867 :

La 1ère

somme S vaut 30 (car 9+8+6+7= 30)

La 2ème

somme S vaut 3 (car 3+0 = 3)

Etant donné que la dernière somme S, qui vaut 3, est comprise entre 1 et 9, le code sera

39867

Grille d’évaluation : Questions Nombre de points

Décomposition en modules utiles à la solution (déclaration+appel) 5

Si exécution et tests réussis Alors

Sinon

Compilation

Structures de données adéquates au problème posé

Traitements avec structures de contrôle adéquates

15

4

4

7

Page 2: éNoncés+corrections bac2008

Année Scolaire : 2011-2012 4 SC

Lycée Attarine Ariana 2012

REPUBLIQUE TUNISIENNE

MINISTERE DE L’EDUCATION

ET DE LA FORMATION

***

Sections: Math. + Tech. + Sc.Exp.

EPREUVE PRATIQUE D’INFORMATIQUE

EXAMEN DU BACCALAUREAT

SESSION 2008

DATE : 22 mai 2008 10h30

DUREE : 1 h – COEFFICIENT : 0.5

Program P22Mai2008_10h30;

Uses WinCrt;

Var

N:LongInt;

{**= Procedure De Saisie de N ==**}

Procedure SaisieDe_N(Var N : LongInt);

Begin

Repeat

Write('Saisir N: ');

Readln(N);

Until (N>100);

End;

{**=FN Qui Calcule la somme des chiffres d'un nombre=**}

Function SommeChiffres(NBR:LongInt):Integer;

Var

Ch:String;

S,i,e,X:Integer;

Begin

S:=0;

STR(NBR,CH);

For i:=1 To Length(Ch) Do

Begin

Val(Ch[i],X,e);

S:=S+X;

End;

SommeChiffres:=S;

End;

{******=== Fonction Code ==*******}

Function Code(N:LongInt):LongInt;

Var

Res,Aux:LongInt;

e:Integer;

Ch, Gauche:String;

Begin

Aux:=N;

Repeat

Aux:= SommeChiffres(Aux);

Until Aux<=10;

Str(N,Ch);

Str(Aux,Gauche);

Val(Gauche+Ch, Res, e);

Code:=Res;

End;

Begin{******=== Programme Principal ===*******}

SaisieDe_N(N);

Write('Le Code = ',Code(N));

End.

Page 3: éNoncés+corrections bac2008

Année Scolaire : 2011-2012 4 SC

Lycée Attarine Ariana 2012

REPUBLIQUE TUNISIENNE

MINISTERE DE L’EDUCATION

ET DE LA FORMATION

***

Sections: Math. + Tech. + Sc.Exp.

EPREUVE PRATIQUE D’INFORMATIQUE

EXAMEN DU BACCALAUREAT

SESSION 2008

DATE : 22 mai 2008 9h

DUREE : 1 h – COEFFICIENT : 0.5

Sujet : Programmation Pascal

Important : 1) Une solution modulaire au problème est exigée.

2) Enregistrez au fur et à mesure votre programme dans le dossier Bac2009 se trouvant sur la racine C:\ en lui

donnant comme nom votre numéro d’inscription.

On se propose d'écrire un programme Pascal permettant de déterminer et d’afficher si un entier

N saisi (N > 9) est divisible par 9 ou non, en appliquant la méthode suivante:

1. On fait la somme du 1er et du 2

ème chiffre de N

2. Si la somme obtenue est supérieure ou égale à 9, on lui soustrait 9

3. On ajoute ensuite à cette somme et on lui applique la règle 2 (on lui retranche 9 si elle est

supérieure à 9) et ainsi de suite jusqu'au dernier chiffre de N.

4. Si le résultat final est nul, le nombre N est alors divisible par 9.

Exemple:

Pour N = 65493 le programme effectuera les opérations suivantes :

6 + 5 = 11 (11 est supérieur ou égal à 9, on lui soustrait 9, on obtient 2)

2 + 4 = 6 (6 est strictement inférieur à 9)

6 + 9 = 15 (15 est supérieur ou égal à 9, on lui soustrait 9, on obtient 6)

6 + 3 = 9 (9 est supérieur ou égal à 9, on lui so11strait 9, on obtient 0)

Le résultat est nul et tous les chiffres de N ont été traités, donc le nombre 65493 est

divisible par 9. En effet, 65493 = 9 x 7277

Grille d’évaluation : Questions Nombre de points

Décomposition en modules utiles à la solution (déclaration+appel) 5

Si exécution et tests réussis Alors

Sinon

Compilation

Structures de données adéquates au problème posé

Traitements avec structures de contrôle adéquates

15

4

4

7

Page 4: éNoncés+corrections bac2008

Année Scolaire : 2011-2012 4 SC

Lycée Attarine Ariana 2012

REPUBLIQUE TUNISIENNE

MINISTERE DE L’EDUCATION

ET DE LA FORMATION

***

Sections: Math. + Tech. + Sc.Exp.

EPREUVE PRATIQUE D’INFORMATIQUE

EXAMEN DU BACCALAUREAT

SESSION 2008

DATE : 22 mai 2008 9h

DUREE : 1 h – COEFFICIENT : 0.5

Program P22Mai2008_9h;

Uses WinCrt;

Type

Vecteur=Array[1..10] of Integer;

{Selon l'énoncé et l'exemple: N est de type LongInt

--> au max contient 10 chiffres (2 Milliards w chwaya sarf)

}

Var

T: Vecteur;

TailleT:Integer;

N:LongInt;

{******=== Procedure De Saisie de N ===*******}

Procedure SaisieDe_N(Var N : LongInt);

Begin

Repeat

Write('Saisir N: ');

Readln(N);

Until (N>9);

End;

{**== Procedure Qui Met tous les chiffre de N dans T ==**}

Procedure Chiffres_De_N_Dans_T(Var T:Vecteur;

Var TailleT: Integer; N:LongInt);

Begin

TailleT:=0;

Repeat

TailleT:=TailleT+1;

T[TailleT]:=N MOD 10;

N:=N DIV 10;

Until (N=0);

End;

{******=== Fonction Verif ==*******}

Function Verif(T:Vecteur;TailleT: Integer):Boolean;

Var

i,S:Integer;

Begin

S:=T[TailleT];

For i:=TailleT-1 DownTo 1 Do

Begin

S:=S+T[i];

IF S>=9 THEN S:=S-9;

End;

Verif:=(S=0);

End;

Begin {******=== Programme Principal ===*******}

SaisieDe_N(N);

Chiffres_De_N_Dans_T(T, TailleT,N);

IF Verif(T, TailleT) THEN

Write('Le Nombre [',N, '] est Divisible par 9')

ELSE Write('Le Nombre [',N, '] n''est pas Divisible par 9');

End.

Page 5: éNoncés+corrections bac2008

Année Scolaire : 2011-2012 4 SC

Lycée Attarine Ariana 2012

REPUBLIQUE TUNISIENNE

MINISTERE DE L’EDUCATION

ET DE LA FORMATION

***

Sections: Math. + Tech. + Sc.Exp.

EPREUVE PRATIQUE D’INFORMATIQUE

EXAMEN DU BACCALAUREAT

SESSION 2008

DATE : 22 mai 2008 9h

DUREE : 1 h – COEFFICIENT : 0.5

Sujet : Programmation Pascal

Important : 1) Une solution modulaire au problème est exigée.

2) Enregistrez au fur et à mesure votre programme dans le dossier Bac2009 se trouvant sur la racine C:\ en lui

donnant comme nom votre numéro d’inscription.

Ecrire un programme Pascal qui permet de :

Remplir un tableau T, d'une façon automatique et aléatoire, par n entiers strictement

positifs, inférieurs ou égaux à 1000, avec (5≤ n ≤ 30).

Vérifier pour l'élément de T d'indice p donné, s'il est égal à la somme d'un certain nombre

d'éléments consécutifs de T qui le précèdent immédiatement. Dans ce cas, le programme

affiche ces éléments, sinon il affiche "Condition non vérifiée".

Exemple1:

Pour le tableau T suivant, avec n=7 et p=5 :

T 3 2 4 6 12 18 20

1 2 3 4 5 6 7

Le programme affiche : 6, 4, 2

Exemple2:

Pour le tableau T suivant, avec n=7 et p=3 :

T 3 2 4 6 12 18 20

1 2 3 4 5 6 7

Le programme affiche "Condition non vérifiée".

Grille d’évaluation : Questions Nombre de points

Décomposition en modules utiles à la solution (déclaration+appel) 5

Si exécution et tests réussis Alors

Sinon

Compilation

Structures de données adéquates au problème posé

Traitements avec structures de contrôle adéquates

15

4

4

7

Page 6: éNoncés+corrections bac2008

Année Scolaire : 2011-2012 4 SC

Lycée Attarine Ariana 2012

REPUBLIQUE TUNISIENNE

MINISTERE DE L’EDUCATION

ET DE LA FORMATION

***

Sections: Math. + Tech. + Sc.Exp.

EPREUVE PRATIQUE D’INFORMATIQUE

EXAMEN DU BACCALAUREAT

SESSION 2008

DATE : 22 mai 2008 14h

DUREE : 1 h – COEFFICIENT : 0.5

Program P22Mai2008_14h;

Uses WinCrt;

Type

Vecteur=Array[1..30] of integer;

Var

T:Vecteur;

N, P:Integer;

{******=== Procedure De Saisie de N ===*******}

Procedure SaisieDe_N(Var N : Integer);

Begin

Repeat

Write('Saisir N: ');

Readln(N);

Until (N>=5) And (N<=30);

End;

{******=== Procedure De Saisie de P ===*******}

Procedure SaisieDe_P(Var P : Integer; N:Integer);

Begin

Repeat

Write('Saisir P: ');

Readln(P);

Until (P>=2) And (P<=N);

End;

{******=== Procedure De Remplissage de T ===*******}

Procedure Remplissage_De_T(Var T:Vecteur; N: Integer);

Var

i:Integer;

Begin

Randomize; {initialise le générateur aléatoire}

For i:=1 To N Do

Begin

T[i]:=Random(1000)+1;

{Random(1000) génère un nombre aléatoire entre 0 et 999}

End;

End;

Page 7: éNoncés+corrections bac2008

Année Scolaire : 2011-2012 4 SC

Lycée Attarine Ariana 2012

{******=== Procedure Affichage de la liste ===*******}

Procedure AfficherListe(T:Vecteur; N,P: Integer);

Var

S, i:Integer;

Begin

S:=0;

i:=P;

Repeat

i:=i-1;

S:=S+T[i];

Write(T[i],', ');

Until S=T[P];

End;

{**=FN Qui Calcule la somme =**}

Function Somme(T:Vecteur; N,P:Integer):Integer;

Var

S,i:Integer;

Begin

S:=0;

i:=P;

Repeat

i:=i-1;

S:=S+T[i];

Until (S>=T[P]) OR (i=1);

Somme:=S;

End;

{******=== Programme Principal ===*******}

Begin

SaisieDe_N(N);

Remplissage_De_T(T, N);

SaisieDe_P(P,N);

IF Somme(T,N,P)=T[P] THEN AfficherListe(T,N,P)

ELSE Write('Condition non vérifiée');

End.