Accueil ⇒ Projets ⇒ Flip Flap ⇒ Quelques exemples

Quelques exemples

Voici quelques exemples de programmes réalisables avec la version actuelle du projet.

Combinatoire et récursivité

En Flip-Flap, on peut définir des fonctions récursives. Quoi de mieux pour l'illustrer que le grand classique qu'est la fonction factorielle ?

Fonction factorielle(n)
    Si n <= 1
        Retourner 1
    Sinon
        Retourner n * factorielle(n - 1)

Rien de bien compliqué dans ce code, on retrouve la définition même de la factorielle. Néanmoins, cette fonction est parfaitement inutile en Flip-Flap étant donné que l'écriture n! est correctement interprétée et calculée comme une expression du langage.

/* Les trois lignes suivantes sont équivalentes */
 
Afficher factorielle(10)
Afficher 10!
Afficher 3628800

On peut implémenter le calculer de coefficients binomiaux de multiples façons. Considérons ici les trois plus courantes.

Fonction coefbin1(n,k)
    Si k <= 0 ou n <= 0
        Retourner 1
    Sinon si k > n
        Retourner 0
    Sinon
        Retourner (n / k) * coefbin1(n - 1, k - 1)

On peut aussi passer par l'écriture avec des factorielles :

Fonction coefbin2(n,k)
    Retourner n! / k! / (n - k)!

Ou utiliser la relation de Pascal :

Fonction coefbin3(n, k)
    Si k > n
        Retourner 0
    Sinon si k <= 0 ou n <= 0
        Retourner 1
    Sinon
        Retourner coefbin3(n - 1, k - 1) + coefbin3(n - 1, k)

Un peu d'arithmétique

Il serait sans doute temps de passer à autre chose que de la récursivité, mais pour le plaisir, on peut quand même citer deux fonctions majeures de l'arithmétiques traditionnelle.

Fonction pgcd(a,b)
    Si b = 0
        Retourner a
    Sinon
        Retourner pgcd(b, a % b)
 
/* La seconde se calculant simplement
** à partir de la première... */
 
Fonction ppcm(a,b)
    Retourner a * b / pgcd(a,b)

Profitons-en pour rappeler que les opérateurs produit et quotient sont associatifs à gauche dans ce langage, comme c'est souvent la convention.

Enfin, une petite fonction itérative triviale (vous trouverez une version plus performante dans la section mathématique du site) :

Fonction sommeDiv(n)
    Soit s = 0
    Pour i de 1 à n
        Si n % i = 0
            s += i
    Retourner s

L'opérateur % désigne le modulo, comme en C.

Puisque nous parlons d'arithmétique, passons à un algorithme un peu moins trivial pour afficher la division euclidienne d'un entier y par un entier z.

Fonction afficherDE(y, z)
    Soit r = y
    Soit q = 0
    Soit w = z
 
    Tant que w <= y
        w *= 2
 
    Tant que w > z
        q *= 2
        w /= 2
        Si w <= r
            r -= w
            q += 1
 
    Afficher q
    Afficher r

On voit mieux ici que c'est l'indentation qui hiérarchise les instructions en Flip-Flap, un peu comme les accolades et point-virgules délimitent des blocs en C++.