éNoncés+corrections bac2010

12
Année Scolaire : 2011-2012 4 SC Lycée Attarine Ariana 2012 REPUBLIQUE TUNISIENNE MINISTERE DE L’EDUCATION EXAMEN DU BACCALAUREAT - SESSION DE JUIN 2010 SECTIONS: Mathématiques + Sciences Expérimentales + Sciences Techniques EPREUVE : Pratique d’informatiques DUREE : 1 h COEFFICIENT : 0,5 DATE : Important : Une solution modulaire au problème est exigée. Enregistrez au fur et à mesure votre programme dans le dossier Bac2010 se trouvant sur la racine C:\ en lui donnant comme nom votre numéro d’inscription. Ecrire un programme Pascal qui permet de déterminer si un entier donné n (n :?: 10) est divisible par 7 ou non, en appliquant la méthode suivante : 1) supprimer le chiffre des unités de n 2) calculer la valeur absolue de la différence entre le nombre obtenu en 1) et le double du chiffre d'unité supprimé 3) recommencer les étapes 1) et 2) jusqu'à obtenir un nombre à un seul chiffre 4) si ce chiffre obtenu en 3) est égal à 0 ou égal à 7 alors le nombre u est divisible par 7. Grille d’évaluation Travail fourni Nombre de points Décomposition en modules utiles à la solution proposée (déclarations et appels) Structures de données adéquates Saisie et contrôle des données Traitement avec les structures de contrôles adéquates Compilation 4 2 3 8 3 25 mai 2010 à 10 h

Transcript of éNoncés+corrections bac2010

Page 1: éNoncés+corrections bac2010

Année Scolaire : 2011-2012 4 SC

Lycée Attarine Ariana 2012

REPUBLIQUE TUNISIENNE

MINISTERE DE L’EDUCATION

EXAMEN DU BACCALAUREAT - SESSION DE JUIN 2010

SECTIONS: Mathématiques + Sciences Expérimentales + Sciences Techniques

EPREUVE : Pratique d’informatiques DUREE : 1 h COEFFICIENT : 0,5

DATE :

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

Enregistrez au fur et à mesure votre programme dans le dossier Bac2010 se trouvant

sur la racine C:\ en lui donnant comme nom votre numéro d’inscription.

Ecrire un programme Pascal qui permet de déterminer si un entier donné n (n :?: 10) est

divisible par 7 ou non, en appliquant la méthode suivante :

1) supprimer le chiffre des unités de n

2) calculer la valeur absolue de la différence entre le nombre obtenu en 1) et le double

du chiffre d'unité supprimé

3) recommencer les étapes 1) et 2) jusqu'à obtenir un nombre à un seul chiffre

4) si ce chiffre obtenu en 3) est égal à 0 ou égal à 7 alors le nombre u est divisible par 7.

Grille d’évaluation

Travail fourni Nombre

de points

Décomposition en modules utiles à la solution proposée (déclarations et appels)

Structures de données adéquates

Saisie et contrôle des données

Traitement avec les structures de contrôles adéquates

Compilation

4

2

3

8

3

25 mai 2010 à 10 h

Page 2: éNoncés+corrections bac2010

Année Scolaire : 2011-2012 4 SC

Lycée Attarine Ariana 2012

REPUBLIQUE TUNISIENNE

MINISTERE DE L’EDUCATION

EXAMEN DU BACCALAUREAT - SESSION DE JUIN 2010

SECTIONS: Mathématiques + Sciences Expérimentales + Sciences Techniques

EPREUVE : Pratique d’informatiques DUREE : 1 h COEFFICIENT : 0,5

DATE :

Program P25Mai2010_10h;

uses wincrt;

Var

N:LongInt;

{**************************************}

Procedure SaisieDe_N(Var N : LongInt);

Begin

Repeat

Write('Saisir N: ');

Readln(N);

Until (10<=N);

End;

{**************************************}

Function DivisiblePar7(N:LongInt):Boolean;

Var

U,R:LongInt;

Begin

Repeat

U:=N MOD 10;

R:=N DIV 10;

