Vous êtes sur la page 1sur 10

Corrections proposées par Mr Ben Rhaiem Firas Lycée Pilote Gafsa

Propositions de correction
Bac Pratique Informatique
4ème Scientifiques 28 Mai 2019

Sujet N°3 (de 11h00 à 12h00)

Program Plagiat1;
Uses wincrt;
Var
T1 , T2 : String;
Nbc : integer;

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

Procedure Saisir (Var CH : String);


Var
i: integer;
Begin
Repeat
Write ('Entrer une chaîne de caractères : ');
Readln (CH);
i:=0;
Repeat
i:= i + 1;
Until Not ( Upcase(CH[i]) IN ['A'..'Z',' '] ) Or (i=Length(CH) - 1);
Until (Upcase(CH[i]) IN ['A'..'Z',' ']) And (Length(CH) <= 200) And (CH[1] IN ['A'..'Z'])
And (CH[Length(CH)] = '.') And (CH[Length(CH)-1]<>' ') And (Pos( '˽˽' , CH) = 0);
End;

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

Function Nbmots (CH : String) : integer;


Var
i : integer;

Devoirs et examens sur : www.Kiteb.net


Begin
Nbmots := 1;
For i:=1 To Length(CH) Do
IF CH[i] = ' ' Then
Nbmots := Nbmots + 1;
End;
Corrections proposées par Mr Ben Rhaiem Firas Lycée Pilote Gafsa

Function Commun (CH1 , CH2 : String) : integer;


Var
NB , P : integer;
Begin
NB :=0 ;
P := Pos ( ' ' , CH2);
While P<>0 Do
Begin
IF Pos (Copy (CH2 , 1 , P-1) , CH1) <> 0 Then
NB := NB + 1;
Delete (CH2 , 1 , p);
P := Pos ( ' ' , CH2);
End;
Delete (CH2 , Length(CH2) , 1);
IF Pos (CH2 , CH1) <> 0 Then
NB := NB + 1;
Commun := NB;
End;

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

BEGIN
Repeat
Saisir(T1);
Saisir(T2);
Until Nbmots (T1) = Nbmots (T2);
Nbc := Commun (T1,T2);
IF Nbc > Nbmots(T2) Div 2 Then
Writeln ('Le texte testé est plagié. Le nombre de mots communs aux deux textes est égal à ' ,

Devoirs et examens sur : www.Kiteb.net


Commun (T1,T2) , ' dépassant ainsi la moitié du nombre qui est ', Nbmots (T2) Div 2)
Else
Writeln ('Le texte testé n''est pas plagié');
END.
Corrections proposées par Mr Ben Rhaiem Firas Lycée Pilote Gafsa

Propositions de correction
Bac Pratique Informatique
4ème Scientifiques 28 Mai 2019

Sujet N°4 (de 12h30 à 13h30)

Program Fidelite1;
Uses wincrt;
Type
Tab = Array [1..30] of String[10];
Var
TA : Tab;
N : integer;

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

Procedure Saisir (Var N : integer);


Begin
Repeat
Write('Donner le nombre des adhérants :');
Readln(N);
Until N IN [5..30];
End;

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

Function Verif (CH : String) : Boolean;


Var
A , M , e : integer;
Begin
Val(Copy(CH,2,4),A,e);
Val(Copy(CH,6,2),M,e);
Verif:= (CH[1] IN ['A','J','E']) And (A >= 2000) And (A <= 2019) And (M IN [1..12])

Devoirs et examens sur : www.Kiteb.net


And (Length(CH)=10);
End;

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

Function Existe (CH : String; TA : Tab ; N : integer) : Boolean;


Var
i : integer;
Begin
i:=0;
Repeat
i:=i+1;
Until (Copy (TA[i],8,3)=CH) OR (i = N);
Existe := (Copy (TA[i],8,3) = CH);
End;
Corrections proposées par Mr Ben Rhaiem Firas Lycée Pilote Gafsa

Procedure Remplir (Var TA : Tab ; N : integer);


Var
i : integer;
Begin
Repeat
Write('Donner le numéro d''adhérant N° 1 : ');
Readln(TA[1]);
Until Verif(TA[1]);
For i:=2 To N Do
Begin
Repeat
Write('Donner le numéro d''adhérent N° ',i,' : ');
Readln(TA[i]);
Until Verif(TA[i]) And NOT ( Existe (Copy(TA[i] , 8 , 3) , TA , i-1) );
End;
End;

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

Procedure Bonus (TA : Tab ; N : integer);


