8PRO107 Éléments de programmation Les fonctions. La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux.

Slides:



Advertisements
Présentations similaires
Introduction au Langage C,C++
Advertisements

Cours n° 7 Standard Template Library II.
Le langage C++ Les boucles.
Patrick Reuter maître de conférences
MATHEMATIQUES COMPETENCE 3 :
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
GEF 243B Programmation informatique appliquée Types dérivés, structures et tableaux §
Cours n° 8 Conception et Programmation à Objets
Tests et itérations Programmes séquentiels ne résolvent pas tous les problèmes exemple simple : calcul des racines d'un polynôme de d° 2 dans R Algorithme.
Section VIII Modularité Partie II
Nous allons vous présenter: - Photoshop - Algorithme et programmation
Langage C Révision.
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Structures de données et algorithmes – C5 Maria-Iuliana Dascalu, PhD
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Bibliothèque standard du C++
7.1 TRANSFORMATION LINÉAIRE Cours 19. Au dernier cours nous avons vus Le déterminant dune matrice carré Les propriétés du déterminant La matrice adjointe.
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Structures de données IFT-2000
Leçon 2 : Surcharge des opérateurs IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Bases de la programmation en C++ 1 Les enchaînementsdinstruction Séquentiels. Exécutions dinstructions les unes à la suite des autres. Instructions séparées.
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
Structures de données IFT Abder Alikacem La classe string Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Structures de données IFT-2000
Conteneurs STL.
1.2 FONCTIONS Cours 2.
Les fonctions.
8PRO107 Éléments de programmation
1 La récursion. Nous avons vu qu'un programme est constitué d'un ensemble de fonctions. Il est possible pour une fonction donnée d'appeler une autre fonction.
Introduction au C++ héritage / polymorphisme
Standard Template Library
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
8.3 THÉORÈME FONDAMENTAL DE LALGÈBRE cours 27. Au dernier cours nous avons vus La définition des nombres complexes Les opérations sur les nombres complexes.
Procédures et fonctions
Structures de données IFT-2000
Formation C++. Hello World ! #include /* Commentaire sur plusieurs lignes */ int main() { //Affiche hello world std::cout
Les fichiers texte en C++
La librairie assert.h.
Faculté Polytechnique de Mons
L’essentiel du langage C
Programmer en langage c
Les adresses des fonctions
SIF-1053 Architecture des ordinateurs
Héritage multiple En langage C++, il est possible d’utiliser l’héritage multiple. Il permet de créer des classes dérivées à partir de plusieurs classes.
8PRO107 Éléments de programmation Les chaînes de caractères.
7ième Classe (Mardi, 24 novembre) CSI2572. Devoir 3 ?
Argc et argv Utilisation des paramètres de la ligne de commande.
8.1 LES NOMBRES COMPLEXES cours 26. Avec la venue de: Doigts Dettes Tartes Distances.
Cours C++ Fonctions Surcharge d’opérateurs Passage d’arguments
Exemple à faire: N°2 Ecrire l’Algorithme et le Programme PASCAL qui affiche la somme de deux nombres entiers donnés.
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
Les surcharges d'opérateurs
8PRO100 Éléments de programmation Les pointeurs de caractères.
1 Deuxième journée La programmation procédurale. 2 Unité de programmation : la procédure ou fonction Très semblable au math Un programme est un ensemble.
Conception de Programmes - IUT de Paris - 1ère année – Cours 8 – Les entrées/sorties Comment fonctionnent les opérateurs > pour les types élémentaires.
B.Shishedjiev - Affectation1 Expressions et affectation Comment produire des nouvelles valeurs.
Conception de Programmes - IUT de Paris - 1ère année – Cours 6 - Les opérateurs L’amitié Les opérateurs –Introduction –Surcharge par fonction.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O. et au.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Racines carrées Racine carrée.
Ecrire 10 fois "Bonjour" sur 10 lignes différentes
Les racines carrées et les carrés parfaits
Mathématiques – Calcul mental
Structures de données IFT-2000 Abder Alikacem Laboratoire #1 Département d’informatique et de génie logiciel Édition Septembre 2009.
1.1 LES VECTEURS GÉOMÉTRIQUES
A.Aarabi ´. ´ Objectifs Faciliter la prise en main du logiciel MATLAB Présenter les fonctionnalités utiles au travail scientifique.
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
Les flux en C++ Les flux d’entrées sorties Les flux standards.
Int 10. Int 6.
Calculer le double, la moitié
Transcription de la présentation:

