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.