Derniers sujets






Les fonctions

Voir le sujet précédent Voir le sujet suivant Aller en bas

Les fonctions

Message  Zepalkia le Dim 10 Fév - 18:26

Bien le bonjour,

lors du dernier tutoriel, je vous avais fait une introduction grâce à laquelle vous ne devriez désormais plus avoir le moindre problème pour effectuer des opérations mathématiques avec ou sans variables avec Racket/Scheme. Ceci dit, c'est bien beau de pouvoir faire des calculs mais une simple calculette le fait aussi bien, et avoir des variables que l'on peut définir c'est peut être bien pratique, mais pas très utile en l'état.
C'est pourquoi cette 3ème partie de ce dossier consacré à la programmation en Racket/Scheme va se tourner vers un élément absolument indispensable à la programmation (en général) et qui va utiliser les calculs et les variables arithmétiques, j'ai nommé les fonctions.

Qu'est-ce qu'une fonction tout d'abord, logiquement vous devriez très certainement le savoir, il s'agit d'exactement la même chose qu'en mathématique dans le sens strict. Pour Racket/Scheme, une fonction est une écriture particulière qui va vous permettre de définir une ou plusieurs opérations se basant sur des variables et effectuant des calculs. Dit comme ça ça ne veut rien dire, mais vous allez vite comprendre l'intérêt de la chose avec quelques exemples, c'est très facile.

Par exemple, imaginons que nous voulons demander à Scheme de nous calculer le carré d'un nombre, 5 par exemple. On pourrait écrire à la main (* 5 5), mais ça ne marcherait que pour 5 et il faudrait à chaque fois y modifier nous même. C'est ici qu'entre en jeu le principe de fonction, ça serait bien plus simple de n'avoir qu'à écrire (carre 5) pour calculer le carré de 5 non ? Et dans la foulée que cela fonctionne pour absolument n'importe quelle valeur ?
Manque de chance, cela n'est pas possible par défaut en Scheme, il va donc falloir le programmer nous même, ce qui me permet de vous présenter la syntaxe assez spéciale d'une fonction en Racket/Scheme.
Ce qu'il faut retenir surtout, c'est que nous allons créer ici une fonction qui va nous calculer absolument n'importe quelle nombre à la puissance 2 selon notre convenance, la fonction sera donc composée d'un nom, d'une variable et d'un calcul. Je vous propose d'appeler notre fonction "carre" et je vais vous balancer directement la fonction telle qu'on l'écrit normalement :

Code:

(define carre ( lambda (x) (* x x ) ) )
----ou----
(define (carre x) (* x x ) )

Oui je sais c'est chinois, et en plus il y en a 2 de fonctions là.. vous en faites pas, les explications arrivent Wink
Premièrement il faut définir notre fonction de la même manière que l'on avait défini des variables dans le précédent tutoriel, donc le define ne vous est pas inconnu. Maintenant il existe en effet deux manière d'écrire des fonctions, la "plus formelle" sous forme "d'expression lambda" (d'où l'utilisation du mot ou du signe lambda qui fait aussi le logo du logiciel) qui est la première que je vous ai donnée, ou une manière plus rapide et plus simple à comprendre que je vous encourage à tout le temps utiliser, en tout cas par la suite je n'utiliserai plus que cette écriture donc autant vous y faire.

Techniquement, les deux codes font exactement la même chose, la syntaxe générale serait :

Code:

(define nom_fonction (lambda (variableS) calculs))
----ou----
(define (nom_fonction variableS) (calculs) )

Donc vous le voyez, la seule différence c'est que dans la première écriture ont défini une fonction de type lambda, avec certaines variables utilisées lors de calculs à un nom, alors que dans la seconde écriture on oublie le lambda et on met ensemble le nom de la fonction et ses variables avant de donner les calculs, c'est plus court et simple à comprendre à mon avis, et je vais vous le montrer.
Tentons de définir maintenant une fonction qui additionne deux nombres différents, voilà la fonction qui effectuera un tel calcul :
Code:

(define (somme x y) (+ x y))

