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

Documents pareils