(* Une solution du TP2
octobre 2000 *)
(***************************************)
(* Exercice 1
Ce programme calcule la moyenne de x et y
sans utiliser une variable intermédiaire.
*)
(***************************************)
PROGRAM TP2exc2 ;
USES crt ;
VAR x, y : real ;
BEGIN
clrscr ;
write('x= ') ; readln(x) ;
write('y= ') ; readln(y) ;
(* la ligne suivante a été rajoutée *)
writeln('avant traitement :') ; writeln('x= ', x:8:2, ' y= ', y:8:2) ;
x:=x+y ; y:=x-y ; x:=x-y ;
(* la ligne suivante a été modifiée *)
writeln('après traitement :') ; writeln('x= ', x:8:2, 'y= ', y:8:2)
;
readln ;
END.
(********************************)
PROGRAM TP2exc3 ;
BEGIN
Writeln('P':8, 'Q':8, 'P et Q':8, 'P ou Q':8, P => Q':8, 'P <=> Q':8)
;
P:=true ; Q:=true ;
writeln(P:8, Q:8, (P and Q):8, (P or Q):8, (Q or not P):8, ((Q or not P)
and (P or not Q)):8) ;
Q:=false ;
writeln(P:8, Q:8, (P and Q):8, (P or Q):8, (Q or not P):8, ((Q or not P)
and (P or not Q)):8) ;
P:=false ;
writeln(P:8, Q:8, (P and Q):8, (P or Q):8, (Q or not P):8, ((Q or not P)
and (P or not Q)):8) ;
Q:=true ;
writeln(P:8, Q:8, (P and Q):8, (P or Q):8, (Q or not P):8, ((Q or not P)
and (P or not Q)):8) ;
END.
(********************************)
(* Exercice 4
Remarquons tout d'abord que s est
déclarée comme une chaîne de 10 caractères.
L'affectation s:='ça marche pas' tronquera
la chaîne de 14 caractères en ne conservant
que les 10 premiers caractères. Par conséquent,
quel que soit le résultat du test (n=m),
la variable s contiendra toujours 'ça marche'
après l'affectation.
La déclaration modifiée
s : string[14]; permet de voir la différence entre TRUNC
et
ROUND :
TRUNC(x) supprime la partie fractionnaire
du nombre réel x, alors que
ROUND(x) réalise l'arrondi classique
(entier au dessus à partir de *.5, au dessous sinon). *)
(********************************)
PROGRAM TP2exc5 ;
Var T, H, M, S : integer ;
BEGIN
repeat
write('temps en secondes (valeurs entières) ?
') ; readln(T) ;
until (T>=0) ;
S:=T mod 60 ;
M:=(T div 60) mod 60 ;
H:=(T div 3600) ;
writeln('temps : ', H, 'heures ', M, 'minutes ', S, 'secondes.') ;
END.
(********************************)
PROGRAM TP2exc6 ;
VAR HeureDepart, MinuteDepart, SecondeDepart : integer ;
HeureTrajet,
MinuteTrajet, SecondeTrajet : integer ;
HeureArrivee,
MinuteArrivee, SecondeArrivee : integer ;
JourArrivee
: integer ;
BEGIN
(* saisie heure de départ *)
writeln('Depart :') ;
write('heure ? ') ; readln(HeureDepart) ;
write('minutes ? ') ; readln(MinuteDepart) ;
write('secondes ? ') ; readln(SecondeDepart) ;
(* saisie durée du trajet *)
writeln('Durée du trajet :') ;
write('heure ? ') ; readln(HeureTrajet) ;
write('minutes ? ') ; readln(MinuteTrajet) ;
write('secondes ? ') ; readln(SecondeTrajet) ;
(* calcul de l'heure d'arrivée *)
SecondeArrivee:=SecondeDepart+SecondeTrajet ;
MinuteArrivee:=MinuteDepart+MinuteTrajet+(SecondeArrivee div 60) ;
SecondeArrivee:=(SecondeArrivee mod 60) ;
HeureArrivee:=HeureDepart+HeureTrajet+(MinuteArrivee div 60) ;
MinuteArrivee:=(MinuteArrivee mod 60) ;
JourArrivee:=HeureArrivee div 24 ;
HeureArrivee:=HeureArrivee mod 24 ;
(* affichage du résultat *)
writeln('Heure d''arrivée : ') ;
if (JourArrivee=0)
then write('même jour : ')
else write('jour + ',JourArrivee,' : ') ;
writeln(HeureArrivee,'h ', MinuteArrivee, 'mn ',SecondeArrivee, 's.') ;
END.
(********************************)