Vous êtes sur la page 1sur 9

TS informatiques option Bases de données INSFP de TIZI-

OUZOU

Algorithmique
Devoir du semestre 2
Durée 2hs

Problème :

Pour gérer les ventes dans un magasin, le responsable utilise les tableaux comme suit :
– Un tableau REF qui contient les références des articles. REF[i] représente la référence d’un article.
Sachant que la référence d’un article est une chaine de 3 caractères. Exemple A12 ,B04,A10
– Un tableau PRIX qui contient les prix des articles. PRIX[i] représente le prix de l’article REF[i].

Questions :

1- Ecrire un programme qui remplit les deux tableaux. Supposons que le magasin dispose de 100
articles.
2- Ecrire la séquence d’instructions qui permet d’afficher le menu déroulant suivant à l’utilisateur :

Gestion des ventes

A : Modifier le prix d’un article


B : Afficher le prix d’un article donné.
C : Calculer le prix total d’une commande.
D : Supprimer un article
E : Ajouter un article
F : Terminer

Votre choix (SVP) :

3- Ecrire la séquence d’instructions qui permet de modifier le prix d’un article connaissant sa
référence.

4- Ecrire la séquence d’instructions qui permet d’afficher le prix d’un article connaissant sa référence.

5- Ecrire la séquence d’instructions qui permet de calculer le prix total d’une commande. Voici un
exemple d’exécution :

Commande :
Entrez les références des articles commandés terminez la saisie par Z:
Référence : A12
Quantité : 10
Référence : A14
Quantité : 200
Référence : Z

Le montant de la commande est : ******


6- Ecrire la séquence d’instructions qui permet de supprimer un article connaissant sa référence. (le
suppression d’une référence entraine la suppression de son prix) . un article supprimé sa référence
est remplacée par ‘ ‘ (espace) et son prix par 0.

7- Ecrire la séquence d’instructions qui permet d’ajouter un article (ajouter sa référence et son prix)
sachant qu’on ne doit pas ajouter un article qui existe déjà.

Devoir d’Algorithmique S2 Page 1


Corrigé type :
1-
program gestion_vente;
uses wincrt;
Var REF : array [1..5] of string[3];(* une référence est sur 3 caractère*)
PRIX : array [1..5] of real;(* le prix est soit entier ou réel*)
(* les deux tableaux ont la même taille *)
i,qt:integer; terminer,found : boolean; choix:char;
Vref : string[3]; som:real;

Begin (* programme principal*)

(* 1- remplissage des tableau *)


(* remplissage du tableau REF *)
For i := 1 to 5 do
begin
write('Tapez la référence du ',i,' article: ');
readln(REF[i]);
end;
(* Remplissage du tableau PRIX*)
For i := 1 to 5 do
begin
write('Tapez le prix de l''aticle ', REF[i],': ');
readln(PRIX[i]);
end;
(***************************************************************)
(** le menu déroulant **)