N:= ABS(R - 2*U); {ABS Renvoi la valeur absolue d'un nombre}

Until (N<=9);

DivisiblePar7:= (N =7) OR (N=0);

{** ou encore...

DivisiblePar7:=N IN [0,7];

{** ou encore...

IF N IN [0,7] THEN

DivisiblePar7:=TRUE

ELSE DivisiblePar7:=FALSE;

{** ou encore...

IF (N =7) OR (N=0) THEN

DivisiblePar7:=TRUE

ELSE DivisiblePar7:=FALSE;}

End;

{**************************************}

Begin

SaisieDe_N(N);

IF DivisiblePar7(N) THEN

Write(N,' est divisible par 7')

ELSE Write(N,' n''est pas divisible par 7')

{** ou encore...

IF DivisiblePar7(N)=True THEN...}

End.

25 mai 2010 à 10 h

Page 3: éNoncés+corrections bac2010

Année Scolaire : 2011-2012 4 SC

Lycée Attarine Ariana 2012

REPUBLIQUE TUNISIENNE

MINISTERE DE L’EDUCATION

EXAMEN DU BACCALAUREAT - SESSION DE JUIN 2010

SECTIONS: Mathématiques + Sciences Expérimentales + Sciences Techniques

EPREUVE : Pratique d’informatiques DUREE : 1 h COEFFICIENT : 0,5

DATE :

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

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

donnant comme nom votre numéro d’inscription.

Pour vérifier si un entier positif K de n chiffres est un nombre de KAPREKAR ou non, on peut

suivre la méthode suivante :

1) élever K au carré

2) additionner l'entier formé par les n chiffres de droite du carré de K avec l'entier formé par le

reste des chiffres du carré de K

3) si la somme trouvée à l'étape 2) est égale à K alors le nombre est dit de KAPREKAR

Exemples:

● Si K= 9 alors n=1 et K2 = 81

L'entier formé par les n chiffres de droite est égal à 1 et 1'entier formé par le reste des

chiffres est égal à 8.

On constate que 1 + 8 = 9 = K, donc 9 est un nombre de KAPREKAR.

● Si K= 45 alors n =2 et K2 = 2025

L'entier formé par les n chiffres de droite est égal à 25 et l'entier formé par le reste des

chiffres est égal à 20.

On constate que 25 +20 = 45 = K, donc 45 est un nombre de KAPREKAR. .

● Si K=297 alors n = 3 et K2 = 88209

L'entier formé par les n chiffres de droite est égal à 209 et l'entier formé par le reste des

chiffres est égal à 88.

On constate que 209 + 88 = 297 = K, donc 297 est un nombre de KAPREKAR.

Travail demandé :

Ecrire un programme Pascal qui permet de déterminer tous les nombres de KAPREKAR

inférieurs ou égaux à 1000 en utilisant la méthode décrite ci-dessus.

Grille d’évaluation

Travail fourni Nombre

de points

Décomposition en modules utiles à la solution proposée (déclarations et appels)

Structures de données adéquates

Saisie et contrôle des données

Traitement avec les structures de contrôles adéquates

Compilation

4

2

3

8

3

25 mai 2010 à 8 h 30

mn

Page 4: éNoncés+corrections bac2010

Année Scolaire : 2011-2012 4 SC

Lycée Attarine Ariana 2012

Program P25Mai2010_8h_Version1;

uses wincrt;

{** Fonction qui vérifie si un entier***}

{** est de KAPREKAR ou non ***}

Function Kaprekar(K:LongInt):Boolean;

Var

ChK:String;

ChK_Carre:String;

n:Integer;

K_Carre:LongInt;

Droite,Gauche:LongInt;

Ch_Droite,Ch_Gauche:String;

e:Integer;

Begin

{*** Conversion de k en chaîne ChK pour... }

STR(K,ChK);

{*** Déterminer n=nombre de chiffre de K}

n:=Length(ChK);

{*** Calcul du carré de K=K_Carre}

K_Carre:=SQR(K);

{*** Conversion K_Carre en chaine ChK_Carre}

STR(K_Carre,ChK_Carre);

{*** Extraction de la partie droite de ChK_Carre }

Ch_Droite:=Copy(ChK_Carre, Length(ChK_Carre)-n+1 , n);

{*** Extraction de la partie Gauche de ChK_Carre }

Ch_Gauche:=Copy(ChK_Carre, 1 , Length(ChK_Carre)-n);

{*** Conversion de la partie droite en Entier }

VAL(Ch_Droite, Droite, e);

{*** Conversion de la partie gauche en Entier }

VAL(Ch_Gauche, Gauche, e);

{*** Renvoi du résultat TRUE ou FALSE }

Kaprekar:= K=Droite+Gauche;

