Institut de Recherche sur l’Enseignement des Mathématiques de Lille

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 Emmanuel Ostenne

Table des matières

  1. L'algorithme exemple
    1. Objectif
    2. L'énoncé
  2. Les différents langages/environnements
    1. Avec la calculatrice simple (non programmable)
    2. Avec une calculatrice programmable (TI-82, Casio Graph85)
    3. Avec le tableur
    4. Avec le langage Javascript
    5. Avec le langage Pascal
    6. Avec le langage Basic d'OpenOffice.org
    7. Avec le langage d'XCas
    8. Avec le langage de SciLab
    9. Avec le langage naturel visuel de Scratch
    10. Comparaison des langages employés
    11. Premier contact avec le calcul formel
  3. Tutoriels pour prendre en main
    1. Une TI-82
    2. Une Casio Graph85
    3. L'éditeur Javascript en ligne
    4. Lazarus (Pascal)
    5. Le Basic d'OpenOffiche.org
    6. La programmation avec XCas
    7. La programmation avec SciLab
    8. La programmation avec Scratch
  4. Sitographie
    1. Algorithmique
    2. Algorithmes
    3. Environnements de programmation
    4. Calculatrices

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é

Le tour de magie.
Le magicien demande à un spectateur de penser à un nombre et de l'écrire sur une ardoise. Il l'invite à cacher cette ardoise le temps du numéro. Il lui demande d'ajouter 3 puis de multiplier cette somme par le nombre auquel il a pensé au départ. Il insiste : ne pas oublier ce résultat, puis calculer le carré du nombre de départ. Enfin il demande de soustraire ce résultat du précédent. Au spectateur un peu hagar après tous ces calculs, le magicien demande de dire à haute voix le résultat final. Instantanément le magicien annonce le nombre pensé déclenchant une salve d'applaudissements alors que le spectateur brandit son ardoise en preuve.


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 affiche le texte passé en paramètre (ici entre guillements simples)
readln attend la saisir d'une donnée, le résultat sera stocké dans la variable n (ce sera donc un nombre entier).
writeln('Le résultat est ',n);
on affiche le texte formé par la succession d'un texte 'Le résultat est ' et d'un nombre n.
  • mode graphique :
s:=InputBox('Fenêtre de saisie', 'Saisir une valeur', '0');    
n:=strtoint(s);
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 simples autour du 0. La saisie est logiquement stockée dans une variable de type chaîne (s).
D'où l'utilisation de la fonction strtoint qui permet de convertir une chaîne en nombre entier.
showMessage('Le résultat est '+inttostr(c4));
showMessage provoque l'affichage d'une fenêtre d'information : on propose simplement le texte à afficher. Ici il s'agit d'un texte auquel est ajouté (concaténation) un texte converti à partir d'un nombre (c4) via la fonction inttostr.

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);
}

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

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



4.2  Algorithmes



4.3  Environnements de programmation


Le langage Javascript (Wikipedia.org) :


Le langage Pascal (Wikipedia.org) :


Le langage C (wikipedia.org) [incontournable même si non présenté ici]


Programmation avec XCas


Utiliser Scilab (Wikipedia.org)


Scratch (Wikipedia.org, en cours d'écriture)


4.4  Calculatrices


Texas Intrument TI-82


Casio Graph 85

  • Emulateur Graph 85 :
    pour utiliser sa Casio Graph 85 à l'ordinateur et la projeter en classe par exemple

Un message, un commentaire ?

Forum sur abonnement

Pour participer à ce forum, vous devez vous enregistrer au préalable. Merci d’indiquer ci-dessous l’identifiant personnel qui vous a été fourni. Si vous n’êtes pas enregistré, vous devez vous inscrire.

Connexions’inscriremot de passe oublié ?