Terminer := false;
While Not terminer do (* est équivalent à while terminer = false *)
Begin (* while*)
Clrscr; (* effacer l'écaran*)
Writeln;writeln;writeln;writeln; (* sauter des lignes*)
Writeln (' Gestion des ventes ');
writeln;writeln;writeln;
Writeln(' A : Modifier le prix d''un article');
Writeln(' B : Afficher le prix d''un article donné');
Writeln(' C : Calculer le prix total d''une commande');
Writeln(' D : Supprimer un article');
Writeln(' E : Ajouter un article');
writeln(' F : Afficher les article avec leurs prix');
Writeln(' G : Terminer');
writeln;writeln; writeln;
write (' Votre choix SVP: ');
(* je contrôle la saisie le choix doit être = à Aou B ou Cou D ou E ou F*)
repeat
readln(choix);
Until (upcase(choix) = 'A') or (upcase(choix) = 'B')or(upcase(choix) = 'C')
or (upcase(choix) = 'D')or (upcase(choix) = 'E')or(upcase(choix) = 'F');

Case upcase(choix) of
'A':Begin
end;
'B':begin
end;
'C':Begin
end;
'D':begin

Devoir d’Algorithmique S2 Page 2


end;
'E':Begin
'F':Begin
end;
end;
'G':Begin
terminer := true (*arreter la boucle*)
donewincrt;
end;
end;
end;(*while*)
end.(*programme principal*)
Jeu de test :

(****** Afficher pour chaque article son prix ********)


'F':Begin
clrscr;
Writeln;writeln;writeln;
writeln (' Liste des articles avec leurs prix:');
writeln;writeln;
Devoir d’Algorithmique S2 Page 3
writeln(' Référence Prix');
For i:= 1 to 5 do
writeln(' ',REF[i],' ',PRIX[i]:10:2);
writeln;writeln('Tapez une touche pour continuer');
readkey;
end;

(******************************************************************************)
(*modifier le prix d'un article *)
'A':Begin
clrscr;
writeln(' *** Modifier le prix d''un article ****');
writeln;writeln; (*sauter deux ligne*)
write(' Tapez la référence de l''article:');
readln(Vref);
(* je recherche d'abord l'article dans REF pour réccuperer l'indice avec*)
(* lequel je vais acceder au tableau PRIX et modifier le prix corespondant*)
found := false;
i := 1;
While (not found) and (i <= 5) do
if REF[i] = Vref then
found := true
else
i := i+1;
if not found then (* le recherche est négative*)
begin
writeln ('L''article n''existe pas. ');
readkey;
end
else (*la recherche est positive, l'article existe à l'indice i*)
begin
write(' Tapez le nouveau prix SVP puis validez: ');
readln(Prix[i]);
writeln;writeln;writeln;
writeln(' Le prix a été changé, tapez une touche pour continuer');
readkey;
end;
end;

Jeu d’essai :

Devoir d’Algorithmique S2 Page 4


(********************************************************************************)
(************** Afficher le prix d'un article donné **)
'B':begin
clrscr;
Writeln;writeln;writeln(' Afficher le prix d''un article');
Writeln;writeln;
Write(' Tapez la référence SVP: ');
readln(Vref);
(* je recherche d'abord l'existence de l'article *)
found := false;
i := 1;
While (not found) and (i <= 5) do
if REF[i] = Vref then
found := true
else
i := i+1;
if not found then (* le recherche est négative*)
begin
writeln ('L''article n''existe pas. ');
readkey;
end
else (*la recherche est positive, l'article existe à l'indice i*)
begin
writeln;writeln;
writeln(' Le prix de l''artcle est : ',PRIX[i]:10:2,' DA');
writeln;writeln;write('Tapez une touche pour continuer');
readkey;
end;
end;

Jeu d’essai:

Devoir d’Algorithmique S2 Page 5


(************** Supprimer un article ************************)
'D':begin
clrscr;
clrscr;
Writeln;writeln;writeln(' Supprimer un article');
Writeln;writeln;
Write(' Tapez la référence SVP: ');
readln(Vref);
(* je recherche d'abord l'existence de l'article *)
found := false;
i := 1;
While (not found) and (i <= 5) do
if REF[i] = Vref then
found := true
else
i := i+1;
if not found then (* le recherche est négative*)
begin
writeln ('L''article n''existe pas. ');
readkey;
end
else (*la recherche est positive, l'article existe à l'indice i*)
begin
writeln;writeln;
REF[i] := ' ';
Prix[i] := 0;
writeln;writeln;write('L''article a été supprimé. Tapez une touche pour continuer. ');
readkey;
end;
end;

Jeu d’essai

Devoir d’Algorithmique S2 Page 6


L’affichage du tableau donne

(**************** Ajouter un article **************)


'E':Begin
clrscr;
clrscr;
Writeln;writeln;writeln(' Ajouter un article');
Writeln;writeln;
Write(' Tapez la référence SVP: ');
readln(Vref);
(* je recherche d'abord l'existence de l'article *)
found := false;
i := 1;
While (not found) and (i <= 5) do
if REF[i] = Vref then
found := true
else
i := i+1;
if found then (* le recherche est positive*)
begin
writeln ('L''article existe déjà. Tapez une touche pour continuer ');
readkey;
end
else (*la recherche est négative, l'article n'existe pas*)
begin
(* je vais rechercher une case vide *)
i := 1;
While (REF[i] <> ' ') and (i <= 5) do
i := i +1;
(*soit je sort avec ref[i] = ' ' ou i = 6*)
if i = 6 then
begin
writeln;writeln('le Tableau est plein. Taper une touche pour continuer');
readkey
end
else
if ref[i] = ' ' then
begin
REF[i] := Vref;
Writeln;Writeln(' Taper son prix SVP: ');
readln(PRIX[i]);
writeln;writeln;write('L''article a été ajouté. Tapez une touche pour continuer. ');
readkey;
Devoir d’Algorithmique S2 Page 7
end;
end;
end;

Jeu d’essai

Soit l’affichage :

Après la suppression d’un élément soit l’article A03:

On ajoute un article :

A l’affichage :

Devoir d’Algorithmique S2 Page 8


(*************** le prix total d'une commande ******************)
'C':Begin
clrscr;
writeln(' Calcul du prix total d''une commande ');
writeln;writeln('Commande:');
writeln('Entrez les références des articles commandés et terminez par Z');
write(' Référence: ');
readln(vref); som := 0;
while vref <> 'Z' Do
begin
i := 1;
while REF[i] <> vref do (* on suppose que les références existent*)
i := i +1;
write(' Quantité: ');
readln(Qt);
som := som + PRIX[i] * qt;
write(' Référence: ');
readln(Vref);
end;
writeln;writeln;
writeln(' Le total de la commande est ',som:10:2,' DA');
writeln;
writeln('Tapez une touche pour revenir au menu principal');
readkey;

end;

Devoir d’Algorithmique S2 Page 9