• Aucun résultat trouvé

1.2Lastructureconditionnelle Si 1.1Notiondeprocédure 1Cours TPMAPLEN°3:Algorithmique

N/A
N/A
Protected

Academic year: 2022

Partager "1.2Lastructureconditionnelle Si 1.1Notiondeprocédure 1Cours TPMAPLEN°3:Algorithmique"

Copied!
6
0
0

Texte intégral

(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 ; fi ;

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 fi 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).

(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 k variant 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 k de 1 à n, faire instructions ;

Fin du pour

k

1 ;

Tant que k

6

n, faire instructions ; k

k + 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.

(3)

algorithme : soso Entrées : n

∈N

Résultat : à vous de trouver...

Variables : s

∈R

, k

∈N

s

0 ;

Pour k de 1 à n, faire s

s + 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 : x

∈R

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 : x

∈R+

Résultat : ...

Variables : k

∈N

k

0 ;

Tant que k

6

x, faire k

k + 1 ;

Fin du tant que Renvoyer k

1 ;

3 Exercices

3.1 Premiers exemples seuls

Exercice 1 (Fonction factorielle) Écrire une fonction factorielle(n) qui prend en argument un entier naturel n et 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 x

2

11y

2

= 1.

Exercice 4 Écrire une procédure nommée divcom qui donne tous les diviseurs communs à deux nombres entiers a et b avec a

6

b (on rappelle qu’un entier d divise un entier n si et seulement si E

nd

=

nd

ou si et seulement si n est 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;

(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 f définie sur

R

par 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.

a

10 ;

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 u

n

= 4n

3

+ 5n + 1 est croissante et tend vers +

. On est donc sûr qu’à partir d’un certain rang n, on a u

n >

100. Compléter les instructions suivantes afin de déterminer le plus petit entier n tel que u

n>

100 ?

n

0 ;

Tant que ...100, faire n

... ;

Fin du tant que

Renvoyer ... ;

(5)

Exercice 12 (Programmation d’une suite récurrente) Soit u la suite définie par u

0

= 5 et u

n+1

= 3u

n

2 pour n

∈N

.

Le but de l’exercice est de construire une procédure d’argument n et renvoyant la valeur u

n

.

1. Méthode 1 : à l’aide d’une seule variable algorithme : suite

Entrées : n

∈N

Résultat : u

n

Variables : u

∈N

, k

∈N

u

5 ;

Pour k de 1 à n faire u

3u

2 ; Fin du pour Renvoyer u ;

2. Méthode 2 : à l’aide d’une table algorithme : suitebis Entrées : n

∈N

Résultat : u

n

Variables : u une table, k

∈N

u[0]

5 ;

Pour k de 0 à n

1 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 f la fonction définie sur

N

par f(n) =

n2

si n est 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 u de premier terme u

0 ∈N

et vérifiant u

n+1

= f(u

n

). Programmer cette suite et observer que quelque soit le choix de u

0

, la suite u finit par prendre la valeur 1. .

3. Écrire un algorithme

1

retouralunite qui prend en argument un entier u

0

et renvoie le plus petit entier n tel que u

n

= 1.

Exercice 14 (Suite de Fibonnacci) On note (F

n

) la suite de premiers termes F

0

= 0, F

1

= 1 puis définie par F

n+1

= F

n

+ F

n1

. Écrire une procédure prenant en entrée un entier n et renvoyant F

n

avec 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 x et 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 retouralunitese termine tou- jours.

(6)

Exercice 17 (Quelle fractale se cache dans le triangle de Pascal ?)

1. Représenter les 10 premières lignes du triangle de Pascal sous formes de 10 listes (on pourra utiliser binomial).

2. Écrire une fonction f définie sur

N

qui à un entier n pair associe la chaîne de caractères oo et à un entier n impair associe la chaîne de caractères [].

3. Appliquer cette fonction f à chaque élément de la dixième ligne du triangle de Pascal, puis refaire cette opération pour les cinquantes premières lignes du triangle de Pascal.

4. Représenter ainsi le triangle de Pascal modulo 2, quelle fractale se dévoile devant

vous ?

Références

Documents relatifs

Une fois la sélection faite, si le stock de la boisson sélectionnée n'est pas vide, le système met à jour le stock, sélectionne la boisson demandée et ouvre la trappe d'accès à

strictement positifs qui se trouvent dans un tableau T puis par les éléments strictement négatifs qui se trouvent dans le même tableau T. 21 - Afficher si la somme des chiffres d’un

Le législateur, qui a entendu réprimer des comportements réitérés de soustraction aux mesures sanitaires instituées dans l’intérêt de la santé publique, aux fins

Considérant que le I de l’article 16 de la loi organique, qui donne une nouvelle rédaction au sixième alinéa de l’article 64 de la loi organique du 27 février 2004, précise

et de détention d'un titre de séjour l'autorisant à travailler, m ais pas celle de l 'antériorité, à raison de dix années, de la résidence ; que si la question de la conformité

Aussi lit-on dans les Institutes de Justinien qu’« aujourd’hui, tous les jugements sont extra ordinem », renvoyant ainsi à la constitution sédimentée d’un droit

(art. 2 Il peut désigner dans la décision de renvoi un autre canton qui aura compétence pour exécuter le renvoi que celui abritant le centre de la Confédération,

● Ceux qui vont faire l'objet de la procédure d'urgence sont : Barrière de protection de 78cm de haut très mal fixée et défaut de conception dans la réalisation d'un escalier qui