Accueil > Productions > Ressources pédagogiques > Lycée > Seconde > Algorithmique > Un exemple introductif à l’algorithmique sur machine
Un exemple introductif à l’algorithmique sur machine
mardi 23 juin 2009, par
Table des matières
- L'algorithme exemple
- Les différents langages/environnements
- Avec la calculatrice simple (non programmable)
- Avec une calculatrice programmable (TI-82, Casio Graph85)
- Avec le tableur
- Avec le langage Javascript
- Avec le langage Pascal
- Avec le langage Basic d'OpenOffice.org
- Avec le langage d'XCas
- Avec le langage de SciLab
- Avec le langage naturel visuel de Scratch
- Comparaison des langages employés
- Premier contact avec le calcul formel
- Tutoriels pour prendre en main
- Sitographie
1. L'algorithme exemple
1.1 Objectif
Le nouveau programme de seconde (en pré-version au mois de mai 2009) prévoit une partie intitulée Algorithmique et intègre explicitement le recours à des algorithmes pour résoudre des problèmes. La dernière version des programmes rend l'algorithmique transversale dans les programmes.
Même un enseignant n'ayant jamais fait de programmation peut s'emparer du sujet et le traiter simplement. Reste à choisir le support qui lui convient le mieux (actuellement indiqué comme : le tableur, la calculatrice ou un logiciel adapté). Dans la suite, une exemple basique est proposé avec plusieurs solutions pratiques.
Cet exemple a donc un double rôle :
- Montrer à quel niveau on peut commencer,
- Permettre aux professeurs de se faire une idée sur plusieurs langages candidats à l'enseignement de l'algorithmique.
1.2 L'énoncé
L'analyse de cet énoncé fait apparaître un algorithme de calcul en 5 étapes :
Étape 1 : Choisir un nombre. Étape 2 : Lui ajouter 3. Étape 3 : Multiplier cette somme par le nombre de départ. Étape 4 : Retrancher au résultat le carré du nombre de départ. Étape 5 : Annoncer le résultat obtenu.
Il comporte 3 phases :
- entrées : il faut des données, c'est l'étape 1
- traitement : on travaille ces données, ce sont les étapes 2 à 4
- sorties : on annonce un résultat, c'est l'étape 5
Voyons ce que cet algorithme produit avec différents supports.
2. Les différents langages/environnements
2.1 Avec la calculatrice simple (non programmable)
On peut traiter cet algorithme à la main" par " On peut traiter cet algorithme à la main (en supposant que le nombre auquel le spectateur a pensé est, par exemple, 5
-
- soit comme cela, étape par étape :
5 5+3= x5= -5²= On lit le résultat : 15.
-
- soit directement comme ceci :
(5+3)x5-5²= On lit le résultat : 15
Produire le résultat du calcul pour d'autres spectateurs serait "pénible"car chacun d'eux devrait chaque fois refaire toutes les étapes de l'algorithme. Un logiciel de programmation permet d'automatiser l'exécution de cette tâche.
2.2 Avec une calculatrice programmable (TI-82, Casio Graph85)
Chaque machine est différente. Voyons les éléments communs des langages implémentés dans ces machines et quelques différences.
Cas de la TI-82
On passe en mode programmation via la touche PRGM. Voir le tutoriel.
-> Pour voir l'image plus grande : clic droit, puis Afficher image
Analysons ce programme :
- La 1ère ligne (Input N) demande à l'utilisateur de saisir un nombre : la valeur est stockée dans une mémoire nommée N.
- La flèche ->, qui obtenue par appui sur la touche STO, demande à la calculatrice de stocker un résultat dans une mémoire nommée C. Stocker une valeur s'appelle faire une affectation.
- Au fur et à mesure du calcul on stocke le résultat dans la même mémoire (par économie !).
- La dernière ligne (Disp C) affiche la valeur contenue dans la mémoire C.
Explications sur ces abréviations venues de l'anglais, que l'on retrouve un peu partout et qui éclairent sur leur emploi !
- Input vient de input qui veut dire entrée
- STO vient de to store qui veut dire stocker
- Disp vient de to display qui veut dire afficher
Cas de la Casio Graph-85
On passe en mode programmation via le menu PRGM. Voir le tutoriel.
-> Pour voir l'image plus grande : clic droit, puis Afficher image
Analysons ce programme :
- La 1ère ligne ("Nombre="?->N) demande à l'utilisateur de saisir un nombre:
un texte est affiché (Nombre=) et le ? invite l'utilisateur à faire la saisie, laquelle est stockée (->)dans une mémoire nommée N. - La flèche -> demande à la calculatrice de stocker un résultat dans une mémoire :
à partir de la 2ème ligne, les résultats de calculs sont stockés dans la mémoire C. - La dernière ligne (C ) affiche la valeur contenue dans la mémoire C.
2.3 Avec le tableur
Voilà ce qui est visible dans l'interface et les différentes formules.
L'utilisateur modifie la donnée en B1 (l'entrée) et le résultat est présenté en B5 (la sortie).
Avec le tableur, passer en mode programmation c'est modifier le contenu d'une cellule pour y saisir une formule commençant par un =.
Faire un affectation c'est mettre un nombre dans une cellule.
Contrairement à la programmation dans d'autres langages, on a accès directement à l'affichage des résultats de chaque étape.
2.4 Avec le langage Javascript
On recopie le script suivant dans le cadre de droite de cette adresse. Voir le tutoriel.
//saisie var nombre=demander("Calcul Magique. Entrez le nombre choisi :"); //astuce var calcul1=nombre-0; var calcul2=calcul1+3; var calcul3=calcul2*nombre; var calcul4=calcul3-(nombre*nombre); //sortie afficher("Le résultat est "+calcul4);
puis on appuie sur le bouton EXE au-dessous à droite.
-> Pour voir l'image plus grande : clic droit, puis Afficher image
Il est alors demandé de saisir un nombre : 5 pour notre exemple.
Après validation, il est sorti : "Le résultat est 15."
Analysons le script recopié pour en comprendre le mécanisme:
//saisie
e script est commenté : chaque ligne commençant par // n'est pas interprétée par le compilateur, elle est destinée au programmeur ou à celui qui veut utiliser ce programme.
var nombre=demander("Calcul Magique. Entrez le nombre choisi :");
var indique la déclaration d'une variable; cette
déclaration signifie qu'on demande au logiciel d'utiliser une variable
pour stocker une information.
nombre indique le nom de la variable à utiliser.
le signe = : ce qui suit le signe = sera la valeur stockée dans la variable.
demander("Calcul Magique. Entrez le nombre choisi :") : la fonction demander
oblige le logiciel à demander à l'utilisateur une saisie (texte ou
nombre), elle accompagne cette demande d'un texte informatif que l'on
écrit entre guillemets (").
le signe ; : termine toute ligne de code, c'est un marqueur de fin de ligne obligatoire.
afficher("Le résultat est "+calcul4);
afficher est une fonction qui prend en charge l'affichage du texte qui lui est transmis. Ce texte est ici composé d'une partie texte entre guillemets "Le résultat est " et d'une partie numérique calcul4 qui contient le résultat du traitement. Le compilateur supporte cette « addition » d'un texte et d'un nombre : il converti automatiquement le nombre en texte et l'ajoute (concaténation) au texte précédent.
Les autres lignes sont des calculs : à gauche du = se trouve la variable recevant le résultat du calcul proposé à droite, chaque opération est ponctuée par un ;.
2.5 Avec le langage Pascal
On recopie ce script dans un compilateur Free Pascal.
program magique; var n : integer; var c2,c3,c4 : integer; begin (* Saisie *) writeln('Saisir un nombre'); readln(n) (* Calculs *) c2:=n+3; c3:=c2*5; c4:=c3-n*n; (* Sortie*) writeln('Le résultat est ',n); end.
ou dans la réponse à l'événement OnClick d'un bouton mis sur une fenêtre d'un projet Delphi ou Lazarus - Voir le tutoriel.:
procedure .... (*<- on ne change rien !*) var s : string; var n : integer; var c2,c3,c4 : integer; begin (* Saisie *) s:=InputBox('Fenêtre de saisie', 'Saisir une valeur', '0'); n:=strtoint(s); (* Calculs *) c2:=n+3; c3:=c2*5; c4:=c3-n*n; (* Sortie*) showMessage('Le résultat est '+inttostr(c4)); end;
On retrouve la syntaxe du Pascal.
- Tout commence par la déclaration de variables typées. On doit déclarer le nom des variables et indiquer leur type : ici on a des nombres entiers (Integer) et du texte (String, qui signifie chaîne de caractères).
- Le symbole d'affectation à une variable est le := (et non le = simple), les instructions sont écrites dans des blocs begin ... end; et le caractère ; ponctue chaque ligne d'instruction.
Les lignes commençant pas (* et finissant par *) sont des commentaires non interprétés par le compilateur (à destination du (re) lecteur).
La 1ère différence entre ces 2 scripts est que algorithme est directement écrit dans le corps principal du programme (en mode texte) et que l'autre est la réponse à l'appui sur un bouton (mode graphique).
La 2nde différence entre les 2 scripts se situe au niveau des entrées/sorties à destination de l'utilisateur : l'une est en mode texte (ou console), l'autre en mode graphique avec fenêtres.
- mode texte :
writeln('Saisir un nombre'); readln(n)
writeln('Le résultat est ',n);
- mode graphique :
s:=InputBox('Fenêtre de saisie', 'Saisir une valeur', '0'); n:=strtoint(s);
showMessage('Le résultat est '+inttostr(c4));
Les mots clés employés sont basés sur l'anglais :
- input est complété par box qui signifie boîte : boîte d'entrée ou boîte de saisie
- showmessage est composé de to show (montre) et message (message) pour montrer le message
- write (écrire) et read (lire) sont compléter par ln (abréviation de line pour retour à la ligne) afin de n'avoir qu'une information par ligne.
- strtoint se décompose en 3 parties str pour String (chaîne), to pour to (vers) et int pour Integer (entier) soit « chaîne vers entier »
- strtoint se décompose en 3 parties int pour Integer (entier), to pour to (vers) et str pour String (chaîne), soit « entier vers chaîne ».
2.6 Avec le langage Basic d'OpenOffice.org
Créons une nouvelle macro dans le dossier Basic. Voir le tutoriel.
REM ***** BASIC ***** Sub Main Dim texte As String Dim nombre As Integer texte = InputBox ("Veuillez entrer un nombre : ","Saisie","0") nombre = val (texte) rem ---- calcul2 = nombre+3 calcul3 = calcul2*nombre calcul4 = calcul3 - (nombre*nombre) rem ----- texte = "Le résultat est " + str(calcul4) + " " MsgBox ( texte , 64, "Résultat") End Sub
Cette macro peut être appelée depuis l'un des modules OpenOffice (Writer, Calc ...) ou exécutée directement dans l'éditeur Basic (bouton Play vert > sous Aide)
Analysons ce programme.
Les lignes commençant par REM sont des commentaires non interprétés par le compilateur.
Tout commence par Sub Main et se termine pas End Sub :
- on est dans une fonction (sub en référence à sous pour sous-routine)
- Main qui signifie principale indique que c'est la routine principale de la macro, exécutée directement contrairement à tout autre routine (bloc Sub ... End Sub) qui définira une fonction exécutée uniquement par appel explicite.
Les 2 lignes commençant par Dim (pour dimension) définissent des variables et spécifient leurs types : nombre entier (Integer) ou texte (String pour chaîne de caractères).
Puis les instructions :
texte = InputBox ("Veuillez entrer un nombre : ","Saisie","0") nombre = val (texte)
InputBox provoque l'affichage d'une fenêtre de saisie : on peut régler son titre, un texte d'accompagnement et une valeur initiale. Elle ne travaille que sur du texte d'où les guillemets autour du 0. La saisie est logiquement stockée dans une variable de type chaîne (texte).
D'où l'utilisation de la fonction val qui permet de convertir une chaîne en nombre.
texte = "Le résultat est " + str(calcul4) + " " MsgBox ( texte , 64, "Résultat")
MsgBox provoque l'affichage d'une fenêtre d'information avec en paramètres le texte à afficher (texte), la taille maximale en caractères (64) et un titre pour la fenêtre ("Résultat").
La ligne précédente prépare le contenu du texte (texte) à afficher : elle utilise la fonction str qui transforme un nombre (calcul4) en chaîne et l'insère dans un texte proposé entre guillemets.
Les mots clés employés sont basés sur l'anglais :
- input est complété par box qui signifie boîte : boîte d'entrée ou boîte de saisie
- msgbox est composé de msg pour message (message) et box pour boîte : boîte de message
- val vient de value (valeur) : convertir une chaîne (texte) en sa valeur numérique
- str vient de string (chaîne) : convertir un nombre en chaîne de caractères (texte).
2.7 Avec le langage d'XCas
On recopie le script créant une nouvelle fonction dans XCas.
magique(n):={ c2:=n+3; c3:=c2*n; c4:=c3-n*n; return(c4); }
- Si vous utilisez la version en ligne, voilà ce que vous obtenez :
- Si vous utilisez la version installée sur votre ordinateur - Voir le tutoriel.
Analysons le script.
Ici on déclare plutôt une fonction : notre algorithme pourra être utilisé comme une fonction habituelle de Xcas : invoquer « magique(5) » renvoie la valeur 15.
Ainsi, on constate que XCas gère différemment les entrées/sorties. Par exemple, il n'y a pas d'invite à saisir une donnée ! C'est un choix et non une obligation. (voir fin du paragraphe)
La déclaration de la fonction commence par son nom (magique) suivi entre parenthèses de noms des différentes variables (ici, n seulement) dans lesquelles seront stockées les valeurs passées en paramètres.
Puis on a un := pour affecter à ce nom un code source : il commence avec une accolade ouverte { et se termine par une accolade fermée }. Entre ces 2 accolades, on trouve des calculs où le := sert d'affectation, chaque calcul se termine par un ;
Le return (retourne ou renvoie en anglais) indique entre parenthèses le résultat de la fonction « à renvoyer » (ici le résultat contenu dans c4).
2.8 Avec le langage de SciLab
Merci à Jean-Marc Duquesnoy du Lycée André Malraux de Béthune pour son document d'initiation à SciLab
On recopie le script créant une nouvelle fonction pour SciLab. Voir le tutoriel.
function c4=magique(n) c2=n+3; c3=c2*n; c4=c3-n*n; endfunction;
Une fois le script saisir, menu Exécuter puis Load into SciLab
Analysons le script.
Ici on déclare plutôt une fonction : notre algorithme pourra être utilisé comme une fonction habituelle de SciLab : invoquer « magique(5) » renvoie la valeur 15.
Ainsi, on constate que SciLab gère différemment les entrées/sorties. Par exemple, il n'y a pas d'invite à saisir une donnée ! C'est un choix et non une obligation. (voir fin du paragraphe)
La déclaration de la fonction commence par le mot clé function puis un nom de variable pour stocker le résultat. Le symbole = est suivi du nom de cette nouvelle fonction (magique) avec entre parenthèses de noms des différentes variables (ici, n seulement) dans lesquelles seront stockées les valeurs passées en paramètres.
Le code de la fonction se termine par le mot clé endfunction. Entre ces 2, on trouve des calculs où le = sert d'affectation, chaque calcul se termine par un ;
Contrairement à XCas il n'y a pas de return car on a indiqué dès le départ le nom de la variable que sera utilisée par SciLab pour renvoyer le résultat.
Voici un script sans passer par la déclaration d'une fonction :
par=x_mdialog('Saisie',['valeur de n'],['0']); n=evstr(par(1)); c2=n+3; c3=c2*n; c4=c3-n*n; disp(n,'Pour n='), disp(c4,'on obtient');
x_mdialog demande de faire une saisie entrée, la valeur est saisie dans le variable par.
evstr (de l'anglais eval string) converti la saisie textuelle en nombre et stocke la valeur dans la variable n.
disp
(afficher en anglais) affiche le 1er paramètre avec un commentaire pour
le précéder (valeur de n choisir et valeur du résultat trouvé).
2.9 Avec le langage naturel visuel de Scratch
On construit le script suivant. Voir le tutoriel.
-> Pour voir l'image plus grande : clic droit, puis Afficher image
Quand on active le logiciel en appuyant sur le drapeau vert, on obtient ceci :
Il y a 2 phases :
- initialisation quand on démarre l'animation
- réaction au clic sur le chat pour faire le calcul et l'afficher.
Le langage est simple, explicite en français. La construction du calcul est la plus intéressante par l'utilisation des opérateurs, mais assez fastidieuse (on ne peut pas faire de copier-coller)
Remarque : on aurait pu se passer de la phase d'initialisation ! Elle n'est là que pour montrer comment fonctionne Scratch, notamment pour inviter l'opérateur à agir.
2.10 Comparaison des langages employés
L'organisation générale d'un algorithme se résume toujours à :
- Entrée de données
- Traitement
- Sortie de résultats
Seul le vocabulaire change, notamment pour les Entrée/Sortie :
- entrée : la façon de s'adresser à l'utilisateur pour lui demander de fournir des données à exploiter : ?, demander, readln, inputbox (amis angliciste bienvenus)
- sortie : la façon de répondre à l'utilisateur pour lui soumettre des données en résultat : (rien), , afficher, writeln, showmessage.
Les opérateurs du traitement sont les mêmes. Seuls, les symboles d'affectation varient :
- -> pour les calculatrices, le nom de la mémoire (variable) étant placé après l'opération
- = ou := pour les compilateurs sur ordinateurs, le nom de la variable (mémoire) étant placé avant l'opération (sauf pour Scratch qui utilise une expression française "mettre ... à ...")
2.11 Premier contact avec le calcul formel
XCas, en tant que logiciel de calcul formel est capable de faire du calcul algébrique littéral. On peut, avec ce logiciel, démontrer directement que (x+3)*x-x*x=3*x à l'aide de la fonction Simplify :
simplify(magique(n))
3. Tutoriels pour prendre en main
Ces tutoriels sont une réponse rapide à la situation suivante :
on vient d'installer un environnement de programmation et on veut
recopier le programme de calcul proposé, quelles sont les manipulations
à faire ?
Il suffit de suivre pas à pas l'animation (il y a un bouton pause et une barre de navigation pour étudier les actions).
3.1 Une TI-82
3.2 Une Casio Graph85
The
video content presented here requires a more recent version of the
Adobe Flash Player. If you are you using a browser with JavaScript
disabled please enable it now. Otherwise, please update your version of
the free Flash Player by downloading here.
3.3 L'éditeur Javascript en ligne
The
video content presented here requires a more recent version of the
Adobe Flash Player. If you are you using a browser with JavaScript
disabled please enable it now. Otherwise, please update your version of
the free Flash Player by downloading here.
3.4 Lazarus (Pascal)
The
video content presented here requires a more recent version of the
Adobe Flash Player. If you are you using a browser with JavaScript
disabled please enable it now. Otherwise, please update your version of
the free Flash Player by downloading here.
3.5 Le Basic d'OpenOffiche.org
The
video content presented here requires a more recent version of the
Adobe Flash Player. If you are you using a browser with JavaScript
disabled please enable it now. Otherwise, please update your version of
the free Flash Player by downloading here.
3.6 La programmation avec XCas
The
video content presented here requires a more recent version of the
Adobe Flash Player. If you are you using a browser with JavaScript
disabled please enable it now. Otherwise, please update your version of
the free Flash Player by downloading here.
3.7 La programmation avec SciLab
The
video content presented here requires a more recent version of the
Adobe Flash Player. If you are you using a browser with JavaScript
disabled please enable it now. Otherwise, please update your version of
the free Flash Player by downloading here.
3.8 La programmation avec Scratch
The
video content presented here requires a more recent version of the
Adobe Flash Player. If you are you using a browser with JavaScript
disabled please enable it now. Otherwise, please update your version of
the free Flash Player by downloading here.
4. Sitographie
Elle n'est pas exhaustive mais est un bon point de départ. Après on suit les liens sur Internet.
4.1 Algorithmique
- La page Algorithmique de Wikipedia.org :
résumé présentant un historique et une étendue de la notion - Bibliographie "amoureuse" réalisée par Alain Juhel.
4.2 Algorithmes
- La page Javascript du site ChronoMath de Serge Mehl :
la plupart des algorithmes mathématiques usuels
4.3 Environnements de programmation
Le langage Javascript (Wikipedia.org) :
- Cours/Tutoriels/FAQ sur le Javascript :
pour débuter ou progresser, accès à d'autres langages du web
Le langage Pascal (Wikipedia.org) :
- L'environnement Free Pascal :
développement en mode texte - L'environnement Lazarus (Wikipedia.org) :
- développement dans un environnement graphique, libre, gatuit et multiplateforme (Windows, Linux, MacOS...) équivalent du professionnel Delphi (c) Borland.
- Cours/Tutoriels/FAQ sur le Pascal et l'environnement Delphi portables sur Lazarus
- Tutoriel sur Lazarus un peu ardu mais c'est en français.
Le langage C (wikipedia.org) [incontournable même si non présenté ici]
- Utiliser en ligne
- Utiliser sur un poste (télécharger)
- Programmer XCas :
Tutoriel (Next pour page suivante, Previous pour page précédente) - Démarrer avec XCas (Fichier PDF) :
Document sur la prise en main d'XCas et sa programmation
Utiliser Scilab (Wikipedia.org)
- Démarrer en SciLab :
une documentation en ligne ou PDF à télécharger - SciLab pour les lycées :
une version spécifique à découvrir (télécharger, documents, sujets) - Attention pas pour MacOS !
Scratch (Wikipedia.org, en cours d'écriture)
- initiation et tutoriels en français :
des fichiers PDF à lire ou imprimer - Programmer avec Scratch :
les aides du site de Scratch mais c'est en anglais
4.4 Calculatrices
Texas Intrument TI-82
- TI 82 par JC MEIER :
présentation et programmation - Tout sur la TI-82 :
incontournable car TI-Online est piraté - Emulateur TI :
pour utiliser sa TI à l'ordinateur et la projeter en classe par exemple
Casio Graph 85
- Emulateur Graph 85 :
pour utiliser sa Casio Graph 85 à l'ordinateur et la projeter en classe par exemple