8PRO107 Éléments de programmation Les fonctions

La bibliothèque standard du C/C++ Il y a peu d'opérateurs arithmétiques en C/C++, mais à partir de ceux que nous avons vus, il est possible d'en construire d'autres. On distingue les opérateurs de base des opérateurs complexes, construits à partir des opérateurs de base, en appelant ces derniers : « fonctions ». La plupart des environnements supportant le C/C++ standard disposent d'une large collection de fonctions appelée bibliothèque standard.

Plusieurs fonctions mathématiques courantes font partie de la bibliothèque standard. Pour les utiliser, il suffit d'inclure au début du programme la ligne suivante: #include Il est alors possible d'employer des fonctions telles que: cos(x)cosinus de x pow(x,y)x à la puissance y sqrt(x)racine carrée de x ldexp(x,n) et plusieurs autres. Exemple : cmath

Exemple : cos(x) #include int main() { double x; std::cin >> x; std::cout << cos(x); return 0; }

Il est bien connu que l'équation où a, b et c sont des constantes, possède deux solutions données par la formule Il est donc utile d'utiliser la fonction sqrt pour écrire un programme calculant les racines d'un polynôme. Exemple : sqrt(x)

#include int main() { double a, b, c; double racine1, racine2; double tmp; std::cin >> a >> b >> c; tmp = sqrt(b*b - 4*a*c); racine1 = ( -b - tmp) / (2*a); racine2 = ( -b + tmp) / (2*a); std::cout << racine1 << std::endl << racine2 << std::endl; return 0; } Exemple : sqrt(x)

Examinons plus en détails la fonction ldexp. Nous savons que cette fonction retourne la valeur Considérons quelques exemples : ldexp(1, 1) retourne ldexp(1.1, 1) retourne ldexp(1, 1.1) retourne Pourquoi??? Exemple : ldexp(x,n)

Pour comprendre ce qui se passe, il faut savoir que la fonction ldexp attend deux nombres en entrée : x et n. x doit être un double n doit être un entier la fonction retourne un double Donc, lorsque l'on exécute ldexp(1, 1.1), la fonction reçoit en fait les valeurs 1 et 1 puisque la partie fractionnaire du second opérande est tronquée.

Morale: avant d'utiliser une fonction de la bibliothèque il faut connaître son prototype. Le prototype d'une fonction indique le nom de la fonction le type des paramètres le type de la valeur de retour Les prototypes de fonctions Exemple: double ldexp(double, int) indique que ldexp est une fonction à deux paramètres (un double et un int) qui retourne un double.

Exemple : pow(x,y) La fonction d'exponentiation a le prototype suivant: double pow(double x, double y) de sorte qu'on ne peut pas l'utiliser de la façon suivante: pow(2, 3) % 5 Exercice: Pourquoi?

Il faut plutot écrire: (int) pow(2, 3) % 5 ou encore ( (int)pow(2,3) ) % 5 L'opérateur cast permet de convertir le type d'une expression en un autre type. (type) expression Exemple : pow(x,y)

Remarque On voit ici une différence fondamentale entre le pseudocode et un vrai langage de programmation tel que le C/C++. En pseudocode, on n'a pas à se soucier des détails particulier à un langage. Par exemple, on écrit modulo 5 sans que cela ne cause de problème. Cela permet de se concentrer sur l'algorithme plutôt que sur la syntaxe. Exemple : pow(x,y)

