1 1. Introduction pgcd(a,b)

publicité
ATELIER ALGORITHME
PREMIERS PAS
Journée d’information sur les nouveaux programmes de Première S-ES
2010-2011
Pour me contacter : [email protected]
1. Introduction
De nombreux documents et informations sont disponibles à partir de la rubrique évolutions au lycée du portail des IREM :
http://www.univ-irem.fr.
L’algorithmique présentent de nombreux avantages :
savoir expliciter son raisonnement
savoir formaliser son raisonnement
concevoir (et écrire) des algorithmes
 séquence d'instructions qui décrit comment résoudre un problème particulier
travailler la logique
etc…
Le fait de traduire l’algorithme dans le langage d’un logiciel ne sert qu’à voir l’algorithme tourné et en quelque sorte le
valider. La maîtrise d’un langage d’un logiciel quelconque n’est en aucun cas le but visé dans les classes.
Quel langage(préféré des logiciels libres, cette liste est non exhaustive)?
 Algobox (très adapté pour la seconde)
 Xcas (proche de maple, avantage pour la récursivité), python…
Différents travaux autour de l’algorithme :
Analyser le fonctionnement ou le but d’un algorithme existant (trace, algorithme mystère, chercher l’erreur)
Modifier un algorithme existant pour obtenir un résultat précis
Créer un algorithme en réponse à un problème donné
Exemple 1 :
Début
Lire le nombre a
Lire le nombre b
Donner à r la valeur a mod b
Tant que r ≠ 0 faire
Donner à a la valeur b
Donner à b la valeur r
Donner à r la valeur a mod b
FinTantque
Afficher b
Fin
Que fait cet algorithme ? Sous quel nom est-il connu ?
 Il peut être intéressant de faire « tourner à la main » un
algorithme pour deviner ce qu’il fait !
Exemple de programmation dans deux langages différents :
Avec Xcas :
Avec Algobox :
pgcd(a,b):={
local r;
r:=irem(a,b);
while (r!=0){
a:=b;
b:=r;
r:=irem(a,b)
}
return(b);
};
1
On remarque tout de suite que la syntaxe n’est pas la même, que les variables ne sont pas traitées de la même manière
(distinction ou non des variables muettes des autres variables, affectation, opération, etc).
Structure générale d’un algorithme
Un algorithme est en général décomposable en trois parties :
 Un pré-traitement : entrée des données au clavier, initialisation des valeurs, . . .
 Mise en place des données nécessaires à la résolution du problème
 Un traitement : calculs, manipulation des données, …
 Résolution pas à pas, après décomposition en sous-problèmes si nécessaire
 Un post-traitement : affichage des résultats sur l’écran, écriture dans un fichier, . . .
Souvent schématisé : Entrées - Traitement – Sortie
Exercice 1
Sur l’algorihme précédent, repérer la décomposition Entrées-Traitement-Sortie.
2. Instructions d’entrées/Sortie
Deux instructions essentielles :
 Pour obtenir une donnée entrée au clavier :
Lire la valeur de a
 Pour afficher un message et/ou un résultat à l’écran et/ou un point dans un repère :
Afficher le message « Le résultat est »
Afficher b
Tracer Point(a,b)
3. Variables, affectations et manipulation des données
Pour affecter une valeur a une variable :
Donner à a la valeur 12.
Exercice 2
Ecrire un algorithme permutant le contenu de deux variables a et b.
Exercice 3
Quel résultat affiche l’algorithme ci-dessous ?
Début
Donner à a la valeur 1
Donner à b la valeur 2
Donner à c la valeur 3
Donner à c la valeur a
Donner à a la valeur b
Donner à b la valeur c
Afficher b
Fin
2
Exercice 4
Quel résultat affiche l’algorithme ci-dessous ?
Début
Lire le nombre a
Donner à b la valeur a²
Donner à b la valeur 2b
Donner à b la valeur b – 5a
Donner à b la valeur b + 3
Afficher b
Fin
4. Structure alternée
La syntaxe la plus courante est celle-ci :
si test alors clause vraie sinon clause fausse fsi
 La clause fausse est facultative et peut être omise, ce qui donne :
si test alors clause vraie fsi
Exercice 5
Modifier cet algorithme de façon à obtenir l’affichage d’une éventuelle mention.
Début
Lire a
Si a<10
Alors
Afficher « Refusé »
Sinon
Afficher « Admis »
Fsi
Fin
Exercice 6
Ecrire un algorithme donnant le maximum de deux nombres a et b.
Exercice 7
Ecrire un algorithme affichant trois nombres a, b et c par ordre décroissant.
5. Structures répétitives
L’intérêt de résoudre un problème en utilisant l’outil informatique est de pouvoir déléguer à la machine
l’exécution de calculs répétitifs. C’est en cela que les boucles sont indispensables.
 On désigne par boucle une structure itérative dans un algorithme.
