Exercice 1
1.)
nmax est une constante indiquant le nombre maximal de cases dans les
tableaux x et y.
nmax<=2 (test de saisie de n)<
nmax<=32816 (indice de type entier)
nmax<=32816 si les tableaux sont des tableaux d'entiers
mais la borne sup est beaucoup plus petite si on a un tableau de réels.
m est un réel car issu d'une division : m:=s/n;
x et y sont des tableaux de mêmes indices car on a une affectation
y[]:=x[]-m
y est un tableau de réels (intervention du réel m dans
le calcul).
x est un tableau d'entiers (toutes les valeurs x[] sont ajoutées
à s qui est un entier).
Conclusion :
const nmax = 1000 (* par exemple *)
var n, compte, s : integer ;
m : real ;
x : array[1..nmax] of integer ;
y : array[1..max] of real ;
2.)
Combien de nombres entre (2 et 1000) a considerer ?5
x[1]=4
x[2]=8
x[3]=12
x[4]=17
x[5]=19
le resultat de m est : 12.00 (* :8:2 *)
x(1)=4, y[1]= -8 (* :8 *)
x(2)=8, y[2]= -4
x(3)=12, y[3]= 0
x(4)=17, y[4]= 5
x(5)=19, y[5]= 7
3.)
compte:=1;
while compte<=n do
begin
...
compte:=compte+1 ;
end ;
Exercice 2
1.)
PROGRAM joueurs ;
VAR nom : string ;
saut, tmp, i : integer ;
BEGIN
randomize ;
nom:='' ;
repeat
write('nom du sauteur (vide pour terminer) ? ') ;
readln(nom) ;
if nom<>'' then
begin
saut:=400 ;
for i:=1 to 3 do
begin
tmp:=400+random(401) ;
if tmp>saut then saut:=tmp ;
end ;
end ;
writeln('Le meilleur saut de ',nom,' est ',saut) ;
until nom='' ;
END.
2.)
PROGRAM equipe ;
VAR nom : string ;
saut, tmp, i : integer ;
numero, meilleursaut : integer ;
meilleurnom : string ;
BEGIN
WRITELN('numero de l'equipe ? ') ; READLN(NUMERO) ;
MEILLEURNOM:='' ; MEILLEURSAUT:=399 ;
randomize ;
nom:='' ;
repeat
write('nom du sauteur (vide pour terminer) ? ') ;
readln(nom) ;
if nom<>'' then
begin
saut:=400 ;
for i:=1 to 3 do
begin
tmp:=400+random(401) ;
if tmp>saut then saut:=tmp ;
IF SAUT>MEILLEURSAUT THEN
BEGIN
MEILLEURNOM:=NOM ;
MEILLEURSAUT:=SAUT ;
END ;
end ;
end ;
writeln('Le meilleur saut de ',nom,' est ',saut) ;
until nom='' ;
WRITE('Le meilleur saut de l'équipe ',NUMERO,' est ')
WRITELN(MEILLEURSAUT,' par ',MEILLEURNOM) ;
END.
3.)
PROGRAM plusieursequipes ;
VAR nom : string ;
saut, tmp, i : integer ;
numero, meilleursaut : integer ;
meilleurnom : string ;
equipegagnante, sautgagnant, nmax : integer
;
nomgagnant : string ;
BEGIN
randomize ;
MEILLEURNOM:='' ; MEILLEURSAUT:=399 ;
NOMGAGNANT:='' ; SAUTGAGNANT:=399 ;
EQUIPEGAGNANTE:=0 ;
REPEAT
WRITE('Combien d'équipes ? ') ; READLN(NMAX) ;
UNTIL NMAX>0 ;
FOR NUMERO:=1 to NMAX DO
BEGIN
WRITELN('Equipe : ',NUMERO) ;
repeat
nom:='' ;
write('nom du sauteur (vide pour terminer) ?
') ;
readln(nom) ;
if nom<>'' then
begin
saut:=400 ;
for i:=1 to 3 do
begin
tmp:=400+random(401)
;
if tmp>saut then saut:=tmp
;
if saut>meillleursaut
then
begin
meilleurnom:=nom
;
meilleursaut:=saut
;
IF SAUT>SAUTGAGNANT
THEN
BEGIN
SAUTGAGNANT:=SAUT ;
NOMGAGNANT:=NOM ;
EQUIPEGAGNANTE:=NUMERO ;
END ;
end ;
end ;
end ;
writeln('Le meilleur saut de ',nom,' est ',saut)
;
until nom='' ;
write('Le meilleur saut de l'équipe ',numero,' est
')
writeln(meilleursaut,' par ',meilleurnom) ;
END ;
WRITELN('Le meilleur saut au final est de ',sautgagnant) ;
WRITELN('par ',nomgagnant,' de l'equipe numero ',equipegagnante)
;
END.
Exercice 3
PROGRAM pieces ;
VAR N, i, a, b : integer ;
P : array[1..100] of integer ;
choix : char ;
proportion, moyenne, ecart_type, mediane : real
;
continuer, recommencer : char ;
PROCEDURE ORDONNER ;
Var i, j, tmp : integer ;
Begin
for i:=1 to N-1 do
for j:=i+1 to N do
if p[j]<p[i] then
begin tmp:=p[i] ; p[i]:=p[j] ; p[j]:=tmp
; end ;
End ;
PROCEDURE SAISIES ;
Begin
(* 1. Saisie de la valeur de N avec contrôle *)
repeat
write('Combien de jours (2 à 100) ? ') ; readln(N)
;
until (N>=2) and (N<=100) ;
(* 2. Saisie de la production quotidienne de pièces *)
Writeln('Productions quotidiennes :') ;
for i:=1 to N do
begin
write('jour ',i,' ? ') ; readln(p[i]) ;
end ;
End ;
PROCEDURE CHOIX ;
Begin
(* 3. Choix de l'utilisateur puis traitement *)
writeln('Que voulez-vous faire :') ;
writeln(' 1 : Proportion de jours où la production est entre
a et b') ;
writeln(' 2 : Moyenne arithmétique et écart-type')
;
writeln(' 3 : Médiane') ;
case choix of
1 : begin
(* saisies de a et b
*)
repeat
write('Valeur
de a ? ') ; readln(a) ;
write('Valeur
de b (b>a)? ') ; readln(b) ;
until (a>=0) and
(b>=a) ;
(* calcul de la proportion
puis affichage *)
proportion:=0 ;
for i:=1 to N do
if (p[i]>=a)
and (p[i]<=b) then proportion:=proportion+p[i] ;
proportion:=proportion*100/N
;
writeln(proportion:1:2,'%
de jours entre ',a,' et ',b) ;
end ;
2 : begin
(* calcul et affichage
de la moyenne arithmétique *)
moyenne:=0 ;
for i:=1 to N do moyenne:=moyenne+p[i]
;
moyenne:=moyenne/N ;
writeln('moyenne : ',moyenne:1:3)
;
(* calcul et affichage
de l'écart-type *)
ecart_type:=0 ;
for i:=1 to N do
ecart_type:=ecart_type+(p[i]-moyenne)*(p[i]-moyenne)
;
ecart_type:=ecart_type/N
;
ecart_type:=sqrt(ecart_type)
;
writeln('écart-type
: ',ecart_type:1:3) ;
end ;
3 : begin
(* classement de p *)
ORDONNER ;
(* calcul et affichage
de la médiane *)
if (N mod 2)=0
then mediane:=(p[N
div 2]+p[1+N div 2])/2
else mediane:=p[(N+1)
div 2] ;
writeln('médiane
: ',mediane:1:1) ;
end ;
(* else ; *)
end ;
End ;
BEGIN
repeat (* question 5. *)
SAISIES ;
repeat (* question 4. *)
CHOIX ;
write('Nouveau traitement avec les mêmes
données (o/n) ? ') ;
readln(continuer) ;
until (continuer='n') ;
write('Recommencer avec d'autres valeurs (o/n) ?') ;
readln(recommencer) ;
until (recommencer='n') ;
END.