Structure d'un programme en C/C++ Un programme en C/C++ est une collection de fonctions qui interagissent entre elles afin d'exécuter un calcul. Une des fonctions doit porter le nom main : c'est la première fonction à être appelée lors de l'exécution du programme. Comme on l'a vu, on peut utiliser les fonctions de la bibliothèque standard ou encore, on peut définir nos propres fonctions.

Définition des fonctions Dans la plupart des langages de programmation, la définition d'une fonction comporte deux parties: l'en-tête et le corps. En-tête Nom de la fonction Type de la valeur retournée Nom des paramètres Types des paramètres { Corps Déclaration des variables Instructions

Étude de cas 1 Calcul de la moyenne Description du problème: Étant donné 3 entiers, calculer leur moyenne et afficher le résultat. Entrée: Trois entiers séparés par un ou plusieurs caractères d'espacement. Sortie: Un réel représentant la moyenne.

Étude de cas 1 Calcul de la moyenne Supposons l'existence d'une fonction ayant le prototype suivant: moyenne3(entier, entier, entier) retourne un réel

Étude de cas 1 Fonction principale Entiers : nombre1, nombre2, nombre3 Réel: moyenne LIRE nombre1, nombre2, nombre3 moyenne moyenne3(nombre1, nombre2, nombre3) ÉCRIRE moyenne

Étude de cas 1 Définition de la fonction moyenne3 En-tête: moyenne3 (entier a, entier b, entier c) retourne un réel Corps: réel m m (a + b + c) / 3 RETOURNER m

Étude de cas 1 Définition de la fonction moyenne3 En-tête: moyenne3 (entier a, entier b, entier c) retourne un réel Corps: réel m m (a + b + c) / 3 RETOURNER m À l'appel de la fonction, les variables a,b et c sont déclarées puis initialisées avec la valeur des paramètres utilisés lors de l'appel.

Étude de cas 1 Pas-à-pas Vérifions le comportement de notre algorithme sur l'exemple suivant: Après les déclarations suivantes : Entiers : nombre1, nombre2, nombre3 Réel : moyenne l'état de la mémoire correspond à la figure de droite nombre1 nombre2 nombre3 moyenne entier réel

Étude de cas 1 LIRE nombre1, nombre2, nombre nombre1 nombre2 nombre3 moyenne entier réel

Étude de cas 1 L'analyse de l'instruction moyenne moyenne3 (nombre1, nombre2, nombre3) est plus compliquée. On doit d'abord évaluer l'expression moyenne3 (nombre1, nombre2, nombre3) Pour ce faire, il faut remplacer les variables par leur valeur respective: moyenne3 (67, 86, 79) Puis, la fonction moyenne3 est appelée.

Étude de cas 1 Appel de moyenne3 Lorsqu'une fonction est appelée, chacun de ses paramètres est copié dans une nouvelle variable. Le nom de ces nouvelles variables correspond au nom des paramètres tel qu'indiqué dans l'en-tête. moyenne3 (nombre1, nombre2, nombre3) moyenne3 ( 67, 86, 79 ) moyenne3 ( a, b, c ) paramètres dappelparamètres formels

Étude de cas nombre1 nombre2 nombre3 moyenne entier Ainsi après lappel de moyenne3 (67, 86, 79) l'état de la mémoire devient: a b c entier réel

Étude de cas nombre1 nombre2 nombre3 moyenne entier réel Exécution du corps de moyenne3 réel : m m (a + b + c) / 3 RETOURNER m D 'abord, la déclaration réel : m a b c m entier réel

Étude de cas nombre1 nombre2 nombre3 moyenne entier réel Exécution du corps de moyenne3 réel : m m (a + b + c) / 3 RETOURNER m Puis l'évaluation de l'expression (a + b + c) / 3 = ( ) / 3 = ( ) / 3 = 232 / 3 = a b c m entier réel

Étude de cas nombre1 nombre2 nombre3 moyenne entier réel Exécution du corps de moyenne3 réel : m m (a + b + c) / 3 RETOURNER m Et l'assignation m a b c m entier réel

Étude de cas nombre1 nombre2 nombre3 moyenne entier réel Exécution du corps de moyenne3 réel : m m (a + b + c) / 3 RETOURNER m Finalement, la valeur souhaitée est retournée à l'aide de l'instruction spéciale: RETOURNER m a b c m entier réel entier

Étude de cas nombre1 nombre2 nombre3 moyenne entier réel Au sortir dune fonction, toutes les variables qui y ont été déclarées ainsi que toutes les variables contenants les paramètres disparaissent.

Étude de cas 1 Retour à la fonction principale: LIRE nombre1, nombre2, nombre3 moyenne moyenne3 (nombre1, nombre2, nombre3) ÉCRIRE moyenne Puisque la valeur retournée par moyenne3 est 77.33, cela veut dire que moyenne3 (67, 86, 79) est une expression s'évaluant à

Étude de cas nombre1 nombre2 nombre3 moyenne entier réel La prochaine instruction à être exécutée est donc moyenne Finalement, l'instruction ÉCRIRE moyenne est exécutée

Étude de cas 2 Calcul de laire d'un rectangle Description du problème: Calculer et afficher laire d'un rectangle. Entrée: Deux nombres réels, le premier indique la longueur et le second indique la largeur du rectangle. Sortie: Un nombre réel représentant laire du rectangle.

Étude de cas 2 Fonction principale réels : longueur largeur LIRE longueur largeur AFFICHER aire(longueur, largeur) où aire est une fonction dont le prototype est aire(réel, réel) retourne un réel

Étude de cas 2 Définition de aire En-tête: réel aire (réel longueur, réel largeur) Corps: RETOURNER longueur * largeur

Étude de cas 2 Pas-à-pas Vérifions le comportement de notre algorithme sur l'exemple suivant: Après les déclaration suivantes: réel longueur largeur létat de la mémoire correspond à la figure de droite longueur largeur réel

Étude de cas 2 LIRE longueur, largeur longueur largeur réel

Étude de cas 2 ÉCRIRE aire(longueur, largeur) Dabord, il faut évaluer aire (longueur, largeur) On appelle donc la fonction aire longueur largeur réel

Étude de cas 2 Appel de la fonction aire Puisque l'en-tête de la fonction spécifie que les nom des paramètres sont longueur et largeur, cela veut dire que deux nouvelles variables portant ces noms et contenant les mêmes valeurs sont créées longueur largeur réel longueur largeur réel

Étude de cas 2 Les instructions du corps sont ensuite exécutées. RETOURNER longueur * largeur = RETOURNER 3.5 * 7.2 = RETOURNER longueur largeur réel longueur largeur réel

Étude de cas 2 Les instructions du corps sont ensuite exécutées. RETOURNER longueur * largeur = RETOURNER 3.5 * 7.2 = RETOURNER longueur largeur réel longueur largeur réel Comment savoir à quelle case mémoire longueur et largeur correspondent?

Étude de cas longueur largeur réel longueur largeur réel Déclarés et visibles seulement dans la fonction principale Déclarés et visibles seulement dans la fonction aire Une variable déclarée dans une fonction nest visible que dans cette fonction.

Étude de cas 2 Au retour de la fonction, les variables qui y ont été créées disparaissent. L'expression aire (3.5, 7.2) vaut la valeur retournée, c'est-à- dire longueur largeur réel

Étude de cas 2 L'instruction afficher aire(longueur, largeur) correspond à afficher 25.2 Ce qui est bien ce que l'on voulait que notre programme fasse! longueur largeur réel réels: longueur largeur LIRE longueur largeur AFFICHER aire(longueur, largeur) Retour dans la fonction principale

Étude de cas 3 Échanger deux valeurs Description du problème: Lire deux entiers, les afficher dans l'ordre où ils ont été lus puis, les afficher dans l'ordre inverse. Utiliser une fonction pour inverser le contenu de deux variables. Entrée: Deux entiers. Sortie: Les deux même entiers, dans l'ordre inverse.

Étude de cas 3 Fonction principale 1 deux entiers: x, y LIRE x, y AFFICHER x, y AFFICHER y, x Ne satisfait pas la description du problème

Étude de cas 3 Fonction principale 2 deux entiers : x, y LIRE x, y AFFICHER x, y échanger (x, y) AFFICHER x, y où échanger est une fonction dont le prototype est: échanger (entier, entier) Remarque: la fonction échanger ne retourne aucune valeur.

Étude de cas 3 Définition 1 de échanger En-tête: échanger (entier a, entier b) Corps: a b b a

Étude de cas 3 Pas-à-pas Entrée: entier x, y LIRE x, y x y entier

Étude de cas 3 AFFICHER x, y échanger (x, y) x y entier a b échanger (entier a, entier b) a b b a

Étude de cas 3 échanger (entier a, entier b) a b b a x y entier a b On exécute dabord a b

Étude de cas 3 échanger (entier a, entier b) a b b a x y entier a b Puis on exécute b a Problème!!!

Définition 2 de échanger En-tête: échanger (entier a, entier b) Corps: entier : tmp tmp a a b b tmp Étude de cas x y entier a b

Étude de cas x y entier a b tmp entier entier tmp tmp a a b b tmp entier: tmp

entier tmp tmp a a b b tmp Étude de cas x y entier a b tmp a entier tmp

entier tmp tmp a a b b tmp Étude de cas x y entier a b a b tmp entier

entier tmp tmp a a b b tmp Étude de cas x y entier a b b tmp tmp entier

Étude de cas x y entier État de la mémoire au retour de la fonction échanger : On a échangé le contenu des variables a et b mais pas celui des variable x et y!!!

Étude de cas 3 Définition 3 de échanger En-tête: échanger (entier référence a, entier référence b) où a et b ne sont pas des copies mais des références aux paramètres dappel. Corps: entier : tmp tmp = a a = b b = tmp

Étude de cas paramètres passés par copie paramètres formels: a, b paramètres d'appel: x, y x a b y

Étude de cas paramètres passés par référence paramètres formels: a, b paramètres d'appel: x, y a x b y

Étude de cas 3 Pas-à-pas Entrée: entiers : x, y LIRE x, y AFFICHER x y échanger(x, y) AFFICHER x y x y entier

Étude de cas 3 Entiers : x, y LIRE x, y AFFICHER x, y échanger (x, y) AFFICHER x, y a x b y entier

entier tmp tmp a a b b tmp Étude de cas 3 entier: tmp a x b y entier tmpentier Dans echanger

entier: tmp tmp a a b b tmp Étude de cas 3 tmp a a x b y entier tmpentier Dans echanger

entier: tmp tmp a a b b tmp Étude de cas 3 a b a x b y entier tmpentier Dans echanger

entier: tmp tmp a a b b tmp Étude de cas 3 b tmp a x b y entier tmpentier Dans echanger

Retour à la fonction principale entiers: x y LIRE x y AFFICHER x y échanger(x, y) AFFICHER x y Ce qui donne bien le résultat souhaité. Étude de cas a x b y entier

Résumé Utilisations des fonctions pour étendre les possibilités de l'ordinateur. Prototype d'une fonction Définition d'une fonction. Les paramètres L'appel d'une fonction Le retour d'une fonction L'utilisation d'une variable tampon Les trois études de cas précédentes ont servi à illustrer les concepts suivants:

Définition des fonctions Dans la plupart des langage de programmation, la définition d'une fonction comporte deux parties: l'en-tête et le corps. En-tête Nom de la fonction Type de la valeur retournée Nom des paramètres Types des paramètres { Corps Déclaration des variables Instructions

Les paramètres Paramètres formels: Ceux utilisés dans la définition. Paramètres dappel: Ceux utilisés lors de lappel.

Avant d'utiliser une fonction de la bibliothèque il faut connaître son prototype. Le prototype d'une fonction indique le nom de la fonction le type des paramètres le type de la valeur de retour Les prototypes de fonctions Bien sur, pour utiliser une fonction il nest pas nécessaire de connaître le nom de ses paramètres formels.

Passage de paramètres Par copie: Les paramètres dappel sont copiés dans les paramètres formels: création de nouvelles variables. Par référence: Les paramètre formels réfèrent aux paramètres dappel: plusieurs noms pour une même case mémoire.

L'appel de fonctions Créations de nouvelles variables pour chacun des paramètres passés par copie. Le contrôle est donné à la fonction: la première ligne du corps de la fonction est d'abord exécutée. Remarques: Le nom des variables déclaré dans une fonction est local à cette fonction et il est invisible aux autres fonctions. Deux fonctions distinctes peuvent utiliser le même identificateur pour nommer deux cases mémoire distinctes.

Retour d'une fonction À l'intérieur d'une fonction, l'instruction RETOURNER expression est exécutée de la façon suivante: Lexpression est d'abord évaluée. Le résultat est retourné à la fonction appelante Toutes les variables ayant été créées après l'appel de la fonction sont détruites. Le contrôle est redonné à la fonction appelante.

Étude de cas 1: version C/C++ trois entiers : nombre1, nombre2, nombre3 réel : moyenne LIRE nombre1, nombre2, nombre3 moyenne moyenne3 (nombre1, nombre2, nombre3) AFFICHER moyenne #include int moyenne3 (int, int, int); int main() { int nombre1, nombre2, nombre3; int moyenne; std::cin >> nombre1 >> nombre2 >> nombre3; moyenne = moyenne3 (nombre1, nombre2, nombre3); std::cout << moyenne; return 0; }

Étude de cas 1: version C/C++ En-tête: moyenne3 ( entier a, entier b, entier c) retourne un réel Corps: réel m m (a + b + c) / 3 RETOURNER m double moyenne3 (int a, int b, int c) { double m; m = (a + b + c) / 3.0; return m; }

Étude de cas 2: version C/C++ deux réels : longueur largeur LIRE longueur largeur AFFICHER aire(longueur, largeur) #include double aire (double, double); int main() { double longueur, largeur; std::cin >> longueur >> largeur; std::cout << aire(longueur, largeur); return 0; }

Étude de cas 2: version C/C++ En-tête: aire(réel longueur, réel largeur) retourne un réel Corps: RETOURNER longueur * largeur double aire (double longueur, double largeur) { return longueur * largeur; }

Étude de cas 3: version C/C++ deux entiers : x, y LIRE x, y AFFICHER x, y échanger(x, y) AFFICHER x, y #include void echanger(int &, int &); int main() { int x, y; std::cin >> x >> y; std::cout << x << y; echanger(x, y); std::cout << x << y; return 0; }

Étude de cas 3: version C/C++ En-tête: échanger (entier référence a, entier référence b) Corps: entier tmp tmp a a b b tmp void echanger(int &a, int &b) { int tmp; tmp = a; a = b; b = tmp; }

Remarque En C++, le symbole & sert à indiquer qu'un paramètre est passé par référence. Il est utilisé dans len-tête de la définition ainsi que dans le prototype. Il n'est pas utilisé lors de lappel de la fonction. En C, il ny a pas de passage de paramètres par référence. Pour obtenir le même effet (c'est-à-dire pour pouvoir changer la valeur d'un paramètre) il faut utiliser les pointeurs que nous verrons plus tard.