CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Question fontion/procédure

Guardian_Sith
Guardian_Sith
Niveau 9
30 novembre 2010 à 10:30:55

Bonjour

Voilà ayant parcouru divers site , mes pensées sont un peu mélangé sur le sujet des fonctions et procédures en algorithme.
J'aurais quelques questions à poser pour essayer de m'éclaircir le chemin ^^

Tout d'abord , quelle est la différence entre une fonction et une procédure ??? J'ai lu que la fonction permet de renvoyer UNE valeur ( une somme pour un exemple très facile) alors que la procédure permet de renvoyer plusieurs valeurs ( oui et non par exemple).

Lors de l'appel de la fonction , on envoie le résultat de celle ci mais lors de l'appel de la procédure , on affiche ce qu'il y a à l'intérieur de celle-ci ???
Ci possible pourriez vous me donner un exemple de procédure pour mieux comprendre ? ^^

Merci des réponses !

Guardian_Sith
Guardian_Sith
Niveau 9
30 novembre 2010 à 10:36:39

PS : désolé de la faute dans le titre je ne l'avais pas remarqué :/

godrik
godrik
Niveau 30
30 novembre 2010 à 15:31:37

Dans ma definition de procedure, ca ne renvoie rien. La limite entre procedure et de fonction est artificielle dans la plupart des langage de programmation.

darke69
darke69
Niveau 6
01 décembre 2010 à 00:03:21

En algorithmie et dans je pense, la plus par des langages de programmation c'est le même principe :
On créée une fonction ou une procédure pour éviter de réécrire plusieurs fois les mêmes instructions, c'est à dire redemander à chaque fois au programme d'effectuer la même chose. Donc on écrit le code une fois pour toute et il suffit ensuite de l'appeler dans le programme principal (ou autre par...).
Une procédure a entre 0 et plusieurs paramètres. Ces paramètres peuvent être des paramètres d'entrée ou de sortie. S'il est en entrée les modifications faites sur ce paramètre ne seront pas répercutés hors de la procédure (càd dans le programme principal). Si c'est un paramètre de sortie alors les modifications faites sur le paramètre seront toujours "actifs" hors de la procédure. Donc oui une procédure peut "renvoyer" plusieurs résultats mais pas obligatoirement, on peut par exemple utiliser une procédure pour simplement faire un affichage.
Une fonction a entre 0 et plusieurs paramètres d'entrés. Elle renvoie 1 seul résultat selon un type prédéfinie. Par exemple la fonction Moyenne qui prend un tableau d'entiers en entrée et qui renvoie un réel.

dnob700
dnob700
Niveau 10
01 décembre 2010 à 00:13:18

C'est vraiment merdique comme distinction.

Si, dans un langage donné, des procédure (i.e. des "fonctions" qui ne renvoient pas de valeur) peuvent recevoir des arguments leur permettant de modifier l'environnement de l'appelant (par exemple elles reçoivent des pointeurs ou alors la convention d'appel permet de modifier ses arguments), alors une "fonction" (i.e. une "procédure" qui renvoie une valeur) pourra faire de même. Et donc, une fonction, en plus de renvoyer quelque chose, peut aussi faire des effets de bords et donc "renvoyer" plusieurs valeurs.

Il y a très peu de langages qui font la différence entre ces deux choses (essentiellement le BASIC). Généralement, une fonction peut avoir un type de retour "void" (ou un autre nom équivalent) qui signale comme un cas particulier que cette fonction ne "renvoie" rien (et qu'elle est donc une procédure). Ça ne l'empêche pas de faire des effets de bords (ce qui est obligatoire pour une procédure si elle veut avoir un effet intéressant).

La seule chose c'est que le nom de Fonction (en appuyant bien sur le 'f') ou fonction pure, peux vouloir spécifier spécifiquement une fonction qui n'a pas d'effet de bord (et qui n'est donc probablement pas une procédure). Mais c'est une autre classification. Je n'ai jamais entendu du parler de procédure par opposition à une fonction pure.

chris_27
chris_27
Niveau 10
01 décembre 2010 à 10:38:11

godrik: c'est la définition donnée fréquemment, mais je ne l'aime pas.

En pratique, il y a deux choses orthogonales :
A) retourner une valeur
B) modifier les entrées et/ou l'environnement (on parle d'effet de bord souvent).

Du coup, ton "morceau de code" peut faire 4 choses :
:d) A mais pas B : dans ce cas, tout le monde est d'accord pour parler de fonction, car ça correspond à ce que font les fonctions mathématiques comme cosinus : on prend un nombre, et on retourne la valeur correspondante.
:d) B mais pas A : dans ce cas, tout le monde est d'accord pour parler de procédure. Comme exemple, on peut citer les procédures d'affichage à l'écran pour lesquelles on ne fait aucun calcul mais "juste" de l'interaction avec le matériel.
:d) ni A, ni B : dans ce cas, ton morceau de code ne sert à rien. :o)) En général, on ne considère pas ce cas.
:d) A et B : c'est le cas le plus général : D'un coté on fait du calcul sur une partie des entrées, qui donne lieu à un résultat renvoyé. De l'autre, on modifie l'environnement soit en affichant des choses à l'écran, soit en modifiant une variable en entrée, soit …
Dans ce cas, il y a souvent une grosse confusion sur le nom à donner :
« ça renvoie une valeur donc c'est une fonction »
« oui mais ça modifie l'environnement donc c'est une procédure »
« oui mais ça n'a pas de sens d'être à la fois fonction et procédure »
« … »

Tout ça pour dire qu'en général ce n'est pas très très formel ces histoires. Je n'ai moi même pas fixé mon vocabulaire sur ce sujet.

En bref, pour répondre à la question initiale :
:d) l'exemple numéro 0 de procédure en algorithmique, c'est "Afficher()".
:d) une fonction renvoie une valeur comme en maths … et l'ensemble d'arrivée peut être aussi complexe qu'on veut, toujours comme en math. Si tu veux renvoyer deux entiers, tu fais une fonction qui renvoie des couples d'entiers (les langages civilisés permettent ça).
:d) tu as deux façons d'obtenir le résultat d'un calcul :
1) via une fonction qui renvoie le résultat --> y = cos(2)
2) via une procédure qui va stocker le résultat dans une de ces entrées
--> petit exemple de calcul simultané de cos et sin

Procédure cos_sin(x, c, s)

Entrée : x réél, c réél, s réél.
Sortie : -
Variables locales : -
Effet : stocke cos(x) dans c et sin(x) dans s

Debut
c <- cos(x)
s <- sin(x)
Fin

qu'on utilise de la façon suivante :

[…]
Variables : c réél, s réél
[…]
cossin(2, c, s)
Afficher("Le cosinus de 2 est ")
Afficher(c)
Afficher(" et le sinus de 2 est ")
Afficher(s)
[…]

chris_27
chris_27
Niveau 10
01 décembre 2010 à 10:39:08

Rha, typo :/

Il faut lire "cos_sin(2, c, s)" et non "cossin(2, c, s)" sinon c'est pas cohérent. :rouge:

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment