TP n°2 : expressions, affectation, entrées/sorties                    INFORMATIQUE     DEUG MIAS+MASS S1     2001-2002

Exercice 1 : Taper et exécuter le programme suivant.
 
program TP2exc1 ;
VAR x,y :  real;
BEGIN
   write('x= '); readln(x);
   write('y= '); readln(y);
   x:=x+y; y:=x-y; x:=x-y;
   writeln('après traitement :');
   writeln('x=',x,' y=',y);
END.

1) Que fait ce programme ? pourquoi ?
2) Modifier le pour obtenir un affichage sur le modèle suivant:
 
x = 5.6958
y = -12.436
                        x       y
avant traitement :     5.7   -12.4
après traitement :   -12.4    5.7

Exercice 2 : Taper et exécuter le programme suivant.
 
program tp2exc2;
CONST slash = '/' ;
      antislash = '\' ;
      barre = '|' ;
      repere = '12345678901234567890' ;
VAR s : string[11] ;
    x, taux : real ;
BEGIN
taux:=6.55957;
writeln('repère:') ;
s:=repere ;
writeln(s) ;
writeln ;
writeln('  VVVVVVV') ;
writeln(' VVVVVVVVV') ;
writeln(barre:2, '-':2, '-':4, barre:2) ;
writeln(barre:2, 'o':2, 'o':4, barre:2) ;
writeln('C', barre, barre:4, barre:4, 'D') ;
writeln(barre:2, '___':5, barre:3) ;
writeln(barre:2, antislash:3, slash:2, barre:3) ;
writeln(antislash:3, '__'+barre+'__', slash) ;
writeln(barre:6) ;
x:=36 ;
write('Je dis : ', x, ' francs c''est ') ;
writeln((x/taux), ' euro et') ;
x:=4 ;
writeln(x,' euro c''est ', (x*taux), 'francs.') ;
writeln ; writeln(repere) ;
END.

1) D'où vient l'anomalie dans l'affichage de S ?
2) Compléter ce programme pour que les valeurs en francs et euros soient affichées avec une précision de deux chiffres après la virgule.

Exercice 3 : Ecrire un programme qui édite les tables de vérité sous la forme :
 
     Tables de vérité
  P       Q     P et Q   P ou Q  P=>Q   P<=>Q
 TRUE    TRUE    TRUE    TRUE    TRUE    TRUE
 TRUE   FALSE     ...                     ...
FALSE    TRUE
FALSE   FALSE     ...                     ...
Rappels : P=>Q est logiquement équivalent à (Q ou nonP),
               P<=> est logiquement équivalent à (P=>Q et Q=>P)

Exercice 4 : Taper le programme suivant :
 
program TP2exc4 ;
VAR x : real ;
    m,n : integer ;
    s : string[9] ;
BEGIN
write('x=? ') ; readln(x) ;
m:=round(x);
n:=trunc(x) ;
writeln('round(x)=',m,' et trunc(x)=',n) ;
if (m=n) 
   then s:='ca marche'
   else s:='ca marche pas' ;
writeln('round(x)=trunc(x)? '+s) ;
writeln ;
writeln('trunc(x)+frac(x)=x is ',(trunc(x)+frac(x)=x)) ;
END.

Exécuter avec 0.1234E+3, avec 0.456E+2, avec 6.5, etc.
Quel est le problème ? Corriger.

Exercice 5 : Ecrire un programme lisant un temps T en secondes et le transformant en heures, minutes et secondes.

     exemple : T=12513  donnera  3 h 28 mn 33 s.


Exercice 6 : Ecrire un programme qui :
     - saisit au clavier une heure de départ (en heures, minutes, secondes) et un temps de trajet (h, mn, s),
     - calcule l'heure d'arrivée (h,mn,s) le même jour ou un jour suivant,
     - affiche le résultat sous la forme :

<<heure d'arrivée :>>
<<même jour : ...h ...mn ...s>>          ou          <<jour+... : ...h ...mn ...s>>

Rappels :
writeln(nom:i);
affiche la variable ou constante nom sur une largeur d'au moins i, en rajoutant au besoin des espaces à gauche.
writeln(nombre:i:k);
affiche la variable ou constante REELLE nombre sur une largeur i, avec exactement k chiffres après la virgule.