Var
i , A , M , e , Bon : integer;
Cat : char;
Begin
Repeat
Write('Entrer une catégorie d''adhérents : ');
Readln (Cat);
Until Cat IN ['A' , 'J' , 'E'];
For i:= 1 To N Do
Begin
Val(Copy(TA[i],2,4),A,e);
IF (TA[i][1] = Cat) And (2019-A>=5) Then
Begin

Devoirs et examens sur : www.Kiteb.net


Val (Copy(TA[i],6,2),M,e);
Bon:= (2019 - A) * 12 + (5-M);
Writeln ('L''adhérent N° ',Copy(TA[i],8,3),' à gagné un Bonus de ',Bon,' heures');
End;
End;
End;

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

BEGIN
Saisir (N);
Remplir (TA , N);
Bonus (TA , N);
END.
Corrections proposées par Mr Ben Rhaiem Firas Lycée Pilote Gafsa

Propositions de correction
Bac Pratique Informatique
4ème Scientifiques 28 Mai 2019

Sujet N°5 (de 14h00 à 15h00)

Program HMiroir1;
Uses wincrt;
Type
Tab = Array [1..20] of String[30];
Var
NP , HN : Tab;
N : integer;

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

Procedure Saisir (Var N : integer);


Begin
Repeat
Write('Donner le nombre de nouveau-nés :');
Readln(N);
Until N IN [3..20];
End;

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

Procedure Remplissage (Var NP , HN : Tab ; N : integer);


Var
i , HH , MM , e : integer;
Begin
For i:=1 To N Do
Begin
Repeat
Write ('Donner le nom et le prénom du nouveau-né N° ',i,' : ');

Devoirs et examens sur : www.Kiteb.net


Readln (NP[i]);
Until (NP[i][1] IN ['A'..'Z']) And (Length(NP[i])<=30);
End;
For i:=1 to N do
Begin
Repeat
Write ('Donner l''heure de naissance du nouveau-né N° ',i,' : ');
Readln (HN[i]);
Val(Copy(HN[i] , 1 , 2) , HH , e);
Val(Copy(HN[i] , 4 , 2) , MM , e);
Until (HH IN [0..23]) And (MM IN [0..59]) And (HN[i][3] = ':') And (Length(HN[i])=5);
End;
End;
Corrections proposées par Mr Ben Rhaiem Firas Lycée Pilote Gafsa

Procedure Affichage (NP , HN : Tab ; N : integer);


Var
i , NBdou , NBtrip , NBinv : integer;
Begin
NBdou:=0;
NBtrip:=0;
NBinv:=0;
For i:= 1 To N Do
Begin
IF (HN[i][1] + HN[i][2] = HN[i][4] + HN[i][5]) Then
Begin
NBdou := NBdou + 1;
Writeln (NP[i],' : heure miroir doublée');
End;
IF ((HN[i][1] = HN[i][2]) And (HN[i][2] = HN[i][4])) OR
((HN[i][2] = HN[i][4]) And (HN[i][4] = HN[i][5])) Then
Begin
NBtrip := NBtrip + 1;
Writeln (NP[i],' : heure miroir triplée');
End;
IF (HN[i][1] + HN[i][2] = HN[i][5] + HN[i][4]) Then
Begin
NBinv := NBinv + 1;
Writeln(NP[i],' : heure miroir inversée');
End;
End;
Writeln ('Le nombre des nouveau-nés ayant l''heure de naissance miroir doublée est ',NBdou);
Writeln ('Le nombre des nouveau-nés ayant l''heure de naissance miroir triplée est ',NBtrip);
Writeln ('Le nombre des nouveau-nés ayant l''heure de naissance miroir inversée est ',NBinv);
End;

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

Devoirs et examens sur : www.Kiteb.net


BEGIN
Saisir (N);
Remplissage (NP , HN , N);
Affichage (NP , HN , N);
END.
Corrections proposées par Mr Ben Rhaiem Firas Lycée Pilote Gafsa

Propositions de correction
Bac Pratique Informatique
4ème Scientifiques 28 Mai 2019

Sujet N°1 (de 8h00 à 9h00)


Program Nomination;
Uses wincrt;
Type
Tab = Array [1..20] of String;
Var
N : integer;
Nom : Tab;
{*********************************************************************************}
Procedure Saisie (Var N : integer);
Begin
Repeat
Write('Donner le nombre de produits : ');
Readln(N);
Until N IN [3..20];
End;
{*********************************************************************************}
Function Valide (CH : String) : Boolean;
Var
i: integer;
Begin
i:=0;
Repeat
i:= i + 1;
Until Not(CH[i] IN ['A'..'Z']) OR (i=Length(CH));
Valide:= (CH[i] IN ['A'..'Z']) And (length(CH)=10);
End;
{*********************************************************************************}
Procedure Remplir (Var Nom : Tab; N : integer);
Var
i : integer;

