Programmes complexes

Chapitres

Exercice d'application

Réaliser le tri croissant d’un tableau t selon la méthode dite de tri par sélection.

Le principe de ce tri est de:

  • chercher la plus petite valeur de t et de la placer en t[0];
  • chercher la plus petite valeur de t à partir de l’indice 1 et de la placer en t[1];
  • chercher la plus petite valeur de t à partir de l’indice 2 et de la placer en t[2];

L’opération se poursuit jusqu’à la fin du tableau t qui est alors trié.

Les données du programme à réaliser sont accessibles sur https://algotouch.irisa.fr/agt/

Le programme complet est accessible sur https://algotouch.irisa.fr/agt/

Retour sur la notion de programmes complexes

Un problème complexe

Certains problèmes peuvent se résoudre avec une seule macro boucle, par exemple:

  • calcul d’une moyenne;
  • recherche d’un maximum ou d’un minimum;
  • recherche d’un élément dans une collection.

Cependant d’autres problèmes ne peuvent être résolus avec une seule boucle. On doit alors créer une seconde boucle dans le corps de la première boucle. On parle alors de « boucles imbriquées ».

Imbrications de macros

Avec AlgoTouch, il est impossible de construire directement une boucle à l’intérieur d’une boucle. Le seul moyen est de créer une nouvelle macro boucle qui sera appelée dans le corps de la première.

Define Double
From
  i = 0 ;
  exist = 0 ;
  // ...
Until
  i >= t.length
  exist == 1
  // ...
Loop
  Exist1Double ;
  i = i + 1 ;
  // ...
Terminate
  Write "Valeur de exist " exist ;
// ...
End
Define Exist1Double
From
  exist = 0 ;
  j = i + 1 ;
  // ...
Until
  j >= t.length
  exist == 1
  // ...
Loop
  if (t[i] != t[j]) {
    j = j + 1 ;
  }
  else {
    // t[i] == t[j]
    exist = 1 ;
  }
  // ...
Terminate
  // ...
End

Exemple

Dans cette partie du cours, nous allons créer un programme AlgoTouch (une macro), qui détermine si un tableau d’entiers contient des valeurs identiques:

  • le tableau {94, 4, 92, 7, 94, 4, 98, 60, 75, 60 } contient plusieurs fois les valeurs 4, 94 et 60;
  • le tableau {90, 0, 92, 7, 94, 4, 98, 61, 75, 60 } ne contient que des valeurs différentes.

Génération de la macro Exist1Double

La première étape consiste à générer la macro la plus interne, en l’occurence Exist1Double sur notre exemple. Cette macro détermine si la valeur en t[i] est présente dans le tableau à partir de l’indice i. Si c’est le cas, une variable exist est mise à 1. Dans le cas contraire la variable exist est mise à 0.

Génération de la macro Double

Maintenant que la macro Exist1Double est réalisée, l’étape suivante consiste à générer la macro Double qui cherche si plusieurs exemplaires d’une même valeur se trouvent dans le tableau t. Cette macro consiste à chercher si chaque valeur de t est présente plusieurs fois grâce à la macro Exist1Double. Soit c’est le cas et le programme est terminé, soit ce n’est pas le cas et il faut passer à la valeur suivante dans t.