TP n°1                                     DEUG MIAS-MASS S1

Exercice 1 : créer un programme qui affiche un message simple

Lancer l'éditeur XEMACS, avec la commande :

    editeur tp1exc1.pas

Saisir le programme suivant :
 
         BEGIN
              writeln('hi there!') ;
         END.

Sauvegarder ce programme (cliquer sur le menu File puis le sous-menu Save).

Pour compiler ce fichier on peut :
     - soit lancer dans une fenêtre xterm la commande   gpc tp1exc1.pas
     - soit utiliser dans xemacs la commande Tools/Compile du menu.

S'il y a des erreurs, la liste est affichée. Sinon un fichier a.out est créé. Pour lancer son exécution taper simplement dans un fenêtre xterm :

     a.out

Pour conserver ce fichier exécutable nous pouvons changer son nom :

     mv a.out hello

Maintenant il faudra taper  hello   pour exécuter notre programme.

Retourner à la fenêtre xemacs et modifier le programme pour qu'il affiche :

     Bonjour chez vous!

Sauvegarder ce nouveau programme sous le nom tp1exc1bis.pas (commande File/Save as) puis compiler (vérifier que la commande de compilation est bien : gpc tp1exc1bis.pas). Lancer l'exécution de l'exécutable a.out. Quitter l'éditeur (File/Exit xemacs) ; un nouvel éditeur sera ouvert pour chaque exercice (pour éviter les complications dues aux buffers multiples).


Exercice 2 : le jeu de piquet

Saisir et exécuter le programme PASCAL suivant. Conserver le programme source dans le fichier   tp1_piquet.pas
 
PROGRAM PIQUET;

VAR  jeu, compteur : integer ;
     nom1, nom2, nom : string[20] ;

BEGIN (* 0 *)

(* règle du jeu *)
writeln('Jeu du piquet (2 joueurs)') ;
writeln('Vous tapez un nombre entre 1 et 10 qui s''ajoute à un compteur.') ;
writeln('Le premier qui atteint 100 gagne') ;
writeln ;

(* saisie des noms des joueurs *)
write('Nom du premier joueur ? ') ;  readln(nom1) ;
write('Nom du deuxième joueur ? ') ; readln(nom2) ;
writeln ;

(* initialisation du compteur *)
compteur:=0 ;

(* déroulement du jeu *)
writeln('C''est ',nom1, ' qui commence') ;
while compteur<100 do
      begin (* 1 *)
      write('jeu de ',nom1) ;
      (* saisie avec contrôle de validité *)
      repeat (* 2 *)
            write(' (entre 1 et 10) ? ') ;
            readln(jeu) ;
            until (jeu>=1) and (jeu<=10) ; (* 2 *)
      compteur:=compteur+jeu ;
      writeln(' compteur : ',compteur) ;
      (* échange des noms *)
      nom:=nom1 ;  nom1:=nom2 ;  nom2:=nom ;
      end ; (* 1 *)
(* ici compteur>=100 : affichage du gagnant *)
if compteur>=100
      then writeln('C''est ',nom2,' qui a gagné')
      else writeln('C''est ',nom1,' qui a gagné') ;
END. (* 0 *) 
 

Une facilité de l'éditeur xemacs : dans le menu, la commande Edit/Goto line permet d'aller à la ligne de texte souhaitée.


Exercice 3 :  le jeu des 7 erreurs

Pour ce jeu, on aura intérêt à utiliser les possibilités de copie de blocs de l'éditeur :
-1- Sélectionner avec la souris la zone de texte à copier
-5- Cliquer (bouton de gauche) sur l'icône Copy
-6- Placer le curseur au point de destination de la copie
-7- Cliquer sur l'icône Paste.

Saisir et exécuter le programme PASCAL suivant. Conserver le programme source dans le fichier tp1_7erreurs.pas
 
PROGRAM  JEU_DES_7_ERREURS;

VAR a,b,c : integer;
    x,y : real;
    test1,test2 : boolean;
    rep : char;
    juste,faux : integer;
    nom : string[20];

BEGIN
randomize;
write('quel est votre nom ? '); readln(nom);
juste:=0; faux:=0;
a:=random(4)+1; b:=random(4)+1;
c:=2;

writeln('épreuve numéro 1 : ');
write(a,'+',b,'/',c,'='); readln(x);
y:=a+b/c;
if x = y
   then begin writeln('oui'); juste:=juste+1; end
   else begin writeln('non'); faux:=faux+1; end;
writeln('la bonne réponse est : ',y);
writeln;

writeln('épreuve numéro 2 : ');
write(a,'/',b,'+',c,'='); readln(x);
y:=a/b+c;
if x = y
   then begin writeln('oui'); juste:=juste+1; end
   else begin writeln('non'); faux:=faux+1; end;
writeln('la bonne réponse est : ',y);
writeln;

writeln('épreuve numéro 3 : ');
write(a,'*',b,'/',c,'='); readln(x);
y:=a*b/c;
if x = y
   then begin writeln('oui'); juste:=juste+1; end
   else begin writeln('non'); faux:=faux+1; end;
writeln('la bonne réponse est : ',y);
writeln;

writeln('épreuve numéro 4 : ');
write(a,'/',b,'*',c,'='); readln(x);
y:=a/b*c;
if x = y
   then begin writeln('oui'); juste:=juste+1; end
   else begin writeln('non'); faux:=faux+1; end;
writeln('la bonne réponse est : ',y);
writeln;

writeln('épreuve numéro 5 ( répondre par v ou f ) : ');
write('not (',a,'>',b,') and (',c,'<',a*b,') = '); readln(rep);
test1 := not (a>b) and (c<a*b);
test2 := (rep = 'v') or (rep = 'V');
if test1 = test2
   then begin writeln('oui'); juste:=juste+1; end
   else begin writeln('non'); faux:=faux+1; end;
writeln('la bonne réponse est : ',test1);
writeln;

writeln('épreuve numéro 6 ( répondre par v ou f ) : ');
write('not ((',a,'>',b,') and (',c,'<',a*b,')) = '); readln(rep);
test1 := not ((a>b) and (c<a*b));
test2 := (rep = 'v') or (rep = 'V');
if test1 = test2
   then begin writeln('oui'); juste:=juste+1; end
   else begin writeln('non'); faux:=faux+1; end;
writeln('la bonne réponse est : ',test1);
writeln;

writeln('épreuve numéro 7 ( répondre par v ou f ) : ');
write('not ((',a,'>',b,') or (',c,'<',a*b,')) = '); readln(rep);
test1 := not ((a>b) or (c<a*b));
test2 := (rep = 'v') or (rep = 'V');
if test1 = test2
   then begin writeln('oui'); juste:=juste+1; end
   else begin writeln('non'); faux:=faux+1; end;
writeln('la bonne réponse est : ',test1);
writeln;

writeln('cher ',nom);
writeln('vous avez ',juste,' réponses justes');
writeln('et ',faux,' réponses fausses');
write('c''est ');
if juste > faux
   then writeln('bien')
   else writeln('mal');
writeln;
END.


Exercice 4 : pour aller plus loin

Pour ceux qui sont déja familiarisés avec la saisie de texte, transformer le Jeu de Piquet afin que le premier arrivé à 199 gagne, et ensuite afin que le premier arrivé à 100 perde. On peut ensuite programmer d'autres variantes à chacun des deux jeux...