AP1 TP7 – Procédures : correction

Transcription

AP1 TP7 – Procédures : correction
AP1
Rédiger un programme principal qui demande à l'utilisateur son prénom et son genre, et qui affiche un message de bienvenue par l'intermédiaire de la procédure écrite ci­dessus.
TP7 – Procédures : correction
PROGRAM poli;
Les procédures en Pascal
PROCEDURE Bienvenue (nom : string; sexe : char);
BEGIN
if (sexe = 'F') then
writeln('Bonjour ',nom,', que vous êtes belle')
else
writeln('Bonjour ',nom,', que vous êtes beau');
END;
Exemple : une procédure Carre et son appel depuis le programme principal.
PROGRAM Mise_au_carre;
{ Carre(val) : affiche val au carré }
PROCEDURE Carre(val:integer);
VAR res : integer;
{ Variable locale à la procédure Carre }
BEGIN
res:=val*val;
writeln(val,' élevé au carré vaut ',res);
END;
{ programme principal }
VAR ch : string;
c : char;
BEGIN
readln(ch);
readln(c);
Bienvenue(ch,c);
END.
{ Programme principal }
VAR i:integer;
{ Variables du programme principal }
BEGIN
readln(i);
Carre(i);
{ Appel de la procédure Carre }
END.
•
•
•
•
Exercice 2 – Division Euclidienne
Les mots en gras sont les mots clés du langage Pascal
Le mot clé PROCEDURE débute une procédure. Derrière ce mot vient le nom de la procédure et ses éventuels paramètres.
Ensuite, le mot clé VAR introduit les variables locales à la procédure.
Enfin, BEGIN et END; encadrent le code source de la procédure.
Attention : en Pascal, les variables du programme principal sont globales (c'est le cas de la variable i dans l'exemple ci­dessus).
Passage par valeur ou par adresse. Pour passer un paramètre par adresse, il faut précéder son nom par le mot clé var. Si var est absent, le passage est réalisé par valeur.
Exercice 1 – « Tout flatteur vit aux dépens... » - Jean de la Fontaine, 1668
Ecrire une procédure qui prend en paramètre un prénom et un genre ('F' ou 'M'), et qui affiche le message suivant :
•
« Bonjour <prénom>, que vous êtes beau » s'il s'agit d'un homme
•
« Bonjour <prénom>, que vous êtes belle » s'il s'agit d'une femme
d’Amiens,
département
Informatique,
Par exemple : 30 divisé par 7 égal 4, reste 2 → le quotient est 4, le reste est 2.
Tester cette procédure dans le programme principal. Les nombres à diviser sont saisis par l'utilisateur. Le quotient et le reste sont affichés dans le programme principal.
Indication : se rappeler des opérateurs div et mod en Pascal.
PROGRAM division_euclidienne;
PROCEDURE DiviEuclid (x : integer; y : integer; var q : integer; var r : integer);
BEGIN
q:=x div y;
r:=x mod y;
END;
PROCEDURE Exemple(a:integer ; var b : real);
VAR …
{ a : passage par valeur }
BEGIN
{ b : passage par adresse }
...
END;
I.U.T.
Ecrire une procédure qui prend en paramètre deux entiers et qui fournit au programme appelant le quotient et le reste de la division euclidienne de ces deux entiers.
année
VAR a, b, quot, rest : integer;
BEGIN
readln(a);
readln(b);
DiviEuclid(a, b, quot, rest);
writeln('Pour a=',a,' et b=',b,', le quotient vaut ',quot,' et le reste vaut',rest);
END.
Notez le passage par adresse afin de récupérer le quotient et le reste dans le programme appelant.
universitaire
2013/2014

AP1
-
algorithmique

TP7
-
page
1/2
Exercice 3 – La terrifiante potion magique de Gargamel
L'infâme sorcier Gargamel a mis au point une potion magique à base d'hellébore fétide qui change la couleur des Schtroumpfs : ils perdent leur couleur bleue pour prendre celle désignée par le terrible magicien. Cette terrifiante potion possède néanmoins un inconvénient : elle ne produit ses effets que sur les Schtroumpfs de sexe masculin.
1.
2.
3.
4.
Concevoir une structure permettant de modéliser un Schtroumpf.
Rédiger une procédure Gargamel prenant en paramètre un Schtroumpf et une couleur, et transformant le Schtroumpf si cela est possible.
Rédiger une procédure Affiche qui affiche les caractéristiques du Schtroumpf passé en paramètre.
Rédiger le programme principal simulant une première attaque contre le Schtroumpf Grognon et une deuxième attaque contre la Schtroumpfette. On donne ci­dessous un exemple d'exécution de ce programme :
$ ./schtroumpf
-> Grognon : genre=M, couleur=bleu
Attaque potion jaune sur Grognon !
-> Grognon : genre=M, couleur=jaune
PROCEDURE Gargamel(var sch : Schtroumpf; couleur : string);
begin
writeln('Attaque sur ',sch.nom,' : couleur ',couleur);
if sch.genre='M' then
sch.couleur:=couleur;
end;
{ Programme principal }
VAR
sch1, sch2: Schtroumpf;
begin
{ creation du schtroumpf grognon }
sch1.nom:='Grognon';
sch1.genre:='M';
sch1.couleur:='bleu';
{ creation de la schtroumpfette }
sch2.nom:='Schtroumpfette';
sch2.genre:='F';
sch2.couleur:='bleu';
-> Schtroumpfette : genre=F, couleur=bleu
Attaque potion vert sur Schtroumpfette !
-> Schtroumpfette : genre=F, couleur=bleu
{ Attaque potion jaune sur le schtroumpf grognon }
Affiche(sch1);
Gargamel(sch1, 'jaune');
Affiche(sch1);
$
{ Attaque potion jaune sur la schtroumpfette }
Affiche(sch2);
Gargamel(sch2, 'vert');
Affiche(sch2);
end.
PROGRAM Potion_Gargamel;
TYPE Schtroumpf = record
nom : string;
genre : char;
couleur : string;
end;
PROCEDURE Affiche(sch : Schtroumpf);
begin
writeln('-> ',sch.nom,' : genre=',sch.genre,', couleur=',
sch.couleur);
end;
I.U.T.
d’Amiens,
département
Informatique,
année
universitaire
2013/2014

AP1
-
algorithmique

TP7
-
page
2/2