les structures conditionnelles en Scilab

08 May 2017 08 May 2018 10585 vues ESSADDOUKI Mostafa 7 min de lecture

Structures conditionnelles en Scilab

1. Opérateurs de comparaison

Avant d'utiliser les structures conditionnelles, il faut connaître les opérateurs qui permettent de formuler des conditions. En Scilab, une condition retourne un booléen : %t (vrai) ou %f (faux).

Opérateurs de comparaison Scilab

OpérateurSignificationExempleRésultat
==Égal à5 == 5%t
~=Différent de3 ~= 5%t
<Strictement inférieur3 < 5%t
<=Inférieur ou égal5 <= 5%t
>Strictement supérieur7 > 3%t
>=Supérieur ou égal3 >= 3%t
&ET logique(3>1) & (5>2)%t
|OU logique(3>5) | (2>1)%t
~NON logique~(3 > 5)%t
Remarque — Booléens en Scilab En Scilab, les constantes booléennes s'écrivent %t (true) et %f (false), contrairement à Python (True/False) ou C (1/0).

2. Structure conditionnelle if

L'instruction if exécute un bloc d'instructions si une condition est vraie. Le bloc est délimité par le mot-clé end.


Syntaxe — if / elseif / else Scilab
// Forme 1 — if seul
if ( condition ) then
    // instructions si condition vraie
end

// Forme 2 — if ... else
if ( condition ) then
    // instructions si vraie
else
    // instructions si fausse
end

// Forme 3 — if ... elseif ... else
if ( condition1 ) then
    // instructions si condition1 vraie
elseif ( condition2 ) then
    // instructions si condition2 vraie
else
    // instructions si aucune condition vraie
end
FormeUtilisation
if ... then ... endUne seule branche — exécuté ou ignoré
if ... else ... endDeux branches — l'une ou l'autre
if ... elseif ... else ... endPlusieurs conditions mutuellement exclusives

Exemple n°1 — if simple et if...else

// if simple — s'exécute car %t est vrai
if ( %t ) then
    disp("Hello !")
end

// if...else — s'exécute sur la branche else car %f est faux
if ( %f ) then
    disp("Hello !")
else
    disp("Goodbye !")
end
Sortie
Hello !
Goodbye !

Exemple n°2 — if...elseif...else avec saisie utilisateur

i = input("Saisir un nombre (1, 2 ou 3) : ")

if ( i == 1 ) then
    disp("Hello !")
elseif ( i == 2 ) then
    disp("Goodbye !")
elseif ( i == 3 ) then
    disp("Tchao !")
else
    disp("Au Revoir !")
end
Sortie
// Si l'utilisateur saisit 2 :
Goodbye !
Attention — Ne pas oublier end Chaque structure if doit être fermée par end. Un end manquant provoque une erreur de syntaxe. Les structures imbriquées nécessitent autant de end que de if ouverts.

Exercices appliqués

Exercice 1 — Admis / Non admis Écrire un programme qui affiche "non admis" si la note est inférieure à 10, et "admis" sinon.
note = input("Saisir une note : ")

if ( note < 10 ) then
    disp("non admis")
else
    disp("admis")
end
Sortie
// Si note = 7 :
non admis

// Si note = 14 :
admis
Exercice 2 — Signe d'un nombre Écrire un programme qui détermine si un nombre saisi est négatif, positif ou nul.
nb = input("Saisir un nombre : ")

if ( nb < 0 ) then
    disp("nombre est négatif")
elseif ( nb > 0 ) then
    disp("nombre est positif")
else
    disp("nombre est nul")
end
Sortie
// Si nb = -5 :
nombre est négatif

// Si nb = 0 :
nombre est nul
Exercice 3 — Catégorie sportiveÉcrire un programme qui affiche la catégorie d'un enfant selon son âge :
  • 6–7 ans → Poussin
  • 8–9 ans → Pupille
  • 10–11 ans → Minime
  • ≥ 12 ans → Cadet

Solution 1 — conditions avec bornes doubles (&)

age = input("Saisir l'âge : ")

if ( age >= 6 & age <= 7 ) then
    disp("Poussin")
elseif ( age >= 8 & age <= 9 ) then
    disp("Pupille")
elseif ( age >= 10 & age <= 11 ) then
    disp("Minime")
elseif ( age >= 12 ) then
    disp("Cadet")
