MPSI1
Algorithmique : les bases
lyc´ee Chaptal
I. Structures
I.1 Boucle
hhfor
ii– C’est une boucle utilis´ee quand le nombre d’it´erations est connue et que celles-ci sont index´ees par un entier.
– Le pas est donn´e `a la suite de l’instructionby. Par d´efaut, celui-ci vaut 1.
– Structure :> for k from 1 to 10 by 3 do instructions end do – Exemples :
1. Calculer
100
P
k=1
k:
> s:=0 ;
> for i from 1 to 100 do s:=s+i
end do :
> s ;
2. Calculer la somme des entiers pair de 1 `a 100 :> s:=0 ;
> for k from 0 to 100 by 2 do
s:=s+k end do :
> s ;
ou encore> s:=0 ;
> for k from 1 to 50 do s:=s+2*k
end do :
> s ;
I.2 Boucle
hhwhile
ii– C’est une boucle utilis´ee quand le nombre d’it´erations n’est pas n´ecessairement connue mais seulement une condition d’arrˆet (de forme bool´eenne :trueoufalse) qui tant qu’elle n’est pas satisfaite, poursuit la r´ep´etition des instructions de la boucle.
– On prendra bien soin de v´erifier que la condition d’arrˆet se produit en un temps fini ! – Structure :> while condition do instructions end do
– Exemples : 1. Calculer
100
P
k=1
k:
> s:=0 ;k:=1 ;
> while (k<=100) do s:=s+k ;
k:=k+1 end do :
> s ;
2. Calculer le quotient de la division euclidienne de 103 par 25 :
> q:=0 ; r:=103 ; b:=25 ;
> while b<=r do r:=r-b ; q:=q+1 end do ;
> q ;
Remarque : une derni`ere ins- truction> q,r ;donnerait la s´e- quence quotient/reste.
3. D´eterminer le plus petit entierp tel que
p
P
k=1
k2>21334 :
> s:=0 ;p:=0 ;
> while s<21334 do p:=p+1 ;
s:=s+p*p ; end do ;
> p ;
I.3 Conditionnelle
hhif
ii– C’est la structure qui permet d’ex´ecuter une instruction si une condition (d´efinie par une variable bool´enne) est v´erifi´ee.
– L’instructionelse peut ˆetre omise.
– Il existe aussi des possibilit´es d’enchaˆıner des conditions `a l’aide de l’instructionelif.
– Structure :> if condition then instructions else instructions end if.
– Exemple : On donnea,b,c. Si ∆ =b2−4ac est positif, ´ecrire qu’il y a des solutions r´eelles, sinon qu’il n’y en a pas.
> a:=423 ; b:=960 ; c:=545 ;
> Delta := b*b - 4*a*c ;
> if Delta < 0
then print(’ilnyapasdesolutionsreelles’) else print(’ilyadessolutionsreelles’) end if
MPSI1
Algorithmique : les bases
lyc´ee Chaptal
II. Proc´ edures
II.1 Fonctions
– Pour d´efinir une fonction d’une ou plusieurs variables, on utilise la syntaxe :> f:= (v1,...,vn) -> expr;o`uf est le nom de la fonction,v1,...,vnen sont les variables etexprle r´esultat de l’´evaluation def en les variables.
– On peut ´egalement transformer une expression en fonction `a l’aide de l’instructionunapply.
– Exemples :
1. >f1:=x->x*x ;
> f1(5) ;
2. > f2:= unapply(x*x,x) ;
II.2 Proc´ edures
– Une fonction est un cas particulier de proc´edure. Une proc´edure permet d’enchaˆıner des instructions d´ependant de variables d’appel.
– Structure :> Maprocedure:= proc(v1,...,vn) local l1,..,lp;
global g1,...,gp; instructions; end.
– v1,...,vnsont les variables d’appel,l1,..,lples variables locales etg1,...,gples variables globales.
– La valeur prise par une proc´edure est celle de la derni`ere instruction effectu´ee.
– On peut utiliser une proc´edure `a l’int´erieur d’une autre.
– Exemples :
1. > pro1:=proc(x) local a ;
global b ; a:=x ;b:=x ;a*b end ;
Deviner le r´esultat des instructions :
> a:=1 ;b:=1 ;pro1(4) ;a ;b ;.
2. > som1:=proc(n) local k,s ; s:=0 ;
for k from 1 to n do s:=s+23 od ; s
end ;
Que donnera> som1(10) ;?
II.3 Des outils
II.3.1 R´ecursivit´e
– Une proc´edure peut-ˆetre r´ecursive, c’est-`a-dire qu’elle peut s’appeler elle-mˆeme.
– On prendra soin de v´erifier que l’algorithme ainsi d´ecrit aboutit en un temps fini.
– On remarquera que le temps de calcul peut-ˆetre quel- quefois rapidement tr`es long...
– Exemple :
> fibo:=proc(n) if n=0
then 1 else if n=1
then 1
else fibo(n-1)+fibo(n-2) fi ;
fi end ;
II.4 Sorties d’une proc´ edure
On utilise pour cela, suivant les cas, erroroureturn
II.5 D´ etail des calculs effectu´ es
Pour obtenir le d´etail des calculs effectu´es par une proc´e- dure, on utilisetrace.
Par exemple :> trace(fibo) ; fibo(4) ;.
II.6 Nombre d’arguments
nargs d´esigne le nombre d’arguments pass´es `a la proc´e- dure et argsla liste des arguments pass´es `a la proc´edure.
Exemple : que fait la proc´edure suivante
> moyenne:=proc() local m,n ;
m:=0 ;
if nargs=0 then error(’calcul impossible’) else
for n to nargs do m:=m+args[n] od ; evalf(m/nargs)
fi end ;