Algorithmique avec Xcas
N.B.: les programmes de lycée imposent aujourd'hui l'utilisation
du langage Python.
Cette page a été créée avant cette
règle, lorsque les programmes n'imposaient pas un langage précis,
mais l'apprentissage de concepts de l'algorithmique
en langage naturel, ce qui était
à mon avis bien plus censé.
Il est bien sur possible d'utiliser Xcas en syntaxe compatible Python mais
c'est probablement marginal, il s'agit donc d'une page témoignage
de ce qu'il est possible de faire avec Xcas pour enseigner l'algorithmique.
Peut-être servira-t-elle plus si des décideurs avisés
reviennent sur cette règle...
Document ressource lycée
Algorithmique et programmation lycée
par Renée De Graeve et Bernard Parisse, correspond aux nouveaux
programmes 2017. Ce tutoriel est interactif, vous pouvez modifier et
exécuter des commandes et programmes directement depuis votre
navigateur. Disponible également en
version PDF imprimable.
Pour aller plus loin, un tutoriel sur la
récursivité avec Xcas.
Propositions de sujets de TP
Énoncés rédigés par le groupe
"Calcul formel et programmation avec Xcas" l'IREM Grenoble
(Thomas Meyer, Claire Geoffroy, Emilie Quéma, Nataly Essonnier,
Michèle Gandit, Bernard Parisse).
La plupart des exemples sont proposés en syntaxe Xcas et en syntaxe Python
(la compatibilité de syntaxe Python a été
ajoutée dans Xcas pour faciliter son utilisation
par des personnes connaissant Python). Les programmes des sessions
écrits en gras (Python)
fonctionnent avec un interpréteur Python (après avoir fait
from math import * dans certains cas), ceux écrits
en italiques (Python) fonctionnent partiellement, cf. la section
Syntaxe Python pour plus d'informations sur la compatibilité.
- Variables,
types, affectation, test, boucle, fonction, syntaxe
Xcas ou
Python
- Seconde: tortue
Xcas,
Joyeux Xcas ;
Python,
Joyeux Xcas (version Python)
- Seconde, longueur de courbe
Xcas,
Python
- Seconde, tableau de valeurs et recherche de minimum
Xcas,
Python
- Seconde: tracé de courbe, syntaxe
Xcas ou
Python
- Seconde: Équation d'une droite
Xcas
ou
Python
- Seconde, fréquence dans un échantillon, syntaxe
Xcas ou
Python
-
Lycée: décomposition d'un entier en facteurs premiers par division
Xcas,
Python
-
Lycée: le paradoxe du duc de Toscane
Xcas,
Python
- Première, équation du second degré
Xcas,
Python
- Première, suites
Xcas
,
Python
- Première, Loi binomiale et loi géométrique tronquée
Xcas
,
Python
- Première Triangle de Pascal
Xcas,
Python
-
Terminale: Dichotomie
Xcas
,
Python
-
Terminale, Calcul approché d'intégrales.
Xcas
,
Python
-
Terminale: illustration interactive sur la distribution cumulée de la
loi normale
-
Convergence d'une moyenne vers la loi normale.
- PGCD binaire:
Xcas
-
Identité de Bézout.
-
Marche aléatoire sur un graphe
-
Jour de la semaine:
Xcas
-
algorithme de Dijkstra
-
urnes d'Ehrenfest
(d'après A. Busser pour Numworks)
-
calcul de π
(d'après A. Busser pour Numworks)
-
Nombres flottants (Licence)
Xcas,
Python
- Licence
Systèmes linéaires, LU, conditionnement
- Licence
Décomposition QR, moindres carrés,
exemple régression linéaire
- Méthodes itératives: point fixe, Newton, puissance
Xcas
,
Python
- Interpolation polynomiale
phénomène de Runge, points de Tchebyshev
- Intégration numérique
rectangles, trapèzes, Simpson, ordre, Monté-Carlo,
Richardson-Romberg
-
Résolution approchée d'équations
différentielles ordinaires:
Xcas
,
Python
- Polynôme en une variable, Horner et Taylor
Xcas,
Python
- PGCD de polynômes, d'Euclide au sous-résultant:
Xcas,
Python
-
Agrégation:
Localisation des racines d'un polynôme
- Algèbre linéaire sur un corps fini (Agrégration)
Xcas
,
Python
- Bases de Groebner
cyclic6.
Pour des calculs plus intensifs, installez Firefox version ≥ 58
et inspirez-vous de
cyclic7 modulaire.
Pour des calculs vraiment intensifs, utilisez la version native de Xcas.
- Produit, quotient de polynômes à plusieurs variables
(pour navigateur compatible avec web-assembly, par exemple Firefox ≥ 58)
benchmark de Fateman n=20
La syntaxe Python dans Xcas permet aux personnes connaissant le langage
Python une prise en main rapide de la programmation dans Xcas.
Il faut prendre quelques précautions :
- activez la compatibilité de syntaxe Python dans la
configuration (bouton en haut à gauche de Xcas pour Firefox
ou menu Cfg, Configuration du CAS de Xcas), afin que les
assistants utilisent des structures de controle Python et que
certaines commandes comme int aient le même
comportement qu'en Python.
- la syntaxe Python est activée lorsqu'on
commence une commande par un commentaire Python (#), ou
une structure de controle Python (def ...:,
if...:, ...).
- la compatibilité se limite à la
programmation impérative courante: test, boucle,
fonction, slices, liste en compréhension simple.
La programmation orientée objet n'est pas
supportée, le else en fin de for/while,
yield et les listes en compréhension imbriquées non plus.
- il est souvent inutile de charger des modules avec import,
presque toutes les instructions Xcas sont directement accessibles. Les
instructions built-in Python fonctionnent en
général en Xcas (sauf pour les chaines) ainsi
que le module random (et math/cmath bien sur).
Par contre les modules comme matplotlib, scipy, numpy
ne sont pas supportés, il faut utiliser des instructions
natives Xcas à la place (utilisez l'assistant Maths pour
trouver les plus courantes).
Réciproquement, une session Xcas écrite en syntaxe Python
qui contient des objets CAS
(expressions symboliques, flottants multi-précisions, ...)
ou certaines commandes intégrées de Xcas
(par exemple commandes de tracé)
ne fonctionnera pas en Python pur.
- Attention aux conflits de noms de fonctions avec des noms de
commande de Xcas. Pour les eviter, vous pouvez par exemple
choisir des noms de fonction en francais et en commencant par une
majuscule.
- Attention aux délimiteurs de chaines de caractères
utilisez "...", en effet '...' sert en calcul formel
à différer l'évaluation d'une expression
- la division de deux entiers renvoie un rationnel (ou un
entier), et pas un nombre flottant
- ^ est synonyme de **
- Attention liste1+liste2 ne concatène pas
deux listes mais les additionne comme des vecteurs, utilisez
liste1.extend(liste2) pour concaténer,
n*liste ne duplique pas une liste, elle la multiplie
comme un vecteur, utilisez liste*n pour dupliquer une liste.
- = est traduit en :=. On peut bien sur
utiliser := pour l'affectation à la place de
=, mais il faut utiliser === pour créer une équation
comme solve(x===x^2-1) ou P:=x^3-2x+1; P(x===x+1).
- Attention l'affectation dans une liste se fait par
référence en mode compatible Python (comme en Python),
alors qu'en mode Xcas elle se fait par valeur
si on utilise := (par référence avec =<).
Voir aussi la section comparaison pour une
comparaison entre le langage Xcas natif et le langage Python.
Pour ceux qui envisagent d'utiliser Xcas, voici quelques documents
pour compléter le document ressource ci-dessus.
-
Un programme avec Xcas.
Tutoriel sous forme d'une animation flash, il
est conseillé de la visualiser en plein-ecran
(raccourci clavier F11 avec Firefox).
-
Algorithmes au bac S par Renée De Graeve (source LaTeX).
-
Algorithmique
en seconde avec Xcas par J.P. Branchard, R. De Graeve et B. Parisse,
qui introduit la notion de fonction à
partir de script de construction géométrique,
aussi disponible au format PDF.
-
Algorithmique
avec Xcas par B. Parisse, qui commence par
la notion de ligne de commande pour arriver progressivement
aux fonctions. Une variante, complétée pour les
candidats à l'agrégration interne.
-
Des jeux pour une introduction à l'algorithmique en seconde
par R. De Graeve, qui propose d'introduire la notion d'algorithmique
par des jeux.
-
Algorithmique sous XCAS par Philippe Lac
-
documents Xcas sur le nouveau programme
de seconde (académie de Bordeaux)
-
page algorithmique académie de Grenoble
-
page
algorithmique 2nde de l'IREM de Lille (voir aussi la page 1ere).
-
page
algorithmique académie de Rouen
-
IREM de Lyon
page algorithmique,
documents 2012,
-
Animations sur le nouveau programme de seconde - Octobre 2009
(Creteil, tableur, scilab, Xcas)
- aide-mémoire Hachette Declic 2nde
Scratch, Scilab, Xcas
-
Algorithmique et calcul formel lycée
(Stage 2011 Aix-Marseille)
Pour aller plus loin
-
le manuel d'algorithmique de Xcas
(menu Aide->Manuels->Programmation)
contient ce que peut etre un langage naturel en algorithmique et
diverses traductions (dont TI et Xcas), ainsi que des exemples de
programmes dont certains sont sans doute pertinents en seconde.
-
Correction Xcas du stage algorithmique
de l'IREM de Grenoble, contient des exemples de programme sur
des thèmes divers (arithmétique, tortue logo...)
-
Stage IREM de Lille 2011
-
On pourra
aussi trouver de nombreuses idées de programmes dans la variante
de Logo implémenté dans Xcas, cf. le
manuel Logo Xcas.
-
Le document
algorithmique au lycée par Guillaume Connan,
contient des algorithmes d'arithmétique, analyse, etc. traduits
en Xcas et en Caml
- Vous pouvez aussi consulter le
document ressource officiel,
-
Enfin, le forum de Xcas
est ouvert pour les discussions relatives
à ce nouveau programme.
- Python
Il y a pas mal de similitudes entre les deux languages:
ils sont tous les deux non typés et
interprétés, avec des conteneurs (listes, chaines) simples à
utiliser. On passe facilement de l'un à l'autre ... surtout si on
utilise Xcas en syntaxe Python!
Voici quelques différences :
- La division des entiers renvoie un nombre flottant en Python
3 ou le quotient euclidien en Python 2,
elle renvoie un rationnel en Xcas. L'utilisation des
rationnels est nettement moins naturelle en Python qu'en Xcas
from fraction import *
a=Fraction(1,2)
-
La notation ^ pour la puissance n'est pas admise en Python
(elle se note **, notation également admise en Xcas).
- Les nombres complexes utilisent la lettre j en Python,
i en Xcas, avec multiplication implicite obligatoire en Python
- Python n'a pas de type de base pour les vecteurs et matrices, +
entre deux listes les concatène, alors que la * par un entier
réplique une liste.
- Python n'a pas de type de base pour les expressions symboliques.
Conséquence:
obtenir une représentation graphique de fonction nécessite
plusieurs instructions de la librairie matplotlib au lieu d'un simple
plot() en Xcas,
ce qui est plus difficile à
maitriser pour un débutant ou à mémoriser
pour un utilisateur occasionnel.
-
L'affectation se fait dans Xcas avec := ce qui prête moins à
confusion pour les débutants que = en Python.
-
Python ne propose pas de fin de bloc (boucle, test) explicite,
c'est l'indentation qui joue ce role. Si on modifie une structure
(par exemple déplacement d'un bloc au sein d'un autre), il
faut réindenter manuellement ce qui est potentiellement
source d'erreur.
-
Il n'y a pas de librairies à charger dans Xcas, tout ce qui
est nécessaire pour faire des maths dans l'enseignement
est déjà disponible.
- La librairie de base mathématique Python est beaucoup moins
complète que celle de Xcas. Ceci a des avantages et des
inconvénients, par exemple programmer un algorithme
de PGCD en Python peut paraitre plus intéressant puisque
la fonction n'existe pas de base.
Par contre, on peut programmer des algorithmes mathématiquement plus avancés
en Xcas sans trop d'efforts puisque les outils de base sont là,
c'est surtout le cas en calcul formel, géométrie, en
arithmétique
(par exemple liste des diviseurs d'un entier, PGCD, Bezout,
nombres premiers ...) et en algèbre exacte (polynomes,
algèbre linéaire). Bien sur on peut compléter Python
avec des modules, par exemple giacpy pour le calcul formel,
mais c'est forcément
moins transparent que d'avoir des structures de données natives.
-
Les listes/tableaux sont passés par référence
en Python, et par valeur en Xcas (sauf utilisation explicite de
=<).
Donc en Python, si vous écrivez l=[1,2,3]
puis l1=l puis l1[0]=5 vous modifiez la liste
l (l[0] vaut 5).
-
La syntaxe de la boucle définie est plus simple en Xcas qu'en Python, qui nécessite
de définir une liste ou un générateur.
Python ne dispose pas de boucle "répéter jusqu'à".
-
Les variables locales doivent être déclarées explicitement en Xcas
(sinon un warning apparait),
alors qu'elles sont implicites en Python (ce sont les variables globales
qui doivent être déclarées), ce qui peut amener à des erreurs
si on fait une faute de frappe dans un script Python.
-
L'aide de Xcas est entièrement en francais.
De plus Xcas permet d'utiliser des mots-clef en français pour les boucles, tests
et pour les instructions de base.
- TI
Xcas propose un mode de syntaxe compatible avec les TI
(89, 92, voyage 200, nspire cas).
Le langage de Xcas est toutefois plus
complet: il est fonctionnel (on peut passer une fonction en argument
à une autre fonction).
Il n'y a pas de distinction entre fonction et programme en Xcas,
et pas de limitation à l'usage des entrées/sorties dans une fonction (ni de limitation
sur les entrées/sorties des TI nspire).
D'autre part, la mise au point d'un programme est facilitée en Xcas par le débogueur interactif.
-
Javascript
Les deux langages sont très proches. On peut d'ailleurs utiliser la
syntaxe javascript des structures de base dans Xcas. Le principal
avantage
de Javascript est qu'on peut exécuter (et mettre au point) un programme dans
n'importe quel navigateur sans rien charger.
Une particularité de Javascript
est que les entiers sont représentés par des nombres
flottants, comme sur les calculatrices non formelles.
Le programme de seconde qui est entré en vigueur en 2017
modifie l'enseignement de l'algorithmique. Quelques remarques :
- Les premiers
objectifs à atteindre avant de faire des programmes pourraient etre
de
- faire la différence entre différents types: entiers,
flottants, noms de variables (à
une ou plusieurs lettres), chaines de caractères et peut-etre
listes ou/et tableaux. Attention au séparateur .
entre partie entière et décimale.
- comprendre la multiplication implicite, non implicite,
les priorités entre opérations et l'usage
des parenthèses pour écrire une expression
syntaxiquement correcte. Savoir utiliser la virgule pour séparer
les arguments d'une fonction existante.
Savoir utiliser les crochets pour indicier
dans une chaine de caractères (ou dans un tableau),
- faire la différence entre égalité dans une
équation, affectation et test d'égalité
- faire la différence entre fonction et expression
(à relier éventuellement
au chapitre Fonctions du programme de seconde),
- Savoir définir
une fonction par une formule algébrique.
-
Savoir définir une fonction avec un test (par exemple valeur
absolue, le minimum ou le maximum de 2 valeurs, etc.).
-
La définition d'une fonction par une boucle devrait se faire
ensuite (en particulier pour les boucles
"tant que" avec un test d'arrêt), en meme temps que la notion
d'arguments, de variables locales et de valeur de retour d'une fonction.
La récursivité trouverait bien sa place
en Terminale S lors de l'étude de la récurrence.
-
Enseigner l'algorithmique devant les machines
nécessite d'avoir acquis de l'expérience avec le langage.
Sinon, la séance se transforme vite en une
forêt d'élèves bloqués et
attendant que le prof vienne, et celui-ci risque de bloquer sur une erreur
stupide difficile à repérer parce qu'il sera stressé
par les demandes des autres élèves bloqués.
En particulier, il ne suffit pas d'etre capable de comprendre
une fonction déjà écrite ni meme d'écrire soi-meme une petite fonction,
il faut avoir suffisament de recul pour repérer rapidement les erreurs
de syntaxe d'une part, mais surtout les erreurs à l'exécution. Il est
alors commode de savoir utiliser un déboggueur
(qui peut être extremement simple à mettre en oeuvre, dans Xcas on
écrit simplement debug( suivi de la commande à débugguer), d'autant
qu'il peut
aussi servir à montrer le déroulement d'un algorithme
pas à pas pour aider des élèves à le comprendre.
-
A l'avenir, on peut espérer remplacer les PC en salle informatique
par des tablettes ou smartphones.
Nous ajouterons ici des ressources au fur et à mesure que
nous en recevrons, n'hesitez pas à nous en envoyer!