else
    disp("Âge n'appartient à aucune catégorie")
end

Solution 2 — conditions progressives (plus concise)

age = input("Saisir l'âge : ")

if ( age < 6 ) then
    disp("Âge n'appartient à aucune catégorie")
elseif ( age <= 7 ) then
    disp("Poussin")
elseif ( age <= 9 ) then
    disp("Pupille")
elseif ( age <= 11 ) then
    disp("Minime")
else
    disp("Cadet")
end
Astuce — Comparer les deux solutions La solution 2 est plus concise car elle exploite le fait que les conditions sont évaluées dans l'ordre : si age <= 7 est atteint, c'est que age >= 6 est déjà garanti (la branche age < 6 a été rejetée). On évite ainsi les opérateurs &.
Sortie
// Si age = 9 :
Pupille

// Si age = 15 :
Cadet

// Si age = 4 :
Âge n'appartient à aucune catégorie
Exercice 4 — Heure une minute plus tard Écrire un programme qui lit l'heure (h) et les minutes (m), et affiche l'heure une minute plus tard. Exemple : 21h32 → "Dans une minute, il sera 21 heure(s) 33".
h = input("Saisir l'heure (0–23) : ")
m = input("Saisir les minutes (0–59) : ")

if ( m == 59 ) then
    m = 0
    if ( h == 23 ) then
        h = 0        // passage minuit → 0h00
    else
        h = h + 1    // passage à l'heure suivante
    end
else
    m = m + 1        // simple incrément de minute
end

disp("Dans une minute, il sera " + string(h) + " heure(s) " + string(m))
Sortie
// Si h=21, m=32 :
Dans une minute, il sera 21 heure(s) 33

// Si h=14, m=59 :
Dans une minute, il sera 15 heure(s) 0

// Si h=23, m=59 :
Dans une minute, il sera 0 heure(s) 0
Logique — Décomposition des casLe programme distingue trois cas :
  • m < 59 → simple incrément de minute
  • m == 59 et h < 23 → passage à l'heure suivante
  • m == 59 et h == 23 → retour à 0h00 (minuit)

3. Instruction select

L'instruction select est l'équivalent Scilab du switch/case de C ou Java. Elle permet de comparer une variable à plusieurs valeurs de façon lisible, sans enchaîner des elseif.


Syntaxe — select / case Scilab
select variable
    case valeur1
        // instructions si variable == valeur1
    case valeur2
        // instructions si variable == valeur2
    // autant de case que nécessaire
    else
        // instructions si aucun case ne correspond
end
Critèreif / elseifselect / case
ConditionsExpressions booléennes quelconquesÉgalité à une valeur fixe uniquement
Lisibilité⚠️ Encombrante avec beaucoup de cas✅ Très lisible pour un grand nombre de cas
Branche par défautelseelse

Exemple n°3 — select simple

i = input("Saisir un nombre (1, 2 ou 3) : ")

select i
    case 1
        disp("One")
    case 2
        disp("Two")
    case 3
        disp("Three")
    else
        disp("Other")
end
Sortie
// Si i = 2 :
Two

// Si i = 7 :
Other
Exercice 5 — Jour de la semaine Écrire un programme qui affiche le jour correspondant à un nombre entre 1 et 7.
i = input("Saisir un nombre (1 à 7) : ")

select i
    case 1
        disp("Lundi")
    case 2
        disp("Mardi")
    case 3
        disp("Mercredi")
    case 4
        disp("Jeudi")
    case 5
        disp("Vendredi")
    case 6
        disp("Samedi")
    case 7
        disp("Dimanche")
    else
        disp("Numéro invalide (saisir entre 1 et 7)")
end
Sortie
// Si i = 4 :
Jeudi

// Si i = 9 :
Numéro invalide (saisir entre 1 et 7)
Erreur corrigée — numéros de case incorrects Le code source original contenait une erreur : les cases 4 à 7 étaient tous numérotés case 3, ce qui les rendait inaccessibles. Chaque jour doit avoir son propre numéro de case :
// ❌ Erroné (Jeudi, Vendredi, Samedi, Dimanche inaccessibles)
case 3
    disp("Mercredi")
case 3               // ← doublon !
    disp("Jeudi")

// ✅ Correct
case 3
    disp("Mercredi")
case 4
    disp("Jeudi")

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.