Document à télécharger
Transcription
Document à télécharger
Introduction au langage c++ Adaptée à l’environnement VLE 1.0 Gauthier Quesnel, Ronan Trépos INRA (Institut National de la Recherche Agronomique) G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 1 / 25 Plan 1 Quelques bases du langage c++ 2 Structures de contrôles c++ 3 Autres concepts c++ 4 Les structures de données VLE 5 Compilation G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 2 / 25 Plan 1 Quelques bases du langage c++ Commentaire et déclaration de variable Les types énumérés Les fonctions c++ Utilisation de fonction et affichage 2 Structures de contrôles c++ 3 Autres concepts c++ 4 Les structures de données VLE 5 Compilation G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 3 / 25 Commentaire et déclaration de variable Les commentaires, deux syntaxes possibles : /* et */ : tout ce qui se trouve entre les deux est oublié // : tout ce qui suit est un commentaire Une instruction se termine par ; La déclaration de variable est une instruction sous la forme: type identifiant = valeur; Exemple de commentaires et declaration de variable /* ceci est un commentaire sur plusieurs lignes . ceci est un commentaire sur plusieurs lignes . */ int x = 0; // ceci est la déclaration d’une variable de type int et // d’identifiant x ; sa valeur initiale est 0. Quelques types simples prédéfinis: int (entier naturel); bool (true ou false) ; double (réel) . . . G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 4 / 25 Les types énumérés Il est possible de définir de nouveaux types simples à l’aide du mot clef enum. Ce mot clef ne permet de définir que des variables qualitatives. Exemple // déclaration d’un nouveau type énuméré enum { PETIT , MOYEN , GRAND } TypeDeTaille ; // déclaration d’une variable de type TypeDeTaille TypeDeTaille t = GRAND ; // Changement de la valeur de t t = PETIT ; Rq: Pour créer des types plus complexes, il faut se référer aux principes de la programmation objet que nous n’aborderons pas ici. G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 5 / 25 Les fonctions c++ Une fonction est une partie nommée d’un programme que l’on peut appeler d’autres parties du programme aussi souvent que nécessaire. La signature d’une fonction à un seul argument prend la forme : typeRetour nomFonction(typeArgument idArgument) Exemple // Déclaration d’une fonction à deux arguments réels , x et y, et qui // retourne la somme de ces deux réels double somme ( double x, double y) { return x + y; } G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 6 / 25 Utilisation de fonction et affichage Pour utiliser une fonction, il faut que celle-ci soit préalablement définie (cf. transparent précédent). Pour afficher des données sur la console, on peut utiliser le flux de sortie std::cout. Exemple # include <iostream > // récupération de la bibliothèque // qui définit std :: cout double a = 5; // déclaration du réel a double b = 6; // déclaration du réel b double result = somme (a,b); // appel de la fonction somme std :: cout << ‘‘ le resultat est ‘‘ << result ; /* Sur la console sera affiché ‘‘le résultat est 11’’ */ G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 7 / 25 Plan 1 Quelques bases du langage c++ 2 Structures de contrôles c++ Les opérateurs logiques Le test conditionnel Les variables locales Les boucles (ou itérations) La structure de choix 3 Autres concepts c++ 4 Les structures de données VLE 5 Compilation G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 8 / 25 Les opérateurs logiques Un opérateur logique est une fonction (à un ou deux arguments) qui renvoie un bool. Les combinaisons de conditions : Opérateur == != < > <= >= Type égalité différent inférieur supérieur inférieur ou égal supérieur ou égal Opérateur and && or || xor ˆ not ! Type et ou ou exclusif négation Exemples bool a = (2 > 3); //a prend la valeur false bool b = (2 <= 2); //b prend la valeur true bool c = (( not b) and a) or (2 != 2); //c prend la valeur false G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 9 / 25 Le test conditionnel Les mots clefs : if : la commande de test else : si le test échoue else if : si le test échoue, nouvelle commande de test /* La fonction minimum renvoie le minimum de 2 réels */ double minimum ( double x, double y){ if (x < y) { return x; } else if(y < x){ return y; } else { return x;// si il y a egalité entre x et y on retourne x } } G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 10 / 25 Les variables locales Les variables locales sont declarées dans les fonctions et ne sont utilisables que dans cette une fonction. La fonction minimum renvoie le minimum de 2 réels double minimum ( double x, double y){ double min = 0; // en dehors de la fonction min ne // peut pas être utilisée if (x < y) { min = x; } else if(y < x){ min = y; } else { min = x; } return min; } Rq: les variables locales ne sont pas spécifiques aux fonctions, elles peuvent être déclarées et utilisées dans un bloc. G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 11 / 25 Les boucles (ou itérations) Les boucles ou itérations permettent de faire un traitement plusieurs fois en faisant varier une ou plusieurs variables. while: i varie de 0 à 99 int i = 0; while (i < 100) { // traitement pour i i++; //1 est ajouté à i. } f or: i varie de 0 à 99 for (int i = 0; i < 100; i++) { // traitement pour i } Exemaple: calcul de la somme 0 + 1 + . . . + 99 int som = 0; for (int i = 0; i < 100; i++) { som = som + i; // instruction équivalente : ‘‘som += i;’’ } std :: cout << ‘‘ som= ‘‘ << som; // affiche ‘‘som =4950 ’ ’ G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 12 / 25 La structure de choix Tester les valeurs par rapport à un ensemble de constantes (ne fonctionne que pour les entiers et les énumérations) enum {PETIT , MOYEN , GRAND } Taille ;// définition d’un type énuméré /* Définition d’une fonction ‘‘grandir ’’ qui retourne une nouvelle taille en fonction de la taille précédente */ Taille grandir ( Taille tailleAvant ){ Taille tailleApres = PETIT ; switch ( tailleAvant ) { case PETIT : // si tailleAvant == PETIT return MOYEN ; break ; case MOYEN : // si tailleAvant == MOYEN return GRAND ; break ; case GRAND : // si tailleAvant == GRAND return GRAND ; break ; } } G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 13 / 25 Plan 1 Quelques bases du langage c++ 2 Structures de contrôles c++ 3 Autres concepts c++ Les références Les espaces de noms 4 Les structures de données VLE 5 Compilation G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 14 / 25 Les références Définition Une référence, définie par le & est un nouveau nom pour une variable, c-à-d, un simple alias Exemple int x = 10; int& y = x; y = 4; // x = 10 // y = x // y = x donc x = 4 Attention Exemple Une référence est initialisée à sa construction, et sa valeur ne peut être changée int x = 10, z = 20; int& y = x; y = z; // y = x donc x = 20 ! G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 15 / 25 Les références Définition Une référence, définie par le & est un nouveau nom pour une variable, c-à-d, un simple alias Exemple int x = 10; int& y = x; y = 4; // x = 10 // y = x // y = x donc x = 4 Attention Exemple Une référence est initialisée à sa construction, et sa valeur ne peut être changée int x = 10, z = 20; int& y = x; y = z; // y = x donc x = 20 ! G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 15 / 25 Les espaces de noms Définition Un espace de noms est un mot clé associé à un ensemble de types C++ afin d’éliminer les problèmes de définition multiples Exemples namespace test { void toto () // définition d’une fonction // toto qui ne retourne rien (void) // dans l’espace de noms test { } } namespace test2 { void toto () { } } G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 16 / 25 Utilisation des espaces de noms Exemples // Utilisation des namespaces test :: toto (); test2 :: toto (); using namespace test; // demande au compilateur d’utiliser test // dans l’espace de nom global toto (); // cet appel de fonction est quivalent à // test :: toto () Remarques L’espace de nom de la bibliothèque C++ est std. L’espace de nom de la bibliothèque VLE est vle. G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 17 / 25 Plan 1 Quelques bases du langage c++ 2 Structures de contrôles c++ 3 Autres concepts c++ 4 Les structures de données VLE L’API des données de VLE Les différentes structures de données Création de Value Manipulation de Value 5 Compilation G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 18 / 25 L’API des données de VLE Une donnée dans VLE est du type complexe Value. Ce type de donnée est utilisé pour : échanger des informations entre modèles définir des paramètres et des entrées aux modèles L’API repose sur les conteneurs de la STL (Standard Template Library); voir par exemple : http://www.cplusplus.com/reference/stl/. Il est utile souvent de pouvoir créer des Value ainsi que de pouvoir les manipuler. G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 19 / 25 Les différentes structures de données Une Value peut prendre différentes formes. Un réel : Double , un booléen : Boolean ou un entier : Integer. Une chaîne de caractères : String. “Ceci est une chaîne de caractères” Un tuple de réels : Tuple. Par exemple: (1, 6, 4, 5) Un ensemble de Value : Set. Un dictionnaire de Value : Map. Par exemple: (0 x 0 => 1,0 y 0 => 3) ... Rq : Les Map et Set sont des types composés, il peuvent contenir des Value qui eux même peuvent être des Map ou des Set, etc... G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 20 / 25 Création de Value Exemples de créations de Value # include <vle/ value .hpp > // import de l’API Value using namespace vle :: value ; Integer a(1); // création d’un entier a initialisé à 1 a = 2; // modification de la valeur de a std :: cout << ‘‘a: ’’ << a; // affichage ‘‘a: 1’’ Map m; // création d’un dictionnaire vide m. addInteger (‘‘x’’ ,1); // ajout d’un entier ‘‘x’’ dans m m. addString (‘‘y’’,‘‘coucou ’’); std :: cout << ‘‘m: ’’ << m; // affichage ‘‘m: (x=>1,y=> coucou )’’ Set s; // création d’un ensemble vide s. addInteger (a); // ajout de l’entier a dans s s. addMap (m); std :: cout << ‘‘s: ’’ << s; // affichage ‘‘s: (1 ,(x=>1,y=> coucou ))’’ G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 21 / 25 Manipulation de Value Exemple de manipulations de Value /* Fonction qui prend en argument une référence sur une Value et ne retourne rien (void) */ void uneFonction (const Value & v){ // change le type de v en Set const Set& s = v. toSet (); // affiche tous les éléments de s for(int i=0; i<s.size (); i++){ std :: cout << ‘‘ieme elt=’’ << s.get(i); } // recupere le 2eme element // qui doit être un réel double d = s. getDouble (1); } Note: Ce code peut produire des erreurs si le type de v ne peut pas être changé en Set s contient moins de 2 éléments ou le 2eme élément n’est pas un réel G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 22 / 25 Plan 1 Quelques bases du langage c++ 2 Structures de contrôles c++ 3 Autres concepts c++ 4 Les structures de données VLE 5 Compilation G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 23 / 25 Compilation avec CMake Compilation La compilation permet de rendre le code C++ compréhensible par le système d’exploitation Bibliothèque dynamique Une bibliothèque dynamique permet de partager du code compilé entre plusieurs applications VLE repose sur l’outil CMake qui est un système open-source et multi-plateforme (Windows, Linux, . . . ) de construction. Pour configurer CMake (quelle bibliothèque construire à partir de quels fichiers de code source), il faut utiliser un langage déclaratif dans des fichiers nommés CMakeLists.txt G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 24 / 25 Introduction au c++ Auteurs Gauthier Quesnel et Ronan Trépos [email protected] Licence Copyright (C) 2008 - INRA Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". G. Quesnel, R. Trépos (INRA) Cours C++ / RECORD 25 / 25