les fonctions en Scilab

09 May 2017 09 May 2018 12001 vues ESSADDOUKI Mostafa 6 min de lecture

Les fonctions en Scilab

Une fonction est un bloc d'instructions nommé, réutilisable, qui accepte des paramètres d'entrée et retourne des résultats de sortie. Utiliser des fonctions permet de structurer le code, éviter la duplication et faciliter la maintenance.

Définition — Fonction ScilabUne fonction Scilab est définie par :
  • Un en-tête : nom, paramètres d'entrée et de sortie
  • Un corps : les instructions à exécuter
  • Le mot-clé endfunction pour la fermer
Une fonction peut avoir 0, 1 ou plusieurs arguments d'entrée et de sortie.

1. Définition d'une fonction


Syntaxe — Définition d'une fonction Scilab
// Forme complète — n sorties, p entrées
function [y1, y2, ..., yn] = nomFonction(x1, x2, ..., xp)
    // corps de la fonction
endfunction

// Forme avec une seule sortie
function y = nomFonction(x1, x2)
    // corps de la fonction
endfunction

// Forme sans sortie (procédure)
function nomFonction(x1, x2)
    // corps de la fonction
endfunction
ÉlémentRôleNotation
Paramètres d'entréeDonnées fournies à la fonction lors de l'appel(x1, x2, ..., xp) — entre parenthèses
Arguments de sortieRésultats retournés par la fonction[y1, y2, ..., yn] — entre crochets
En-têteDéclare le nom et la signaturePremière ligne — mot-clé function
CorpsInstructions exécutées lors de l'appelEntre l'en-tête et endfunction

Exemples de définition

Exemple n°1 — Fonction à une entrée, une sortie

// Fonction qui multiplie x par 2
function y = doubler(x)
    y = 2 * x
endfunction

// Appels
disp(doubler(5))     // 10
disp(doubler(-3))    // -6
Sortie
10
-6
Remarque — Variable ans Quand une fonction est appelée sans récupérer la sortie dans une variable, Scilab stocke le premier résultat dans la variable automatique ans:
--> doubler(7)
 ans =
    14.

Exemple n°2 — Fonction à deux entrées, deux sorties

// Fonction qui retourne 2*x1 et 3*x2
function [y1, y2] = simplef(x1, x2)
    y1 = 2 * x1
    y2 = 3 * x2
endfunction

Cette fonction peut être appelée de trois façons selon le nombre de sorties souhaitées :

// Appel sans variable de sortie → résultat dans ans (y1 uniquement)
--> simplef(1, 2)
 ans =
    2.

// Appel avec une seule variable de sortie → récupère y1
--> y1 = simplef(1, 2)
 y1 =
    2.

// Appel avec les deux variables de sortie
--> [y1, y2] = simplef(1, 2)
 y1 =
    2.
 y2 =
    6.
Sortie
// simplef(1, 2) sans capture → ans = 2.
// [y1, y2] = simplef(1, 2)  → y1 = 2. | y2 = 6.
Astuce — Récupérer seulement certaines sorties Si une fonction retourne plusieurs valeurs mais qu'on n'a besoin que de la première, on peut ignorer les autres en ne les déclarant pas. Pour ignorer une sortie spécifique, utiliser ~:
// Récupérer seulement y2 (ignorer y1)
[~, y2] = simplef(1, 2)
disp(y2)   // 6.

Exercices appliqués

Exercice 1 — Fonction factorielle Écrire une fonction factorielle(N) qui retourne N!
function f = factorielle(N)
    f = 1
    for i = 2 : N
        f = f * i
    end
endfunction

// Tests
for n = [0, 1, 5, 10]
    disp("factorielle(" + string(n) + ") = " + string(factorielle(n)))
end
Sortie
factorielle(0)  = 1
factorielle(1)  = 1
factorielle(5)  = 120
factorielle(10) = 3628800
Exercice 2 — Fonctions min et max Écrire une fonction minmax(a, b) qui retourne à la fois le minimum et le maximum de deux nombres.
function [m, M] = minmax(a, b)
    if ( a <= b ) then
        m = a
        M = b
    else
        m = b
        M = a
    end
endfunction

// Test
[petit, grand] = minmax(7, 3)
disp("Min = " + string(petit) + "  |  Max = " + string(grand))
Sortie
Min = 3  |  Max = 7

2. Instruction return

L'instruction return provoque la sortie immédiate de la fonction en cours, même s'il reste des instructions dans le corps. Elle est utile pour gérer les cas limites ou les erreurs d'entrée en début de fonction.


Syntaxe — return Scilab
function y = maFonction(x)
    if ( condition_invalide ) then
        y = valeur_par_defaut
        return      // ← quitte immédiatement la fonction
    end
    // instructions normales (non atteintes si return déclenché)
    y = calcul(x)
endfunction
Astuce — Retours anticipés pour cas limites Placer les vérifications en début de fonction avec return évite les imbrications profondes de if et rend le code plus lisible. C'est le patron "early return":
// ❌ Sans early return — imbrication profonde
function y = f(x)
    if (x >= 0) then
        if (x <= 100) then
            y = x * 2   // logique principale enfouie
        end
    end
endfunction

// ✅ Avec early return — logique principale en évidence
function y = f(x)
    if (x < 0)    then y = 0; return; end
    if (x > 100)  then y = 0; return; end
    y = x * 2    // logique principale visible immédiatement
endfunction

Exemple n°3 — Somme des entiers de istart à iend

function y = mysum(istart, iend)
    // Cas limite 1 — borne de départ négative
    if ( istart < 0 ) then
        y = 0
        return
    end
    // Cas limite 2 — ordre incorrect
    if ( iend < istart ) then
        y = 0
        return
    end
    // Cas normal — calcul de la somme
    y = sum(istart : iend)
endfunction

Vérifions les trois cas de comportement :

// Cas normal : somme de 1 à 5 = 1+2+3+4+5
disp(mysum(1, 5))     // 15

// Cas limite : istart négatif → return immédiat
disp(mysum(-1, 5))    // 0

// Cas limite : iend < istart → return immédiat
disp(mysum(2, 1))     // 0

// Cas normal : somme d'un seul élément
disp(mysum(4, 4))     // 4
Sortie
15
0
0
4
Trace d'exécution — mysum(1, 5)
  • istart = 1 ≥ 0 → premier return non déclenché
  • iend = 5 ≥ istart = 1 → second return non déclenché
  • y = sum(1:5) = 1+2+3+4+5 = 15
Exercice 3 — Division sécurisée Écrire une fonction diviser(a, b) qui retourne a / b, ou affiche un message d'erreur et retourne 0 si b = 0.
function r = diviser(a, b)
    if ( b == 0 ) then
        disp("Erreur : division par zéro !")
        r = 0
        return
    end
    r = a / b
endfunction

// Tests
disp(diviser(10, 2))    // 5.
disp(diviser(7, 0))     // Erreur + 0
disp(diviser(9, 3))     // 3.
Sortie
5.
Erreur : division par zéro !
0
3.

Récapitulatif

ConceptSyntaxe cléDescription
Définitionfunction [y1,y2]=f(x1,x2)Déclare nom, entrées et sorties
CorpsInstructions entre en-tête et endfunctionCalculs effectués lors de l'appel
Appel simplef(a, b)Résultat stocké dans ans
Appel avec capture[r1, r2] = f(a, b)Résultats stockés dans les variables
returnreturnQuitte immédiatement la fonction
Ignorer une sortie[~, r2] = f(a, b)Ignore la première sortie

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.