Vous avez compris ? Ici on définit une fonction "somme", utilisant 2 variables "x" et "y" que l'on additionne l'une à l'autre, ça permet de faire une somme simple avec n'importe quel chiffre !
Cependant maintenant il y a encore un soucis, simplement rentrer ces lignes de codes dans Racket/Scheme ne suffira pas, maintenant il faut lui dire d'effectuer le calcul et avec quelles variables. Pour nos 2 exemples, voici les lignes de codes qu'il faut pour effectuer le calcul :
Code:

(carre 5)
(somme 3 4)

syntaxe générale : (nom_fonction variable1 variable2 ... variableN)

Si vous entrez ça et appuyez sur le bouton "exécuter", le logiciel vous donnera comme résultats 25 et 7, tout simplement Wink
Ca peut sembler flou au début, mais c'est très important de savoir les maîtriser, parce que tout va s'accélérer par la suite, donc il faut bien s'entraîner pour utiliser ces fonctions. Je vais mettre à la fin quelques exemples basiques d'opérations que je vous encourage à essayer pour vous entraîner, mais avant, un bref résumé; le code vu ici est le suivant :

Code:

(define (carre x) (* x x) )
(define (somme x y) (+ x y))

(somme 3 4)
(carre 5)

Mine de rien, ces 4 lignes sont importantes, n'oubliez pas l'ordre des parenthèses, vous voyez que c'est déjà plus compliqué et c'est pas fini, vous en aurez bientôt de partout. Pensez aussi à écrire des noms de fonctions sans accents au risque d'avoir des bugs, et faites aussi attention parce que Scheme/Racket ne fait pas la différence entre un nom avec ou sans majuscules, donc la fonction somme ou la fonction SoMMe sont les mêmes pour lui et, comme les variables, vous ne pouvez pas définir deux fois la même fonction.

Et pendant qu'on est dans les variables, celles insérées dans les fonctions (x et y ici) sont des "variables formelles unique", si vous utilisez un define pour donner d'autres valeurs à x et à y avant les fonctions, cela ne changera rien, seul les valeurs données au moment d'appeler les fonctions sont prises en comptes


Et maintenant.. que diriez vous de "mixer" nos deux fonctions ensemble ? Parce que oui, c'est parfaitement possible, ainsi, le code suivant :
Code:

(somme (carre 5) 10)

marche parfaitement, et vous retournera donc 35, vous pouvez donc bien entendu mélanger entre-elles plusieurs fonctions déjà définies lors de l'appel de l'une ou de l'autre, il suffit juste de faire attention à ce que le résultat de l'évaluation des fonctions soit les mêmes que celles attendues. Par exemple, une fonction qui retourne une variable non mathématique (prochains tutoriels) insérée dans la fonction "somme", retournera une erreur puisqu'elle attend deux valeurs mathématiques.




Et bien voilà, vous avez désormais la base de l'utilisation des fonctions en tête, il va maintenant falloir s'entraîner à les utiliser pour bien les maîtriser, comme promis, voici quelques exemples que je vous engage à tenter de programmer vous même.
Le prochain tutoriel va introduire les variables non-mathématiques (logiques) puis nous ferons un parallèle entre tout ce que l'on a déjà vu, et mine de rien vous saurez déjà faire pas mal de trucs. Attention cependant, ce tutoriel est destiné à vous apporter la base des fonctions, il existe plusieurs méthodes d'utilisation, des formes de calculs plus complexes et d'autres possibilités mais ça, je vous y expliquerais une autre fois, la base était déjà assez longue comme ça.




Exemples supplémentaires

Cliquez sur les balises "spoiler" pour afficher les fonctions, comme ça vous n'aurez pas immédiatement la réponse sous les yeux si vous voulez tenter de les programmer vous même

Fonction calculant la moyenne de deux nombres :
Spoiler:

Code:
(define (moyenne a b) (/ (+ a b) 2))

Fonction calculant l'aire d'un triangle :
Spoiler:

Code:
(define (aire base hauteur) (/ (* base hauteur) 2))


_________________







Zepalkia
Admin
Admin

Avertissement : aucun avertissement
Messages : 883
Date d'inscription : 23/12/2009
Age : 24

http://sos-internautes.forumactif.com

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum