Beruflich Dokumente
Kultur Dokumente
Institutd'HygineetScuritIndustrielle
Informatique(algorithmique&programmation)
2eAnne
1/Instructionssimples:lecture(read),affectation(:=)etl'criture(write).
Avec ces instructions la machine est capable de lire des donnes ( partir du
clavier,souris),stockerdesdonnesetafficherdesrsultats.
2/Instructionscomposes:
Instructionsconditionnelles
Instructionrptitives(itratives)
Instructionsconditionnelles:ifthenelse,case
Ces instructions donnent la machine la capacit de choisir le traitement
effectuer(lesinstructionsexcuter).
Instructionsitratives:for,while,repeat
Dans ce qui suit, nous allons aborder les boucles appeles aussi instructions
rptitivesouinstructionsitratives.Commeleurnoml'indique,cesinstructions
permettentlamachinederpteruntraitementuncertainnombredefois.
BouclesForetWhile
Par exemple, si je veux afficher 'Bonjour' l'cran dix fois comment je dois
procder?
Ilfautquejetapedixfoisl'instruction:write('bonjour')
Write('bonjour');
Write('bonjour');
Write('bonjour');
Write('bonjour');
Cequin'estpasvidentsijeveuxrpterquelquechoseunnombreimportantde
fois,disons:100foisouplus.Lasolution?C'estl'utilisationdesboucles.
Lesbouclespermettentd'viterl'crituredetoutescesinstructions:
fori:=1to10do
write('bonjour');
Cequiveutdire:pouriallantde110faire,afficherbonjour
Syntaxedelabouclefor:
forvariable:=valeur_initialetovaleur_finaledo
<Instructions>
1
Lavaleurinitialepeutprendren'importequellevaleur,pasforcment1.
Exemple
fori:=5to10do
write('bonjour');
Cequiaffiche'bonjour'5fois
Commentdefoisleprogrammesuivantaffichede'bonjour'?
fori:=5to5do
write('bonjour');
Ill'afficheuneseulefois,justepouri=5
fori:=10to5do
write('bonjour');
Ceprogrammen'afficherienparceque10>5
Pourcrireuneboucleforallantde101parexemple,ondoitutiliserlemot
cl'downto'
fori:=10downto1do
writeln(i);
readln(n);
Fori:=1tondo
write(?);
readln(n);
Fori:=1tondo
write(i);
Maintenantcommentcalculerlasommedecesnpremiersentiers.
Exercices
1. Ecrireunprogrammequicalculelasommedesnpremiersentiers.
S=1+2+3++n
Solution
programsum;
var
i,n,s:integer;
begin
readln(n);
s:=0;
2
fori:=1tondo
s:=s+i;
write('s=',s);
readln
end.
BoucleWhile
while(condition)do
<instructions>
Tantquelaconditionestvraie,rptelesinstructions.
Exemple
i:=1;
while(i<5)do
begin
writeln(i);
i:=i+1;
end;
Laboucleprcdenteaffiche:
1
2
3
4
Parcequecesvaleurssontinfrieures5
Calculdelasommedesnpremiersentiersenutilisantlabouclewhile.
programsum;
var
i,n,s:integer;
begin
read(n);
s:=0;
i:=1;
while(i<=n)do
begin
s:=s+i;
i:=i+1;
end;
write('s=',s);
end.
Remarque
Danslabouclefor,l'incrmentation(dcrmentation)se
faitautomatiquement.Alorsquedanslabouclewhile,ilfautl'ajouter.
Fori:=3to5do
writeln(i);
3
i:=3;
while(i<=5)do
begin
writeln(i);
i:=i+1;
end;
Onpeutdirequelabouclewhilesecomposedetroispartiesessentielles;
Initialisation(i:=3;)
condition:(i<=5)
incrmetation(dcrmentation):i:=i+1;
Exercice:
Caculerlasommesuivante:
S=13+23+33++n3
programsum;
var
i,n,s:integer;
begin
readln(n);
s:=0;
fori:=1tondo
s:=s+i*i*i;
write('s=',s);
readln
end.
2. Ecrireunprogrammequicalculexy
x,y:desentiers.
xy=x*x**x
yfois
programpower;
var
i,x,y,p:integer;
begin
write('Pleaseenterthebase:');readln(x);
write('Pleaseentertheexponent:');readln(y);
p:=1;
fori:=1toydo
p:=p*x;
write('p=',p);
readln
end.
3. Ecrireunprogrammequicalculelafactoriellen!dunentiern.
Rappel
n !=
{ 1 Si n=0
n( n1 ) ! Sinon
4
n!=1*2*3**n
Exemple
n!=1*2*.*n
0!=1
1!=1
2!=1*2
programfactorial;
var
i,n,fact:integer;
begin
write('Pleaseentern:');readln(n);
fact:=1;
fori:=1tondo
fact:=fact*i;
write(n,'!=',fact);
readln
end.
Quesepassetilsioncommencepartirde2aulieude1.
programfactorial;
var
i,n,fact:integer;
begin
write('Pleaseentern:');readln(n);
fact:=1;
fori:=2tondo
fact:=fact*i;
write(n,'!=',fact);
readln
end.
TP2Tableaux
Unprogrammepascalsecomposededeuxparties,lapartiedclarationoontrouve
lesdonnes(contantesetvariables)etlapartieinstructions.
Qu'estcequ'unevariable?
Une variable est un espace mmoire qui permet de stocker une seule valeur. Par
consquence, pour stocker plusieurs valeurs on a besoin de plusieurs variables.
Par exemple, pour stocker les noms de tous les tudiants j'ai besoin de n
variables, o n reprsente le nombre d'tudiants. Ce qui veut dire pour 700
tudiants,ilfaut700variables.Trop,n'estcepas!
Afind'vitercettemaniredetravail,onutilisedestableaux.
C'estquoiuntableau?
5
Untableauestunevariablequipermetdestockerplusieursvaleursdemmetype.
Dclarationd'untableauenpascal
Var
t:array[1..5]ofinteger;
pourmodifierunevaleur,ilfautmentionnerlenumrodelacaseentrecrochet
t[1]:=1
t[2]:=3
Pourrempliruntableaude5cases,ilfauttaper:
readln(t[1]);
readln(t[2]);
readln(t[3]);
readln(t[4]);
readln(t[5]);
Commeonavudanslapartieprcdente(Tp1),onpeutvitercettecritureen
utilisantlesbouclescommesuit:
fori:=1to5do
readln(t[i]);
C'estdirelescasesallantde15
Pourafficheruntableau,ilfaututiliseruneboucle,bienvidemmentparcequ'on
aplusieursvaleurs:
fori:=1to5do
write(t[i]);
Exercice1
Lasommedeslmentsd'untableau.
programsomme;
var
i,j,s:integer;
t:array[1..5]ofinteger;
begin
(*lecturedetableau*)
fori:=1to5do
readln(t[i]);
(*calculdelasomme*)
s:=0;
fori:=1to5do
6
s:=s+t[i];
(*affichagedelasomme*)
write('s=',s);
readln
end.
REMARQUE
Notretableaucontient5cases,sionveutmodifiersataillede510cases,il
fautparcourirtoutleprogrammeestchangerlavaleur5par10.
Pourvitercettetchefastidieuse,onutilisedesconstantescommesuit:
programsomme;
const
N=5;
var
i,j,s:integer;
t:array[1..N]ofinteger;
begin
fori:=1toNdo
readln(t[i]);
s:=0;
fori:=1toNdo
s:=s+t[i];
write('s=',s);
readln
end.
Decettemanirepourchangerlatailledutableau,jechangeleprogrammeune
seuleposition:
constN=10;
aulieude
constN=5;
Exercice2
DterminationduMax
Avantd'crireunprogrammequidtermineleMaxparmileslmentsd'untableau,
crivonsunprogrammequidterminelemaxentretroisvariablesentires:a,b,
c:integer
if(a>b)then
if(a>c)then
max:=a
else
max:=c
else
if(b>c)then
max:=b
else
max:=c;
7
Ilexisteunedeuximemthodebeaucoupplussimple,quipermetdedterminerla
maxentretroisvariables.Onsupposequelapremirevariable(A)estmax,puis
oncomparelemaxaveclesdeuxautresvariables(BetC),commesuit:
max:=a;
if(max<b)then
max:=b;
if(max<c)then
max:=c;
Supposonsmaintenantqu'onauntableaucontenant3cases,leprogrammedevient:
max:=t[1];
if(max<t[2])then
max:=t[2];
if(max<t[3])then
max:=t[3];
sionajouteunequatrimecasenotretableau,ilfautqu'onajouteuneautre
instructiondecomparaisoncommesuit:
max:=t[1];
if(max<t[2])then
max:=t[2];
if(max<t[3])then
max:=t[3];
if(max<t[4])then
max:=t[4];
Onremarquebienquel'instructionsuivanteserpte:
if(max<t[*])then
max:=t[*];
Donc,onpeutl'criresouscetteforme(enutilisantunebouclefor):
max:=t[1];
fori:=2tondo
if(max<t[i])then
max:=t[i];
Leprogrammecomplet:
8
programmaximum;
const
N=5;
var
i,j,max:integer;
t:array[1..N]ofinteger;
begin
(*lecturedutableau*)
fori:=1toNdo
readln(t[i]);
(*dterminationduMax*)
max:=t[1];
fori:=2tondo
if(max<t[i])then
max:=t[i];
(*affichageduMax*)
write('max=',max);
readln
end.
Exercice3
Leproduitdedeuxtableaux:
programproduit;
const
N=5;
var
i,j,max:integer;
t1,t2,t3:array[1..N]ofinteger;
begin
(*lecturedutableauT1*)
fori:=1toNdo
readln(t1[i]);
(*lecturedutableauT2*)
fori:=1toNdo
readln(t2[i]);
(*calculdutableauT3*)
fori:=1toNdo
t3[i]:=t1[i]+t2[i];
(*affichagedutableauT3*)
fori:=1toNdo
9
write(t3[i],'');
readln
end.
TP3Matrices
programmatrix;
const
l=3;
c=3;
var
(*DCLARATIONDELAMATRICE*)
m:array[1..l,1..c]ofinteger;
i,j:integer;
begin
(*lecturedelamatrice*)
fori:=1toL
forj:=1tocdo
readln(m[i,j]);
(*affichagedelamatrice*)
fori:=1toldo
begin
forj:=1tocdo
write(m[i,j]:4);
writeln
end;
readln
end.
Exercice1
Lasommedeslmentsd'unematrice.
programmatrix;
const
l=3;
c=3;
var
m:array[1..l,1..c]ofinteger;
i,j,s:integer;
begin
(*lecturedelamatrice*)
fori:=1toL
forj:=1tocdo
readln(m[i,j]);
(*affichagedelamatrice*)
fori:=1toldo
10
begin
forj:=1tocdo
write(m[i,j]:4);
writeln
end;
(*calculdelasomme*)
s:=0;
fori:=1toL
forj:=1tocdo
s:=s+m[i,j]);
write('Sommedeslments=',s);
readln
end.
Exercice:
Latraced'unematrice(lasommedeslmentsdiagonaux).
programmatrix;
const
l=3;
c=3;
var
m:array[1..l,1..c]ofinteger;
i,j,trace:integer;
begin
(*lecturedelamatrice*)
fori:=1toL
forj:=1tocdo
readln(m[i,j]);
(*affichagedelamatrice*)
fori:=1toldo
begin
forj:=1tocdo
write(m[i,j]:4);
writeln
end;
(*calculdelatrace*)
trace:=0;
fori:=1toL
forj:=1tocdo
if(i=j)then
trace:=trace+m[i,j]);
write('Trace=',trace);
readln
end.
11
Exercice:
Lasommededeuxmatrices:
programmatrix;
const
l=3;
c=3;
var
a,b,c:array[1..l,1..c]ofinteger;
i,j:integer;
begin
(*lecturedelamatriceA*)
fori:=1toL
forj:=1tocdo
readln(A[i,j]);
(*lecturedelamatriceB*)
fori:=1toL
forj:=1tocdo
readln(B[i,j]);
(*calculdelamatriceC*)
fori:=1toL
forj:=1tocdo
C[i,j]:=A[i,j]+B[i,j];
(*affichagedelamatriceC*)
fori:=1toldo
begin
forj:=1tocdo
write(C[i,j]:4);
writeln
end;
readln
end.
12