{ou encore: IF (K=Droite+Gauche) THEN Kaprekar:= TRUE

ELSE Kaprekar:=FALSE;}

End;

{** Procédure qui parcourt les nombres ***}

{** de 1 à 1000 et vérifie pour chaque nombre *}

{** s'il est de kaprekar ou non ***}

{** les nombres de kaprekar seront afficher ***}

Procedure AfficherLesNombresDeKaprekar;

Var

i:Integer;

Begin

FOR i:=1 TO 1000 DO

Begin

IF kaprekar(i) THEN Writeln(i);

End;

End;

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

AfficherLesNombresDeKaprekar;

End.

Page 5: éNoncés+corrections bac2010

Année Scolaire : 2011-2012 4 SC

Lycée Attarine Ariana 2012

Program P25Mai2010_8h_Version2;

uses wincrt;

{*******************************************}

Function Kaprekar(K:LongInt; Diviseur:Integer):Boolean;

Var

K_Carre:LongInt;

Droite,Gauche:LongInt;

Begin

{*** Carré de K dans K_Carre ******}

K_Carre:=SQR(K);

{*** Extraction de la partie Droite ****}

Droite:=K_Carre MOD Diviseur;

{*** Extraction de la partie Gauche ****}

Gauche:=K_Carre DIV Diviseur;

{*** Renvoi du résultat ******}

Kaprekar:= K=Droite+Gauche;

End;

{*******************************************}

Procedure AfficherLesNombresDeKaprekar;

Var

i:Integer;

Begin

FOR i:=1 TO 1000 DO

Begin

Case i OF

1..9 : IF kaprekar(i,10) THEN Writeln(i);

10..99 : IF kaprekar(i,100) THEN Writeln(i);

100..999: IF kaprekar(i,1000) THEN Writeln(i);

1000 : IF kaprekar(i,10000) THEN Writeln(i);

End;

End;

End;

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

Begin

AfficherLesNombresDeKaprekar;

End.

Page 6: éNoncés+corrections bac2010

Année Scolaire : 2011-2012 4 SC

Lycée Attarine Ariana 2012

Page 7: éNoncés+corrections bac2010

Année Scolaire : 2011-2012 4 SC

Lycée Attarine Ariana 2012

Program P25Mai2010_15h_30mn;

uses wincrt;

Var

Ch:String;

{* Fonction qui vérifie si une chaîne

est composée seulement de lettres majuscules*}

Function Verif(Ch:String):Boolean;

Var i:Integer;

Begin

Repeat

i:=i+1;

Until (i=Length(Ch)) OR NOT (Ch[i] IN ['A'..'Z']);

Verif:= Ch[i] IN ['A'..'Z'];

{Ou encore...

IF Ch[i] IN ['A'..'Z'] THEN

Verif:=True

ELSE Verif:=False; }

End;

{**************************************}

Procedure SaisieDe_Ch(Var Ch : String);

Begin

Repeat

Write('Saisir une Chaîne: ');

Readln(Ch);

Until (Length(Ch)<>0) AND (Verif(Ch)=True);

End;

{**************************************}

Function Poids(Ch:String):Integer;

Var

i,P:Integer;

Begin

P:=0;

FOR i:=1 TO Length(Ch) Do

Begin

Case Ch[i] Of

'A' : P:=P+i*1;

'E' : P:=P+i*5;

'I' : P:=P+i*9;

'O' : P:=P+i*15;

'U' : P:=P+i*21;

'Y' : P:=P+i*25;

End;

End;

Poids:=P;

End;

{**************************************}

Begin

SaisieDe_Ch(Ch);

Write(Poids(Ch));

End.

Page 8: éNoncés+corrections bac2010

Année Scolaire : 2011-2012 4 SC

Lycée Attarine Ariana 2012

Page 9: éNoncés+corrections bac2010

Année Scolaire : 2011-2012 4 SC

Lycée Attarine Ariana 2012

Program P25Mai2010_15h_30mn;

uses wincrt;

{* === Fonction qui calcule la somme des puissances Kème des chiffres de X

--> X de 4 chiffres == *}

Function Puissance(X:LongInt;K:integer):LongInt;

Var U,D,C,M:Integer; {U:Unité, D:Dizaine, C:Centaine, M:Millier}

Begin

M:=X DIV 1000;

C:=X MOD 1000 DIV 100;

D:=X MOD 100 DIV 10;

U:=X MOD 10;

Case K OF {On peut aussi utiliser IF K=1 THEN...}

1 :Puissance:=M + C + D + U;

2 :Puissance:=M*M + C*C + D*D + U*U;

3 :Puissance:=M*M*M + C*C*C + D*D*D + U*U*U;

4 :Puissance:=M*M*M*M + C*C*C*C + D*D*D*D + U*U*U*U;

End;

End;

{* Fonction qui vérifie la relation décrite dans l'énoncé de l'examen*}

Function Verif(X:LongInt):Boolean;

Var

K:Integer;

Res:Longint;

Begin

K:=0;

Repeat

K:=K+1;

Res:=Puissance(X,K)

Until (Res=X) OR (K=5);

Verif:= Res=X; {Ou encore... IF Res=X THEN Verif:=True ELSE Verif:=False; }

End;

{**************************************}

Procedure Traitement;

Var i:Longint;

Begin

{On Parcourt tous les nombres à 4 chiffres}

FOR i:=1000 TO 9999 DO

IF Verif(i) =TRUE THEN Writeln(i);

End;

{**************************************}

Begin

Traitement;

End.

Page 10: éNoncés+corrections bac2010

Année Scolaire : 2011-2012 4 SC

Lycée Attarine Ariana 2012

Page 11: éNoncés+corrections bac2010

Année Scolaire : 2011-2012 4 SC

Lycée Attarine Ariana 2012

Program P26Mai2010_14h;

uses wincrt;

Type

Vecteur=Array[1..9] of Char;

Var

T:Vecteur;

N:Integer;

MOT:String;

{************************************************************}

Procedure Saisir_N(Var N:Integer);

Begin

Repeat

Write('N= ');

Readln(N);

Until (N>=5) AND (N<=9);

End;

{************************************************************}

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

Var

i:Integer;

Begin

For i:=1 To N Do

Begin

Repeat

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

Readln(T[i]);

Until (T[i] IN ['a'..'z']);

End;

End;

{****=== Fonction Qui Vérifie Si Une Ch est Composée ===*****}

{****=== Seulement De Lettres Alphabétiques Minuscules=******}

Function AlphaMinus(MOT:String):Boolean;

Var

i:integer;

Begin

i:=1;

While (MOT[i] in ['a'..'z']) AND (i<Length(MOT)) Do

Begin

i:=Succ(i); {ou i:=i+1}

End;

AlphaMinus:=MOT[i] in ['a'..'z'];

End;

Page 12: éNoncés+corrections bac2010

Année Scolaire : 2011-2012 4 SC

Lycée Attarine Ariana 2012

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

Procedure Saisir_MOT(Var MOT : String);

Begin

Repeat

Write('Saisir le Mot: ');

Readln(MOT);

Until (Length(MOT)IN [1..7]) AND (AlphaMinus(MOT));

End;

{******=== Procedure Traitement ===*******}

Procedure Traitement(T:Vecteur;N:integer;MOT:String);

Type

Position=Array['a'..'z'] of integer;

Var

Tp:Position; {Tp: Tableau indicé par des lettres minuscules

et qui contient les positions des lettres de T

pour les lettres apparaissants plus qu'une fois on maintient

la position de la première occurrence : regardez le 3ème

exemple de l'examen, pour le mot pascal la lettre 'a'

apparait 2 fois dans le mot et 2 fois dans le tableau (pos 2 et pos

8) mais dans le résultat, le prog affiche la pos 2 pour les 2 'a'}

i:integer;

j:Char; {compteur du tableau Tp}

Temp,Res:String;

Begin

{initialisation ds cases de Tp par des 0}

For j:='a' to 'z' do Tp[j]:=0;

{Remplissage de Tp par les positions des lettres de T}

For i:=1 to N Do

Begin

IF Tp[T[i]]=0 THEN {vérif si la case n'est pas encore remplie}

Tp[T[i]]:=i;

End;

{**************************************************************}

Res:='';

i:=0;

Repeat

i:=i+1;

STR(Tp[MOT[i]],temp);

Res:=Res+Temp;

Until (i=Length(MOT)) OR (Res[Length(Res)]='0');

{Affichage du résultat******}

IF Res[Length(Res)]<>'0' THEN

Write(Res)

ELSE Write('On ne peut pas former la chaîne à partir des car du tab');

End;

Begin

Saisir_N(N);

RemplirLeTableau(T,N);

Saisir_MOT(MOT);

Traitement(T,N,MOT);

End.