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 cidessus. 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 cidessus). 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 cidessous 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