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