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 :
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.
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.
ni A, ni B : dans ce cas, ton morceau de code ne sert à rien.
En général, on ne considère pas ce cas.
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 :
l'exemple numéro 0 de procédure en algorithmique, c'est "Afficher()".
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).
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)
[…]