if (Fonctions C++ == danger) {

Une fonction est un sous-programme qui effectue une certaine tâche. Elle peut être paramétrée. Une fonction peut appeler d'autres fonctions (autant de fois que nécessaire) et même s'appeler, on parle alors de fonction recursive.

.....

Déclaration d'une fonction: La déclaration d'une fonction indique le type de retour, le nom ainsi que le type de chaque paramètre de la fonction.

Exemple 1:
float calculTempsTrajet(float vitesse, float distance);

.....

Définition d'une fonction: La définition d'une fonction est l'implémentation, le corps de la fonction.

Exemple 2:
float calculTempsTrajet(float vitesse, float distance) {
	return vitesse/distance;
}

.....

Appel à une fonction: L'appel à une fonction se fait simplement en écrivant le nom de la fonction. Les paramètres (si la fonction en possède) doivent être fournis lors de l'appel. Attention, il faut avoir déclaré ou définit la fonction avant de l'appeler.

Exemple 3:
float calculTempsTrajet(float vitesse, float distance) {
	return vitesse/distance;
}

int main() {
	float duree;
	duree = calculTempsTrajet(120.30, 255.78);
}
Dans l'exemple ci-dessus, nous appelons la fonction calculTempsTrajet avec les deux paramètres 120.3 et 255.78. Ces deux paramètres étant de type float, cela fonctionne correctement.
Nous aurions très bien pu créer deux variables (ou une seule) de type float et appeler la fonction calculTempsTrajet en lui passant ces deux variables:

Exemple 4:
float calculTempsTrajet(float vitesse, float distance) {
	return vitesse/distance;
}

int main() {
	float duree, v = 115.12, d = 362.1;
	duree = calculTempsTrajet(v, d);
}
A partir du moment où les deux paramètres passés lors de l'appel (on appelle ces paramètres les paramètres effectifs) sont de type float, il n'y aura pas de problème (du moins à la compilation. Est-ce que le résultat de la fonction sera celui espéré ? Ça, c'est une autre histoire).

.....

Les paramètres formels: Les paramètres formels d'une fonction sont les paramètres déclarés au moment de la déclaration/définition de la fonction. Dans l'exemple 1, les paramètres vitesse et distance sont des paramètres formels.

.....

Les paramètres effectifs: Les paramètres effectifs d'une fonction sont les paramètres passés à la fonction lors de l'appel à celle-ci. Dans l'exemple 4, les paramètres v et d sont des paramètres effectifs. "Effectif" car, en fonction de leur valeur, ils ont un effet sur le résultat de la fonction.

.....

Que se passe t-il, au niveau des paramètres, quand une fonction est appelée ? Il y a recopie des paramètres effectifs vers les paramètres formels.
Dans l'exemple 4, la paramètre v vaut 115.12 et le paramètre d vaut 362.1. Quand la fonction calculTempsTrajet est appelée (à la ligne 2 de la fonction main), elle est exécutée avec le paramètre vitesse prenant la valeur de v (c'est à dire 115.12) et le paramètre distance prenant la valeur de d (c'est à dire 362.1).
Cette recopie des paramètres implique que les paramètres effectifs ne sont pas accessibles à l'intérieur de la fonction appelée. Par conséquent, si une fonction modifie la valeur d'un paramètre, elle ne modifie que les paramètres formels et non les paramètres effectifs !

.....
À ce stade (en plus des cours que vous avez suivis), vous en savez assez pour faire les exercices ci-dessous. Essayez autant que possible de ne pas regarder les corrigés;s de ces exercices.
Exercice 1
  1. Écrire la fonction ajouterDeux qui ajoute 2 à un entier passé en paramètre et retourne le résultat.
  2. Cliquer pour voir le corrigé
  3. Écrire la fonction ajouterX qui ajoute à un entier passé en paramètre un autre entier également passé en paramètre et retourne le résultat.
  4. Cliquer pour voir le corrigé
  5. Bon, maintenant que nous avons écrit nos fonctions, nous pouvons passer à notre programme principal: la fonction main. Voici ce que je souhaite:
    1. L'utilisateur saisit un nombre (entier).
    2. À ce nombre, je lui ajoute successivement les nombres 1 puis 2 puis 3, ... jusqu'à 100. Bien évidemment, pour ajouter un nombre, vous passerez par l'appel à la fonction ajouterX (on ne l'a pas écrite pour rien !!!).
    3. Pour finir, vous afficherez le résultat final de toutes ces additions.
    Cliquer pour voir le corrigé
  6. Écrire la fonction multiplierPar qui multiplie un entier passé en paramètre par un autre entier également passé en paramètre et retourne le résultat.
  7. Cliquer pour voir le corrigé
  8. Ré-écrire cette fonction multiplierPar à la différence, avec la fonction précédente, que cette fonction devra appeler la fonction ajouterX pour effectuer la multiplication.
    À vous de jouer !
  9. Cliquer pour voir le corrigé
.....
Toujours là ? Allez, on continue !
Exercice 2

Soit la fonction
void repeter(float nombre, int fois) {
	for(int i=1; i<=fois; i++) {
		cout << nombre << " ";
	}
}
Trouver le résultat des programmes suivants:
  1. int main() {
    	repeter(1, 1);
    	return 0;
    }
  2. Cliquer pour voir le corrigé
  3. int main() {
    	repeter(5, 10);
    	return 0;
    }
  4. Cliquer pour voir le corrigé
  5. int main() {
    	repeter(0, 10);
    	return 0;
    }
  6. Cliquer pour voir le corrigé
  7. int main() {
    	repeter(10, 0);
    	return 0;
    }
  8. Cliquer pour voir le corrigé
  9. int main() {
    	repeter(5, -3);
    	return 0;
    }
  10. Cliquer pour voir le corrigé
.....
On complique ?
Exercice 3

Soit la fonction
void afficher(int nombre) {
	cout  << nombre << " ";
	nombre--;
	if(nombre > 0) {
		afficher(nombre);
	}
}
Trouver le résultat des programmes suivants:
  1. int main() {
    	afficher(20);
    	return 0;
    }
  2. Cliquer pour voir le corrigé
  3. int main() {
    	afficher(1);
    	return 0;
    }
  4. Cliquer pour voir le corrigé
  5. int main() {
    	afficher(0);
    	return 0;
    }
  6. Cliquer pour voir le corrigé
  7. int main() {
    	afficher(-5);
    	return 0;
    }
  8. Cliquer pour voir le corrigé

    En voilà assez! Si vous avez répondu brillamment à toutes les questions alors vous pouvez passer au chapitre concernant le différentes façons de passer des paramétres à une fonction.

    Si vous avez des questions, vous pouvez me les envoyer par mail en cliquant ici. Merci de m'indiquer vos noms et prénoms.

} else {

return nextChapter;

}

C++, C, exercices corrigés, danger, fonctions, terrorisé, paramètres, pointeurs, mémoire, tas, bss, variable, arguments, référence, adresse, structures, déclaration, solution, peur, zéro, langage, expert, cours, tutoriel, tutorial, aide, besoin, dangereux, correction, examen, programmation, POO, objet, type, retour, informatique, bas niveau, programmation orientée objet...