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)
Fondamental : Fonctionnement
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.
Syntaxe : Structure générique (forme complète en PHP*)
IF (condition)
{//Bloc d'instructions à exécuter si la condition est vraie}
ELSE
{//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]) :
if ($donnees['note']<60)
{
// Si la note est sous 60, écriture dans le fichier HTML, en gras, de "a eu un échec pour"
echo '<strong> a eu un échec pour </strong>';
}
else
{
// Si la note est plus grande ou égale à 60, écriture, en gras, de "a réussi"
echo '<strong> a réussi </strong>';
}
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'instructionecho
qui affiche un message de réussite.
CHOIX MULTIPLES (aiguillage complexe = plusieurs conditions)
Fondamental : Fonctionnement
La structure conditionnelle complexe permet d'exécuter plus de deux blocs d'instructions en fonction des valeurs prises par une variable.
Syntaxe : Structure générique (PHP)
SWITCH (variable) {
CASE valeur1:
//Bloc d'instructions à exécuter si variable = valeur1;
break;
[//Autant de CASE que nécessaire]
DEFAULT:
//Bloc d'instructions à exécuter si variable = autres valeurs - facultatif;
}
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]) :
switch (true) {
case $donnees['note'] >= 90:
echo "A+";
break;
case $donnees['note'] >= 85:
echo "A";
break;
case $donnees['note'] >= 80:
echo "A-";
break;
case $donnees['note'] >= 77:
echo "B+";
break;
case $donnees['note'] >= 73:
echo "B";
break;
case $donnees['note'] >= 70:
echo "B-";
break;
case $donnees['note'] >= 65:
echo "C+";
break;
case $donnees['note'] >= 60:
echo "C";
break;
case $donnees['note'] >= 57:
echo "C-";
break;
case $donnees['note'] >= 54:
echo "D+";
break;
case $donnees['note'] >= 50:
echo "D";
break;
case $donnees['note'] >= 35:
echo "E";
break;
Default:
echo "F";
break;
}
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)
Fondamental : Fonctionnement
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.
Syntaxe : Structure générique (PHP)
WHILE (condition)
{//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]) :
while ($donnees = $req->fetch())
{
// É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)
echo '<p>'.$donnees['titre_cours'].'</p>';
}
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)
Fondamental : Fonctionnement
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!
Syntaxe : Structure générique (PHP)
FOR (valeur de départ; valeur de fin; valeur de l'incrémentation)
{//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]) :
for ($i=1;$i<4;$i++)
{
// Mise en mémoire d'une ligne dans la variable $donnees
$donnees = $req->fetch();
// Affichage de l'identifiant du cours et des balises LI associées
echo '<li>'.$donnees['titre_cours'].'</li>';
}
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.