©Arnaud de Saint Julien - MPSI Lycée La Merci 2012-2013 1
TP MAPLE N°3 : Algorithmique
1 Cours
Mots-Clés : algorithme, procédure ou programme c’est l’incarnation dans un langage
de programmation d’un algorithme, argument d’une procédure (entrées de la procédure)
et leur type, déclaration des variables et de leurs types, sortie des résultats, affichage des
résultats, itération «for» et «while», structures conditionnelles, indentation (présentation
lisible de la procédure), trace d’un programme.
1.1 Notion de procédure
C’est le «nom» que l’on donne à une suite d’instructions qui réalise une certaine tâche.
La syntaxe est la suivante :
nomdelaprocedure :=proc(arg1,arg2, ...,argn)
local a,b,c ;
instructions ;
end ; ou end proc ; sur des versions plus récentes de Maple
Les expressions arg1,arg2, ...,argn sont les arguments de notre procédure (entrées).
Dans cette procédure, on utilise 3 variables locales qu’on a baptisées a,b et c.
Remarques :
Une fonction est un cas particulier de procédure, et on peut donc définir les fonctions
à l’aide des procédures.
on peut préciser le type des arguments que l’on utilise (mais ce n’est pas obligatoire).
Par exemple toto :=proc(arg1 : :posint,arg2 : :nonnegint,arg3 : :array,arg4 : :float)
indique que dans la procédure toto, l’argument arg1 est un entier strictement positif,
arg2 un entier naturel, arg3 un tableau, arg4 un nombre flottant.
Dans certains langages de programmation (par exemple le C ou Java), il est obli-
gatoire de «typer» les arguments, les variables et aussi la sortie (ce que renvoie le
programme).
il est possible de traduire une procédure Maple en programme en langage C avec
l’instrution C.
1.2 La structure conditionnelle Si
La syntaxe est la suivante :
if condition1 then
instructions1 ;
elif condition2 then
instructions2 ;
else
instructions3 ;
;
L’instruction elif n’est nécéssaire que dans le cas de conditions avec au moins trois
éventualités. On peut mettre autant de elif que l’on désire.
Remarque : on peut remplacer par end if sur les versions plus récentes de Maple.
Maple doit évaluer la valeur de vérité de propositions (renvoie un boléen). On peut
combiner ces propositions à l’aide des connecteurs logiques et (and), ou (or), non (not).
©Arnaud de Saint Julien - MPSI Lycée La Merci 2012-2013 2
1.3 L’itération à l’aide de la fonction for
Pour répéter une opération on peut utiliser une boucle avec indice numérique. La
syntaxe d’une telle boucle est la suivante :
for indice from début to fin by pas do
instructions ;
od ;
L’indication du pas est optionnelle, par défaut, elle vaut 1.
Quand il y a plusieurs instructions de suite, il faut les séparer de par des « ;» ou des
« :».
Remarque : sur les versions plus récentes de Maple, le mot «od» peut être remplacée
par «end do».
1.4 La boucle «tant que»
On utilise une boucle while (tant que) quand on veut répéter une opération mais que
l’on ne connaît pas à l’avance le nombre d’itérations. Sa syntaxe est :
while conditions do instructions od ;
Remarque : une boucle de type «pour kvariant de 1 à n» est en fait un cas particu-
lier de boucle de type «tant que». En effet, les deux suites d’instructions suivantes sont
équivalentes :
Pour kde 1 à n, faire
instructions ;
Fin du pour
k1 ;
Tant que k6n, faire
instructions ; kk+ 1
Fin du tant que
1.5 La sortie des résultats
Si on ne «force pas l’affichage», seul le dernier résultat calculé dans la procédure est
retourné.
Pour afficher des résultats intermédiaires, on peut utiliser print ou ou printf pour
insérer aussi du texte.
La commande RETURN renvoie la valeur d’un résultat et fait quitter la procédure.
1.6 Débuggage ou trace de la procédure
On peut tracer une procédure toto à l’aide de la fonction trace de Maple. On tape
trace(toto); puis on exécute toto et alors tous les calculs sont affichés pas à pas.
2 Exemples modèles d’algorithmes
Dans tous ces exercices, l’algorithme est rédigé en pseudo-code. Vous devez le traduire
en langage Maple et décrire son action.
©Arnaud de Saint Julien - MPSI Lycée La Merci 2012-2013 3
algorithme :soso
Entrées :nN
Résultat : à vous de trouver.....
Variables :sR,kN
s0 ;
Pour kde 1 à n, faire
ss+k;
Fin du pour
Renvoyer s
>soso:=proc(n::posint)
>local s,k;
>s:=0;
>for k from 1 to n do
>s:=s+k;
>od;
>RETURN(s);
>end;
algorithme :fonctiontente
Entrées :xR
Résultat : .....
Variables :
Si x[0,1], faire
renvoyer x;
Si x]1,2], faire
renvoyer x+ 2 ;
Sinon, faire
renvoyer 0.
Fin du Si ;
algorithme :truc
Entrées :xR+
Résultat : .....
Variables :kN
k0 ;
Tant que k6x, faire
kk+ 1 ;
Fin du tant que
Renvoyer k1 ;
3 Exercices
3.1 Premiers exemples seuls
Exercice 1 (Fonction factorielle) Écrire une fonction factorielle(n) qui prend en
argument un entier naturel net renvoie n!.
Exercice 2 Écrire une procédure nommée trinôme qui renvoie les solutions réelles d’une
équation du second degré. On sera vigilant au cas où a= 0.
Exercice 3 Trouver 3 couples d’entiers naturels (x, y) solutions de l’équation de Pell-
Fermat x211y2= 1.
Exercice 4 Écrire une procédure nommée divcom qui donne tous les diviseurs communs
à deux nombres entiers aet bavec a6b(on rappelle qu’un entier ddivise un entier nsi
et seulement si En
d=n
dou si et seulement si nest congru à 0 modulo d).
3.2 Assez instructif
Exercice 5 (Affichage) Tester et commenter les 5 procédures suivantes.
>norme1:=proc(x,y)
>sqrt(x^2+y^2);
>end;
©Arnaud de Saint Julien - MPSI Lycée La Merci 2012-2013 4
>norme2:=proc(x,y)
>sqrt(x^2+y^2);
>x *y;
>end;
>norme3:=proc(x,y)
>print(sqrt(x^2+y^2));
>print(x *y);
>end;
>norme4:=proc(x,y)
>RETURN(sqrt(x^2+y^2));
>RETURN(x *y);
>end;
>norme5:=proc(x,y)
>RETURN(sqrt(x^2+y^2),x*y);
>end;
Exercice 6 (Afficher c’est pas gagner) Paul a besoin d’utiliser la fonction fdéfinie
sur Rpar f(x) = 2x+ 1. Il la programme ainsi sur Maple :
f:=proc(x) print(2*x+1); end;
Calculer ainsi f(10), f(5) puis f(f(5)). Commenter puis corriger.
Exercice 7 Quelle est la valeur de la variable aà la suite des instructions suivantes.
a10 ;
Si a < 5, alors a= 20 ;
Si a > 1 alors a= 500 ;
Si a > 100 alors a= 50 ;
Sinon a= 0.
Exercice 8 Écrire un algorithme qui ne se termine pas.
Exercice 9 (Pourquoi 11 et pas 10 ?) A l’aide d’une itération dont le nom de la va-
riable est k, demander d’afficher les carrés des entiers de 0 à 10. Lorsque l’on demande
ensuite à Maple la valeur de k, il renvoie 11. Proposer une explication.
Exercice 10 (argument Vs variable) Voici une procédure
essai:=proc(n)
n:=n+1;
end;
Taper là, puis avant de la tester, réfléchir à ce qu’elle doit faire. Tester là et commenter.
3.3 Avec des suites
Exercice 11 (Fonction seuil) La suite un= 4n3+ 5n+ 1 est croissante et tend vers
+. On est donc sûr qu’à partir d’un certain rang n, on a un>100. Compléter les
instructions suivantes afin de déterminer le plus petit entier ntel que un>100 ?
n0 ;
Tant que .................100, faire
n.............. ;
Fin du tant que
Renvoyer ... ;
©Arnaud de Saint Julien - MPSI Lycée La Merci 2012-2013 5
Exercice 12 (Programmation d’une suite récurrente) Soit ula suite définie par
u0= 5 et un+1 = 3un2 pour nN.
Le but de l’exercice est de construire une procédure d’argument net renvoyant la
valeur un.
1. Méthode 1 : à l’aide d’une seule variable
algorithme :suite
Entrées :nN
Résultat :un
Variables :uN, k N
u5 ;
Pour kde 1 à nfaire
u3u2 ;
Fin du pour
Renvoyer u;
2. Méthode 2 : à l’aide d’une table
algorithme :suitebis
Entrées :nN
Résultat :un
Variables :uune table, kN
u[0] 5 ;
Pour kde 0 à n1 faire
u[k+ 1] 3u[k]2 ;
Fin du pour
Renvoyer u[n] ;
3. Quelle méthode vous paraît la plus coûteuse en variables et donc en occupation
mémoire de l’ordinateur ?
Exercice 13 (Suite de Syracuse) On note fla fonction définie sur Npar f(n) = n
2si
nest pair et f(n) = 3n+ 1 sinon.
1. Écrire une fonction Maple qui renvoie les valeurs de la fonction f.
2. On considère maintenant la suite récurrente ude premier terme u0Net vérifiant
un+1 =f(un). Programmer cette suite et observer que quelque soit le choix de u0,
la suite ufinit par prendre la valeur 1. .
3. Écrire un algorithme 1retouralunite qui prend en argument un entier u0et renvoie
le plus petit entier ntel que un= 1.
Exercice 14 (Suite de Fibonnacci) On note (Fn) la suite de premiers termes F0= 0,
F1= 1 puis définie par Fn+1 =Fn+Fn1. Écrire une procédure prenant en entrée un
entier net renvoyant Fnavec les deux méthodes suivantes selon l’exercice modèle des
suites récurrentes :
1. avec une table et donc avec des variables F[k]
2. sans table
3.4 Pour terminer
Exercice 15 (Partie entière) Écrire une fonction partie_entière(x) qui prend en ar-
gument un nombre flottant xet renvoie la partie entière de x.
Exercice 16 (Changement de base) Écrire une procédure qui donne l’écriture en base
5 d’un entier.
1. On ne sait toujours pas prouver à l’heure actuelle que l’algorithme retouralunite se termine tou-
jours.
1 / 6 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !