Un client collectionne les images qu'il trouve dans les paquets de ses biscuits préférés pour gagner des
passes d’entrées gratuites, à un parc d’attraction. La collection doit comporter 20 images différentes
relatives à des personnages distincts de bandes dessinées.
On suppose que les images ont été disposées au hasard dans les paquets et que :
chaque paquet contient exactement une image de personnages de bandes dessinées,
un même personnage peut se retrouver dans plusieurs paquets.
Pour gagner ce voyage, le client achète une boîte contenant 50 paquets.
On donne l’algorithme du programme principal suivant où P représente un tableau contenant la collection
des personnages distincts que le client a pu collectionner, suite à l’ouverture des 50 paquets achetés, et C, le
nombre d’éléments de P.
0) Début Collection
1) Répéter
Ecrire ("Donner le nom du personnage trouvé dans le paquet n° 1 :")
Lire (P[1])
Jusqu’à (FN Valide (P[1]))
2) C←1
3) Pour i de 2 à 50 faire
Répéter
Ecrire ("Donner le nom du personnage trouvé dans le paquet n° ",i, ":")
Lire (Pers)
Jusqu’à (FN Valide (Pers))
Si (FN Chercher (Pers, P,C)=faux) Alors
C← C+1
P[C] ← Pers
FinSi
FinPour
4) Si (C = 20) Alors
Ecrire ("Vous avez gagné ")
Sinon
Ecrire (" Vous avez perdu")
FinSi
5) Fin Collection
Travail demandé :
Traduire l’algorithme Collection en un programme Pascal et ajouter les déclarations nécessaires.
Développer la fonction Valide permettant de valider une chaîne qui doit être non vide, commencer
par une majuscule et être formée uniquement de lettres non accentuées.
Développer la fonction Chercher qui permet de vérifier l’existence d’un personnage Pers dans le
tableau P.
Mettre les séquences 2), 3) et 4) sous forme de commentaire et réécrire ces trois séquences en
apportant les modifications nécessaires de façon à ce que le programme :
prenne en considération la possibilité de trouver 20 personnages distincts avant même de
terminer l’ouverture des 50 paquets,
dans le cas, où le client n’a pas réussi à collectionner 20 personnages, affiche le nombre de
personnages manquants pour gagner le concours.
Traduction en Pascal:
Program Collection;
Uses Wincrt;
Type
tab = Array[1..50] Of String;
Var
P: tab;
i,C : Integer;
pers: String;
Function Valide( ch:string):boolean;
Var
i:Integer;
ok:Boolean;
Begin
ok:=True;
if (Length(ch)=0) or (NOT(ch[1] in ['A'..'Z'])) then ok:=False
Else
Begin
i:=0;
Repeat
i:=i+1;
if Not(ch[i] in ['A'..'Z','a'..'z']) Then ok:=False;
until (ok=False) or (i=Length(ch));
end;
Valide:=ok;
end;
Function chercher (ch:String;T:tab;n:Integer):Boolean;
Var i:Integer;
trouve:boolean;
Begin
trouve:=False;
i:=0;
Repeat
i:=i+1;
if t[i]=ch then trouve:=True;
until (trouve) or (i=n);
chercher:=trouve;
end;
Begin
Repeat
Write('Donner le nom du personnage trouvé dans le paquet n°1 : ');
Readln(P[1]);
Until Valide(P[1]);
{
c := 1;
For i:=2 To 50 Do
Begin
Repeat
Write('Donner le nom du personnage trouvé dans le paquet n°' ,i,' : ');
Readln(Pers);
Until Valide(Pers);
If (Chercher(Pers,P,C)=False) Then
Begin
c := c+1;
P[C] := Pers;
End;
End;
If (c=20) Then Writeln('Vous avez gagné')
Else Writeln('Vous avez perdu');
}
c:=1; i:=1;
Repeat
i:=i+1;
Repeat
Write('Donner le nom du personnage trouvé dans le paquet n°' ,i,' : ');
Readln(Pers);
Until Valide(Pers);
If (Chercher(Pers,P,C)=False) Then
Begin
c := c+1;
P[C] := Pers;
End;
Until (i=50) or(c=20);
If (c=20) Then Writeln('Vous avez gagné')
Else Writeln('Vous avez perdu,Le nombre de personnages manquants pour gagner le concours est =', 20-c);
End.
Bac pratique 2018-Sujet 2:
La marque ‘ECOLO’, décide de faire des statistiques à propos de la consommation de ses produits par
les clients d’un espace commercial.
On se propose de créer une application informatique qui, pour un client donné ayant acheté N produits
(N ∈ [5,100]), permet de déterminer le nombre de produits achetés de cette marque.
On suppose que le nom d’un produit relatif à une marque donnée contient obligatoirement le nom de cette
marque.
Pour cela, on donne l’algorithme du programme principal suivant intitulé Achat où :
Nbp représente le nombre de produits achetés de la marque ‘ECOLO’,
Nomp le nom d’un produit qui doit être une chaine alphanumérique pouvant contenir des espaces
et de longueur maximale 20 caractères.
0) Début Achat
1) Ecrire ("Donner le nombre de produits achetés:")
2) Lire (N)
3) Nbp ← 0
4) Pour i de 1 à N faire
Ecrire ("Donner le nom du produit :")
Lire (Nomp)
Si (Pos (‘ECOLO’, Nomp) ≠0) Alors
Nbp ← Nbp+1
FinSi
FinPour
5) Ecrire ("Merci pour l’achat de ", Nbp , " produit(s) de la marque ECOLO")
6) Fin Achat
Travail demandé :
Traduire l’algorithme Achat en un programme Pascal et ajouter les déclarations nécessaires
Ajouter les contrôles nécessaires au programme, pour que :
N soit un entier de l’intervalle [5..100].
Nomp soit une chaine alphanumérique pouvant contenir des espaces et de longueur
maximale 20 caractères. (Le test de l’existence du nom de la marque dans le nom du
produit n’est pas demandé).
Transformer les séquences 3) et 4) en un module et ajouter les modifications nécessaires pour
déterminer le nombre de produits distincts de la marque ‘ECOLO’ parmi les N produits achetés
par un même client.
Transformer la séquence 5) pour afficher :
un message d’invitation à la consommation des produits de la marque ‘ECOLO’ au client
n’ayant acheté aucun produit de cette marque.
un message de remerciement au client ayant acheté au moins un produit de la marque avec,
en plus, un message d’invitation à devenir ambassadeur de la marque, si le client achète plus
de 5 produits distincts de cette marque.
Traduction en Pascal:
Program Achat;
Uses Wincrt;
Var
n,Nbp: Integer;
Function Verif( ch:String): Boolean;
Var
i: Integer;
ok: Boolean;
Begin
ok := True;
If (Length(ch)>20) Then ok := False
Else
Begin
i := 0;
Repeat
i := i+1;
If Not(ch[i] In ['A'..'Z','a'..'z',' ','0'..'9']) Then ok := False;
Until (ok=False) Or (i=Length(ch));
End;
Verif := ok;
End;
Function nombre(n:Integer): Integer;
Type
tab = Array[1..100] Of string;
Var
Nbp,i: Integer;
Nomp: string;
t: tab;
Function chercher (ch:String;T:tab;n:Integer): Boolean;
Var
i: Integer;
trouve: Boolean;
Begin
trouve := False;
i := 0;
Repeat
i := i+1;
If t[i]=ch Then trouve := True;
Until (trouve) Or (i=n);
chercher := trouve;
End;
Begin
Nbp := 0;
Repeat
write('Donner le nom du produit : ');
Readln(T[1]);
Until verif(T[1]);
If Pos('ECOLO',t[1])<>0 Then Nbp := Nbp+1;
For i:=2 To n Do
Begin
Repeat
write('Donner le nom du produit : ');
Readln(T[i]);
Until verif(T[i]);
If ( chercher(T[i], T,i-1)=False ) And (Pos('ECOLO', T[i])<>0 ) Then Nbp := Nbp+1;
End;
nombre := Nbp;
End;
Begin
Repeat
write('Donner le nombre de produits achetés: ');
Readln(N);
Until (N>=5) And (N<=100);
Nbp := nombre(n);
If Nbp=0 Then Writeln('On vous invite à consommez les produits ECOLO ')
Else
If nbp>=1 Then
Begin
Writeln('Merci pour l''achat de ', Nbp, ' produit(s) de la marque ECOLO ');
If nbp>5 Then Writeln('On vous invite à devenir ambassadeur de la marque');
End;
End.