Structures algorithmiques de base

Différentes structures algorithmiques peuvent être exploitées pour faciliter la publication dynamique de contenu sur le Web. En fait, nous en avons même vu une dans le contexte de la saisie via le Web, soit une structure conditionnelle afin de gérer l'enregistrement des valeurs nulles! Ces structures algorithmes existent dans tous les langages procéduraux, leur syntaxe pouvant différer. Nous verrons les structures suivantes :

  • Structures logiques (conditionnelles)

    • Aiguillage simple (SI ... ALORS ... SINON)

    • Aiguillage complexe (CHOIX MULTIPLES)

  • Structures répétitives (boucles)

    • Nombre de cycles inconnus (TANT QUE)

    • Nombre de cycles prédéterminés (POUR)

SI ... ALORS ... SINON (aiguillage simple = 1 seule condition)

FondamentalFonctionnement

Une structure conditionnelle simple exécute minimalement un bloc d'instructions si la condition est vraie. Elle peut aussi inclure un bloc d'instructions si la condition est fausse.

SyntaxeStructure générique (forme complète en PHP*)

1
IF (condition)
2
{//Bloc d'instructions à exécuter si la condition est vraie}
3
ELSE
4
{//Bloc d'instructions – facultatif – à exécuter si la condition est fausse}

* Rappel de la forme compacte pour affichage : (condition?élément retourné si vrai:élément retourné si faux)

Exemple

On peut utiliser une structure conditionnelle simple pour vérifier la valeur d'un contrôle (par exemple, vérifier si la note obtenue est inférieure à un certain seuil) et définir un affichage différent en fonction de cette valeur.

Exemple : https://cours.ebsi.umontreal.ca/sci6306/algo/condition.php - pour l'affichage du statut échec/réussite

[pdf]Extrait du code (lignes 37-46 du code de la page [pdf]) :

1
if ($donnees['note']<60)
2
{ 
3
	// Si la note est sous 60, écriture dans le fichier HTML, en gras, de "a eu un échec pour"
4
	echo '<strong> a eu un échec pour </strong>';
5
}
6
else
7
{
8
	// Si la note est plus grande ou égale à 60, écriture, en gras, de "a réussi"
9
	echo '<strong> a réussi </strong>';
10
}
  • On retrouve à la ligne 1, la condition qui compare la note obtenue au seuil de 60 pour voir si elle est sous ce seuil.

  • Les lignes 2 à 5 représentent les instructions si la condition est vraie. On y retrouve une instruction echo afin d'afficher un message d'échec.

  • Les lignes 7 à 10 regroupent les instructions si la condition est fausse (else). On y retrouve l'instruction echo qui affiche un message de réussite.

CHOIX MULTIPLES (aiguillage complexe = plusieurs conditions)

FondamentalFonctionnement

La structure conditionnelle complexe permet d'exécuter plus de deux blocs d'instructions en fonction des valeurs prises par une variable.

SyntaxeStructure générique (PHP)

1
SWITCH (variable) {
2
CASE valeur1:
3
//Bloc d'instructions à exécuter si variable = valeur1;
4
break;
5
[//Autant de CASE que nécessaire]
6
DEFAULT:
7
//Bloc d'instructions à exécuter si variable = autres valeurs - facultatif;
8
}

Exemple

Une structure conditionnelle complexe peut permettre de personnaliser l'affichage des données en fonction des différentes valeurs prises par un champ, comme, par exemple, d'attribuer à une note numérique son équivalent en note littérale. Note : Cela pourrait aussi se faire par une série de IF imbriqués mais cela devient rapidement compliqué lorsqu'il y a plusieurs valeurs à tester...

Exemple : https://cours.ebsi.umontreal.ca/sci6306/algo/condition.php - pour l'affichage de la note littérale

Extrait du code (lignes 53-93 du code de la page [pdf]) :

1
switch (true) {
2
    case $donnees['note'] >= 90:
3
        echo "A+";
4
        break;
5
    case $donnees['note'] >= 85:
6
        echo "A";
7
        break;
8
    case $donnees['note'] >= 80:
9
        echo "A-";
10
        break;
11
    case $donnees['note'] >= 77:
12
        echo "B+";
13
        break;
14
    case $donnees['note'] >= 73:
15
        echo "B";
16
        break;
17
    case $donnees['note'] >= 70:
18
        echo "B-";
19
        break;
20
    case $donnees['note'] >= 65:
21
        echo "C+";
22
        break;
23
    case $donnees['note'] >= 60:
24
        echo "C";
25
        break;
26
    case $donnees['note'] >= 57:
27
        echo "C-";
28
        break;
29
    case $donnees['note'] >= 54:
30
        echo "D+";
31
        break;
32
    case $donnees['note'] >= 50:
33
        echo "D";
34
        break;
35
    case $donnees['note'] >= 35:
36
        echo "E";
37
        break;
38
    Default:
39
        echo "F";
40
        break;
41
}
  • La ligne 1 établit la base de la conditionnelle complexe qui consiste ici à chercher les cas où la condition énoncée est vraie.

  • Par exemple, à la ligne 2, on vérifie si la note est plus grande ou égale à 90. Si cette condition est vraie, la ligne 55 fera afficher un A+.

  • La ligne 4 est importante : l'instruction "break" permet d'arrêter la structure conditionnelle afin d'éviter que les autres conditions qui suivent ne soient validées, ce qui causerait en ce cas problème. En effet, si la note est plus grande ou égale à 90, elle est plus grande ou égale à 85 (la condition suivante à la ligne 5).

TANT QUE (boucle avec nombre de répétitions inconnues)

FondamentalFonctionnement

Une boucle TANT QUE permet d'exécuter un bloc d'instructions tant que la condition demeure vraie. On ne connaît pas en amont le nombre exact de fois où la boucle sera répétée.

SyntaxeStructure générique (PHP)

1
WHILE (condition)
2
{//Bloc d'instructions à exécuter}

Exemple

Ce type de boucle est particulièrement utile pour passer à travers les enregistrements dans une table de résultats retournée par une requête SQL. On ne sait en effet pas à l'avance le nombre de lignes retournées; on voudra en ce cas faire la boucle jusqu'à ce que l'on ait terminé de passer au travers les différentes lignes de la table de résultats.

Exemple : https://cours.ebsi.umontreal.ca/sci6306/algo/repetition.php - pour afficher la liste des titres des cours

[pdf]Extrait du code (lignes 30-34 du code de la page [pdf]) :

1
while ($donnees = $req->fetch())
2
    {
3
        // Écriture dans le fichier HTML des balises d'ouverture et de fermeture de paragraphe encadrant l'identifiant du cours (alias TITRE_COURS qui correspond à la concaténation NO_COURS TITRE (voir SQL)
4
        echo '<p>'.$donnees['titre_cours'].'</p>';
5
    }
  • La ligne 1 précise la condition de la boucle : tant qu'il y aura des lignes qui demeurent dans la table des résultats. L'instruction fait en sorte de mettre dans la variable $donnees une ligne que l'on va chercher (fetch) dans la requête SQL qui a été exécutée ($req). À chaque tour de la boucle la ligne suivante est mise en mémoire et, lorsqu'il n'y a plus de lignes, cela retourne "Faux" ce qui termine la boucle.

  • lignes 3 et 4 seront répétées pour toutes les lignes de la table des résultats ce qui affichera ainsi, dans un paragraphe, le titre des cours.

POUR (boucle avec nombre de répétitions connues)

FondamentalFonctionnement

Une boucle POUR exécute un bloc d'instructions de manière répétitive pour un nombre de fois prédéterminé, c'est-à-dire à l'intérieur d'une boucle allant d'une valeur de départ à une valeur de fin avec une certaine valeur d'incrémentation entre ces deux extrêmes. Par exemple, on peut aller de 1 à 10 à pas de 10 ou aller de 2 à 8 à pas de 2!

SyntaxeStructure générique (PHP)

1
FOR (valeur de départ; valeur de fin; valeur de l'incrémentation)
2
{//Bloc d'instructions à exécuter}

Exemple

Une boucle POUR est une autre manière pour passer à travers l'ensemble des enregistrements dans une table de résultats retournée par une requête SQL lorsque l'on connaît le nombre de lignes que l'on veut. On pourrait par exemple vouloir afficher uniquement les 3 premières lignes de la table des résultats.

Exemple : https://cours.ebsi.umontreal.ca/sci6306/algo/repetition.php - pour afficher les trois premiers cours

[pdf]Extrait du code (lignes 50-57 du code de la page [pdf]) :

1
for ($i=1;$i<4;$i++)
2
    {
3
        // Mise en mémoire d'une ligne dans la variable $donnees
4
        $donnees = $req->fetch();
5
        
6
        // Affichage de l'identifiant du cours et des balises LI associées
7
        echo '<li>'.$donnees['titre_cours'].'</li>';
8
    }
  • La boucle est définie à la ligne 1. On veut aller de 1 jusqu'à 4 (non inclus) à pas de 1 ($i++), donc afficher trois lignes.

  • À la ligne 4, on demande de mettre en mémoire (dans $donnees grâce à fetch) une ligne de la table des résultats ($req).

  • À la ligne 7, on fait afficher comme un item de liste (li) le titre du cours qui avait été mis en mémoire à la ligne 4.

  • Lorsque la boucle recommence, la ligne 4 met en mémoire la ligne suivante de la table des résultats.

  • La boucle continue jusqu'à ce que le compteur ($i) soit égal à 4.