Devoirs et examens sur : www.Kiteb.net


Begin
For i:=1 to N do
Begin
Repeat
Write('Donner le nom du produit N° ',i,':');
Readln(Nom[i]);
Until Valide (Nom[i]);
End;
End;
Corrections proposées par Mr Ben Rhaiem Firas Lycée Pilote Gafsa

Procedure Spirale (Nom : Tab ; N: integer);


Var
CH , CH2 , Temp : String;
P , i , D , G : integer;
TP : Tab;
{*********************************}
Procedure Affichage (TP : Tab; N : integer);
Var
i : integer;
Begin
Writeln('La chaîne CH est ',CH);
Writeln('Les N propositions à utiliser sont :');
For i:=1 To N Do
Write(TP[i],'|');
End;
Begin
Repeat
Write('Donner P : ');
Readln(P);
Until P IN [1..10];
CH:='';
For i:=1 To N Do
CH:=CH + Nom[i][P];
TP[1]:=CH;
CH2:=CH;
For i:=2 To N Do
Begin
Temp := '';
D := Length(CH);
G := 1;
While G < D DO
Begin
Temp:=Temp+CH2[D]+CH2[G];
D:=D-1;

Devoirs et examens sur : www.Kiteb.net


G:=G+1;
End;
IF Length(CH2) Mod 2 <> 0 Then
Temp:=Temp+CH2[Length(CH2) DIV 2 + 1];
TP[i]:=Temp;
CH2:=Temp;
End;
Affichage (TP,N);
End;
{*********************************************************************************}
BEGIN
Saisie (N);
Remplir (Nom,N);
Spirale (Nom,N);
END.
Corrections proposées par Mr Ben Rhaiem Firas Lycée Pilote Gafsa

Propositions de correction
Bac Pratique Informatique
4ème Scientifiques 28 Mai 2019

Sujet N°2 (de 9h30 à 10h30)

Program TirArc1;
Uses wincrt;
Type
Tab = Array [1..20] of String[30];
Tabscore = Array [1..30] of Integer;
Var
N : integer;
A : Tab;
{*********************************************************************************}
Function Alpha (CH : String) : Boolean;
Var
i: integer;
Begin
i:=0;
Repeat
i:= i + 1;
Until Not ( Upcase(CH[i]) IN ['A'..'Z',' '] ) Or (i=Length(CH));
Alpha:= (Upcase(CH[i]) IN ['A'..'Z',' ']) And (Length(CH)<=30);
End;
{*********************************************************************************}
Procedure Remplir (Var A : Tab ; N : integer);
Var
i : integer;
Begin
For i:=1 to N do
Begin
Repeat
Write('Donner le nom du joueur N° ',i,':');
Readln(A[i]);

Devoirs et examens sur : www.Kiteb.net


Until Alpha(A[i]);
End;
End;
Corrections proposées par Mr Ben Rhaiem Firas Lycée Pilote Gafsa

Procedure Tri_a_bulle (Var A : Tab ; Var TS : Tabscore ; N : integer);


Var i , Aux1 : integer;
Aux2 : String;
Echange : Boolean;
Begin
Repeat
Echange := False;
For i:=1 To N-1 Do
Begin
IF TS[i] < TS[i+1] Then
Begin
Echange := True;
Aux1 := TS[i];
TS[i]:= TS[i+1];
TS[i+1] := Aux1;
Aux2 := A[i];
A[i]:= A[i+1];
A[i+1] := Aux2;
End;
End;
Until Echange=False;
End;
{*********************************************************************************}
Procedure Score (A : Tab ; N: integer);
Var i , j , essai : integer;
TS : Tabscore;
Begin
For i:=1 To N Do
Begin
TS[i]:=0;
For j:=1 To 3 Do
Begin
Repeat
Write('Donner le résultat de l''essai N° ',j,' du joueur N° ',i,' : ');

Devoirs et examens sur : www.Kiteb.net


Readln(essai);
Until essai IN [1..10];
TS[i] := TS[i] + essai;
End;
End;
Tri_a_bulle(A,TS,N);
For i:=1 To N Do
Writeln(A[i],' avec un score de ',TS[i]);
End;
{*********************************************************************************}
BEGIN
Repeat
Write ('Donner le nombre de joueurs : ');
Readln (N);
Until N IN [2..20];
Remplir (A,N);
Score (A,N);
END.

Vous aimerez peut-être aussi