© 1996 JMy

Exercices sur l'alternative.


1) Lire 2 nombres a et b. Les écrire dans l'ordre croissant.

réel a, b
écrire "Introduisez a:"
lire a
écrire "Introduisez b:"
lire b
si a>b alors  écrire b, a
sinon  écrire a, b
fsi
PROGRAM Tri2;
VAR a, b : REAL;
BEGIN
WRITE('a=');
READLN(a);
WRITE('b=');
READLN(b);
IF a>b THEN WRITELN(b:5:2,a:5:2)
ELSE WRITELN(a:5:2, b:5:2)
END.
2) Lire 3 nombres a, b et c. Les écrire dans l'ordre croissant.
réel a, b, c
écrire "Introduisez a:"
lire a
écrire "Introduisez b:"
lire b
écrire "Introduisez c:"
lire c
si a>b alors  Min <-- b
              Max <-- a
sinon  Min <-- a
       Max <-- b
fsi
si c<Min alors  Moy <-- Min
                Min <-- c
sinon  si c>Max alors  Moy <-- Max
                       Max <-- c
       sinon  Moy <-- c
       fsi
fsi
écrire "Dans l'ordre croissant:", Min, Moy, Max
écrire "Dans l'ordre décroissant:", Max, Moy, Min
PROGRAM Ordre;
VAR a, b, c, Min, Max, Moy : REAL;
BEGIN
WRITELN('Tri.');
WRITE('Introduisez a:');
READLN(a);
WRITE('Introduisez b:');
READLN(b);
WRITE('Introduisez c:');
READLN(c);
IF a>b THEN BEGIN
            Min := b;
            Max := a
            END
ELSE BEGIN
     Min := a;
     Max := b
     END;
IF c<Min THEN BEGIN
              Moy := Min;
              Min := c
              END
ELSE IF c>Max THEN BEGIN
                   Moy := Max;
                   Max := c
                   END
     ELSE Moy := c;
WRITELN('Dans l''ordre croissant:', Min:5:2, Moy:5:2, Max:5:2);
WRITELN('Dans l''ordre décroissant:', Max:5:2, Moy:5:2, Min:5:2)
END.
3) Déterminer si l'année A est bissextile. Note: Si A n'est pas divisible par 4, l'année n'est pas bissextile. Si A est divisible par 4, l'année est bissextile sauf si A est divisible par 100 et pas par 400.
entier A
écrire "Introduisez l'année:"
lire A
si NOT (A mod  4=0) alors  écrire "L'année ", A, "n'est pas bissextile."
sinon  si NOT (A mod  100=0) alors  écrire "L'année ", A, "est bissextile."
       sinon  si NOT (A mod  400=0) alors  écrire "L'année ", A, "n'est pas bissextile."
              sinon  écrire "L'année ", A, "est bissextile."
              fsi
      fsi
fsi
PROGRAM Bissextile;
VAR A: WORD;
BEGIN
WRITELN('Année bissextile.');
WRITE('Introduisez l''année:');
READLN(A);
IF A MOD 4>0 THEN WRITELN('L''année ', A, ' n''est pas bissextile.')
ELSE IF A MOD 100>0 THEN WRITELN('L''année ', A, ' est bissextile.')
     ELSE IF A MOD 400>0 THEN WRITELN('L''année ', A, ' n''est pas bissextile.')
          ELSE WRITELN('L''année ', A, ' est bissextile.')
END.
ou
entier A
écrire "Introduisez l'année:"
lire A
si (A mod  4=0) et ((A mod  100>0) ou (A mod  400=0)) alors  écrire "L'année ", A, "est bissextile."
sinon  écrire "L'année ", A, "n'est pas bissextile."
fsi
PROGRAM Bissextile;
VAR A: WORD;
BEGIN
WRITELN('Année bissextile.');
WRITE('Introduisez l''année:');
READLN(A);
IF (A MOD 4=0) AND ((A MOD 100>0) OR (A MOD 400=0)) THEN WRITELN('L''année ', A, ' est bissextile.')
ELSE WRITELN('L''année ', A, ' n''est pas bissextile.')
END.
4) Déterminer la valeur absolue d'un nombre réel x à partir de la définition de la valeur absolue.
réel x
écrire "Introduisez x:"
lire x
si x>0 alors  écrire "Valeur absolue =", x
sinon si x=0 alors  écrire "Valeur absolue =", 0
      sinon  écrire "Valeur absolue =", -x
      fsi