Il s’agit de répéter un bloc d’instructions plusieurs fois de suite. Plusieurs variantes.
Deux familles principales :
 Répéter un bloc d’instructions un nombre de fois donné avant de commencer
 Répéter un bloc d’instructions tant qu’une condition est vérifiée(ou jusqu’à ce qu’une condition
soit vérifiée)
Exemple 2 :
Par ailleurs, on retrouve le même intérêt que l’utilisation de Excel.
3
La structure itérative utilisée ici est celle-ci :
pour <var itérative> allant de <valeur de départ> à <valeur de fin> faire
<instructions>
fpour
 Dans ce genre de boucle, on ne doit jamais modifier la variable itérative.
………………………….
Début
………………………………..
Pour … allant de … à …
Faire
…………………………..
Fpour
………………………………
Fin
Exercice 8
Modifier l’algorithme précédent de façon à obtenir la somme des entiers de 1 à n, où n est en entier saisi
préalablement par l’utilisateur.
Exercice 9
Ecrire un algorithme affichant la liste des 50 premiers multiples de 3.
Exercice 10
Thomas place 10 000€ à intérêts composés au taux de 3%.
Ecrire un algorithme donnant le placement obtenu au bout de 10 ans.
 Pour aller plus loin, calcul de « complexité » : combien d’itérations réalise la boucle?
La structure itérative conditionnelle:
Tant que <condition> faire
<instructions>
ftantque
Exercice 11
Ecrire un algorithme affichant la liste des 50 premiers multiples de 3 en utilisant une boucle tant que.
Exercice 12
Parmi les algorithmes ci-dessous lesquels permettent de calculer n !.
Début
Lire n
Donner à res la valeur 1
Pour i allant de 1 à n faire
Donner à res la valeur res*i
Donner à i la valeur 15
Fpour
Afficher res
Fin
Début
Lire n
Donner à res la valeur 1
Donner à i la valeur 1
Tant que i<n faire
Donner à res la valeur res*i
i prend la valeur i + 1
Ftantque
Afficher res
Fin
Début
Lire n
Donner à res la valeur 1
Pour i allant de 1 à n faire
Donner à res la valeur res*i
Fpour
Afficher res
Fin
Début
Lire n
Donner à res la valeur 1
Tant que i<n faire
Donner à res la valeur res*i
i prend la valeur i + 1
Ftantque
Afficher res
Fin
4
6. Algorithmes récursifs
Exemple : n ! = n × (n – 1) ! et 0 ! = 1.
On peut alors écriture l’algorithme suivant à condition de donner un « nom » à l’algorithme.
Factorielle(n) :=
N, res deux nombres
Début
Lire n
Si n = 0
Alors res prend la valeur 1
Sinon res prend la valeur n × factorielle(n – 1)
Finsi
Afficher res
Fin
7. Probabilités
Exemple : Une urne contient 6 boules (4boules noires et deux boules rouges). Ces boules sont indiscernables au toucher. On
choisit une boule, au hasard, dans l’urne et on note sa couleur avant de la remettre dans l’urne, on répète 1000 fois ce tirage
et on relève la fréquence d’apparition des boules rouges.
On se propose de réaliser une simulation de cette expérience.
Début
n prend la valeur 0
Pour k allant de 1 à 1000 faire
Si Ent(10*Alea()+1)>7
Alors n prend la valeur n+1
Fsi
Fpour
f prend la valeur n/1000
Afficher f
Fin
Exercice 13
On considère le jeu suivant :
On tire successivement les cartes d’un jeu de 32 cartes devant un joueur.
Celui-ci peut à tout moment miser la couleur rouge sur la carte suivante.
Le joueur décide d’établir la stratégie suivante :
Dès que le nombre de cartes noires d »passe de 5 le nombre de cartes rouges tirées, il mise le rouge sur la carte
suivante.
Si ce cas de figure ne se produit pas avant l’avant dernière carte, alors il mise sur l’avant dernière carte.
Réaliser dans un premier temps un algorithme simulant 1000 de ces expériences. Modifier l’algorithme de façon à
obtenir des résultats pour différentes stratégies (+4 cartes, +6 cartes etc…)
5
Téléchargement