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++.