fsi
PROGRAM Val_Abs;
VAR x : REAL;
BEGIN
WRITELN('Calcul de la valeur absolue.');
WRITE('Introduisez x:');
READLN(x);
IF x>0 THEN WRITELN('Valeur absolue = ', x)
ELSE IF x=0 THEN WRITELN('Valeur absolue = ', 0)
     ELSE WRITELN('Valeur absolue = ', -x)
END.
5) Résoudre l'équation du premier degré: a * x + b = 0
réel a, b
écrire "Résolution de ax + b = 0"
écrire "Introduisez a:"
lire a
écrire "Introduisez b:"
lire b
si a=0 alors si b=0 alors  écrire "Equation indéterminée."
             sinon  écrire "Equation impossible."
             fsi
sinon  écrire "x = ", -b/a
fsi
PROGRAM Eq_1er_degre;
VAR a, b : REAL;
BEGIN
WRITELN('Résolution de ax + b = 0');
WRITE('Introduisez a: ');
READLN(a);
WRITE('Introduisez b: ');
READLN(b);
IF a=0 THEN IF b=0 THEN WRITELN('Equation indéterminée.')
            ELSE WRITELN('Equation impossible.')
ELSE WRITELN('x = ', -b/a:5:2)
END.
6) La transformation de coordonnées cartésiennes (x,y) en coordonnées polaires (r,t) se fait par les formules :
     r2 = x2+y2
     t = arctg (y/x) auquel il faut ajouter pi si x < 0
          sauf si x = 0,   t = pi/2 si  y > 0
                           t = - pi/2 si  y < 0
                           t n'existe pas si y = 0
réel x, y, r, t
écrire "Introduisez l'abscisse x:"
lire x
écrire "Introduisez l'ordonnée y:"
lire y
r <-- (x2+y2)1/2
si x=0 alors si y>0 alors  écrire "r=", r ," et t= ", pi/2
             sinon si y<0 alors  écrire "r=", r ," et t= ", -pi/2
                   sinon  écrire "r=", r ," et t n'existe pas."
                   fsi
             fsi
sinon  t <-- arctg (y/x)
       si x<0 alors  t <-- t + pi
       fsi
       écrire "r=", r ," et t= ", t
fsi
PROGRAM Cartesien_Polaire;
VAR x, y, r, t, pi : REAL;
BEGIN
WRITE('Introduisez l''abscisse x:');
READLN(x);
WRITE('Introduisez l''ordonnée y:');
READLN(y);
pi := 3.1416;
r := SQRT(x*x+y*y);
IF x=0 THEN IF y>0 THEN WRITELN('r=', r:5:2 ,' et t= ', pi/2:5:2)
            ELSE IF y<0 THEN WRITELN('r=', r:5:2 ,' et t= ', -pi/2:5:2)
                 ELSE WRITELN('r=', r:5:2 ,' et t n''existe pas.')
ELSE BEGIN
     t := ARCTAN(y/x);
     IF x<0 THEN t := t + pi;
     WRITELN('r=', r:5:2 ,' et t= ', t:5:2)
     END;
END.
7) Lire une date (j/m/a) et déterminer le jour de la semaine. L'algorithme est valable pour les dates postérieures à 1582.
   Pour janvier et février, il faut augmenter m de 12 et diminuer a de 1.
   Calculer s qui vaut la partie entière de a divisé par 100
            JD = 1720996,5 - s + s \ 4 + [365,25*a] + [30,6001*(M+1)] + j
            JD = JD - [JD/7]*7
            JS = [JD] MOD 7
   si JS =  0, le jour est mardi,
   si JS =  1, le jour est mercredi,
   ....
   si JS =  7, le jour est lundi.
entier j, m, a, s, JD, JS
écrire "Introduisez le jour (1-31)"
lire j
écrire "Introduisez le mois (1-12)"
lire m
écrire "Introduisez l'année (xxxx)"
lire a
si m<3 alors m <-- m + 12
             a <-- a - 1
fsi
s <-- a \ 100
JD <-- 1720996,5 - s + s \ 4 + [365,25*a] + [30,6001*(M+1)] + j
JD <-- JD - [JD/7]*7
JS <-- [JD] mod 7
selon que
  JS = 0 faire Dat <-- "mardi";
  JS = 1 faire Dat <-- "mercredi";
  JS = 2 faire Dat <-- "jeudi";
  JS = 3 faire Dat <-- "vendredi";
  JS = 4 faire Dat <-- "samedi";
  JS = 5 faire Dat <-- "dimanche";
  JS = 6 faire Dat <-- "lundi";
fselon
écrire "Le ", j, "/", m, "/", a, "est un ", Dat
PROGRAM Calendrier_Perpetuel;
VAR a,m,j,s,JS:WORD;
    JD:REAL;
    Dat:STRING;
BEGIN
WRITELN('Calendrier perpétuel.');
WRITE('Introduisez le jour (1-31)');
READLN(j);
WRITE('Introduisez le mois (1-12)');
READLN(m);
WRITE('Introduisez l''année (xxxx)');
READLN(a);
IF m<3 THEN BEGIN
            DEC(a);
            INC(m,12);
            END;
s:=TRUNC(a/100);
JD:=1720996.5 - s + s DIV 4 + TRUNC(365.25*a) + TRUNC(30.6001*(M+1)) + j;
JD:=JD-TRUNC(JD/7)*7;
JS:=TRUNC(JD) MOD 7;
CASE JS OF
    0: Dat:='mardi';
    1: Dat:='mercredi';
    2: Dat:='jeudi';
    3: Dat:='vendredi';
    4: Dat:='samedi';
    5: Dat:='dimanche';
    6: Dat:='lundi';
END;
WRITELN('Le ',j,'/',m,'/',a,' est un ',Dat);
END.
8) Calcul du sinus d'un angle exprimé en radians
 Lire un angle Rad exprimé en radians
 Mettre +1 dans Sign
 "Enlever" un nombre entier de tours grâce à:
           *  Rad = Rad - 2 * pi * [Rad / (2*pi)]    si rad<0
           *  Rad = Rad + 2 * pi * [-Rad / (2*pi)] + 2*pi     si rad>=0
 Si Rad>pi, le ramener entre 0 et pi en soustrayant pi et s'en souvenir en
 mettant -1 dans Sign
 Si Rad>pi/2, faire Rad = pi - Rad
 Si Rad>pi/4, * faire Rad = pi/2 - Rad
              * Sinus vaut 1 - Rad*Rad/2 + Rad*Rad*Rad*Rad/24
 Si Rad<=pi/4, Sinus vaut Rad - Rad*Rad*Rad/6 + Rad*Rad*Rad*Rad*Rad/120
 Multiplier Sinus par Sign et afficher la réponse
réel x, Rad, pi, Sinus
entier Sign
écrire "Introduisez l'angle (en radians):"
lire x
pi <-- 3.1416;
Rad <-- x
Sign <-- +1
si Rad>0 alors Rad <-- Rad - 2*pi * [Rad / (2*pi)]
sinon  Rad <-- Rad + 2*pi * [-Rad / (2*pi)] + 2*pi
fsi
si Rad > pi alors Rad <-- Rad - pi
                  Sign <-- -1
fsi
si Rad > pi/2 alors Rad <-- pi - Rad
fsi
si Rad > pi/4 alors Rad <-- pi/2 - Rad
                    Sinus <-- 1 - Rad*Rad/2 + Rad*Rad*Rad*Rad/24
sinon  Sinus <-- Rad - Rad*Rad*Rad/6 + Rad*Rad*Rad*Rad*Rad/120
fsi
Sinus <-- Sinus * Sign
écrire "sin(",x,")=",Sinus
PROGRAM Calcul_Sinus;
VAR x, Rad, pi, Sinus : REAL;
    Sign : SHORTINT;
BEGIN
WRITELN('Calcul du sinus d''un angle.');
WRITE('Introduisez l''angle (en radians):');
READLN(x);
pi:=3.1416;
Rad := x;
Sign := +1;
IF Rad>0 THEN Rad := Rad - 2*pi * TRUNC(Rad / (2*pi))
ELSE Rad := Rad + 2*pi * TRUNC(-Rad / (2*pi)) + (2*pi);
IF Rad > pi THEN BEGIN
                 Rad := Rad - pi;
                 Sign :=-1
                 END;
IF Rad > pi/2 THEN Rad :=pi - Rad;
IF Rad > pi/4 THEN BEGIN
                   Rad :=pi/2 - Rad;
                   Sinus :=1 - Rad*Rad/2 + Rad*Rad*Rad*Rad/24
                   END
ELSE Sinus :=Rad - Rad*Rad*Rad/6 + Rad*Rad*Rad*Rad*Rad/120;
Sinus := Sinus * Sign;
WRITELN('sin(',x,')=',Sinus)
END.

Page précédente.