29
Support MOOC Objectifs Concepts centraux Etude de cas Compléments ©EPFL 2019-20 Jamila Sam & Jean-Cédric Chappelier Information, Calcul et Communication (partie programmation) : Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 : Variables et expressions – 1 / 28

Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

Conceptscentraux

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Information, Calcul et Communication(partie programmation) :

Variables et Expressions

Jamila Sam

Laboratoire d’Intelligence ArtificielleFaculté I&C

ICC (partie programmation) – Cours 2 : Variables et expressions – 1 / 28

Page 2: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

Conceptscentraux

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Vidéos, Quiz et transparents

www.coursera.org/learn/initiation-programmation-cpp/

+ Semaine 1

ICC (partie programmation) – Cours 2 : Variables et expressions – 2 / 28

Page 3: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

Conceptscentraux

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Objectifs de la leçon d’aujourd’hui

I Résumer ce qu’il faut avoir retenu des premières leçons duMOOC :I développement d’un programmeI variablesI typesI expressions

I Etude de cas (très simple ici)

I Compléments de cours :I un tout petit peu plus sur les types, dont charI autoI const/constexpr

I Répondre à vos questions

ICC (partie programmation) – Cours 2 : Variables et expressions – 3 / 28

Page 4: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Les instructions de l’ordinateur

Concrètement, quelles sont les instructions et les données« adaptées » à l’ordinateur?

Ordinateur 'microprocesseur

détermine l’ensemble des instructions élémentairesque l’ordinateur est capable d’exécuter ;

mémoire centraledétermine l’espace dans lequel des donnéespeuvent être stockées en cours de traitement

périphériquespermettent l’échange ou la sauvegarde à long termedes données

ICC (partie programmation) – Cours 2 : Variables et expressions – 4 / 28

Page 5: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Les instructions de l’ordinateur

Concrètement, quelles sont les instructions et les données« adaptées » à l’ordinateur?

Ordinateur 'microprocesseurmémoire centralepériphériques

+ C’est donc le microprocesseur qui détermine le« jeu d’instructions » (et le type de données) à utiliser.

On les appelle « Instructions Machine », « Langage Machine »,' « Assembleur »

On peut programmer directement le microprocesseur en langagemachine......mais c’est un peu fastidieux et de plus, chaque processeurutilise ses propres instructions

ICC (partie programmation) – Cours 2 : Variables et expressions – 4 / 28

Page 6: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Exemple d’instructions-machine

Programme en Assembleur1: LOAD 10 5 mettre 5 dans la mémoire 102: CMP 10 0 comparer le contenu de la mémoire 10 à 03: JUMP +3 si tel est le cas sauter 3 instructions plus loin4: DECR 10 décrémenter la mémoire 10 (de 1)5: JUMP -3 sauter 3 instructions en arrière6: END

Instructions machine :Instructions Code Machine données Code Machine

CMP 00000000 -3 10000011DECR 00000001 0 00000000END 00000010 2 00000010JUMP 00000011 3 00000011LOAD 00000100 5 00000101

6 0000011010 00001010

Le programme ci-dessus correspond donc physiquement enmachine à la séquence :0000010000001010000001010000000000001010000000000000001100000011

0000000100001010000000111000001100000010ICC (partie programmation) – Cours 2 : Variables et expressions – 5 / 28

Page 7: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

La notion de langage de programmation

Cependant, ces instructions-machine sont trop élémentairespour pouvoir être efficacement utilisées (par les humains) pourl’écriture de programmes...

. . . il faut donc fournir au programmeur la possibilité d’utiliser desinstructions de plus haut niveau, plus proches de notre manièrede penser et de conceptualiser les problèmes . . .

Exemples de langage de programmation de haut niveau :

« vieux » BASIC C

1 N=52 IF (N>0) THEN PRINT N;

N=N-1; GOTO 23 END

main() {int n;for (n=5; n>0; --n)printf("%d\n", n);

}

ICC (partie programmation) – Cours 2 : Variables et expressions – 6 / 28

Page 8: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

La notion de langage de programmation (2)

Comment rendre les instructions plus sophistiquéescompréhensibles par l’ordinateur?

+ traduire les séquences d’instructions de haut niveau eninstructions-machine directement exécutables par lemicroprocesseur

Selon ses caractéristiques, un tel traducteur est appelécompilateur ou interpréteur

L’ensemble des instructions de plus haut niveau qu’un compilateurou un interpréteur est capable de traiter constitue un langage deprogrammation.

ICC (partie programmation) – Cours 2 : Variables et expressions – 7 / 28

Page 9: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

La notion de langage de programmation (3)

Un langage de programmation est donc un moyen formelpermettant de décrire des traitements (i.e. des tâches à réaliser)sous la forme de programmes (i.e. de séquences d’instructions etde données de « haut niveau », compréhensibles par leprogrammeur) pour lesquels un compilateur ou un interpréteurest disponible pour permettre l’exécution effective par unordinateur.

Exemples de langages de programmation : C, python, Lisp, Java...et C++

ICC (partie programmation) – Cours 2 : Variables et expressions – 8 / 28

Page 10: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Interpréteur/Compilateur

Comment rendre les instructions plus sophistiquéescompréhensibles par l’ordinateur?

+ traduire les séquences d’instructions de haut niveau eninstructions-machine directement exécutables par lemicroprocesseur

Selon ses caractéristiques, un tel traducteur est appelécompilateur ou interpréteur.

L’ensemble des instructions de plus haut niveau qu’un compilateurou un interpréteur est capable de traiter constitue un langage deprogrammation.

ICC (partie programmation) – Cours 2 : Variables et expressions – 9 / 28

Page 11: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Interpréteur/Compilateur (2)

I Le compilateur traduit un programme, écrit dans un langagede haut niveau, en un fichier binaire (exécutable) spécifique àune architecture matérielle (ARM, x86, amd64, ...). Chaqueplateforme a son format de fichiers binaires (ELF, COFF, ...)

I L’interpréteur exécute un programme, écrit dans un langagede haut niveau, sans étape intermédiaire. Un programmeinterprété de manière naïve est plus lent qu’un programmecompilé, mais indépendant de l’architecture.

+ C++ est un langage compilé

ICC (partie programmation) – Cours 2 : Variables et expressions – 10 / 28

Page 12: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Le langage C++ (1)

I Extension objet du langage CI Développé initialement par Bjarn Stroustrup (1983-1985)I Normalisé ISO en 1998, 2002 et 2011

Le C date de 1969-1973.

ICC (partie programmation) – Cours 2 : Variables et expressions – 11 / 28

Page 13: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Le langage C++ (2)

Plus précisément, le langage C++ est un langage orienté-objetcompilé fortement typé :

C++ = C + typage fort + objets

Parmi les avantages de C++, on peut citer :

I Un des langages objets les plus utilisésI Un langage compilé, ce qui permet la réalisation

d’applications efficaces (disponibilité d’excellentscompilateurs open-source (GNU))

I Un typage fort, ce qui permet au compilateur d’effectuer denombreuses vérifications lors de la compilation⇒ moins de« bugs »...

I Un langage disponible sur pratiquement toutes lesplate-formes ;

I Similarité syntaxique et facilité d’interfaçage avec le C

ICC (partie programmation) – Cours 2 : Variables et expressions – 12 / 28

Page 14: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Le langage C++ (3)

. . . et les inconvénients :

I Similarité syntaxique avec le C !I Pas nécessairement de gestion automatique de la mémoireI Pas de protection de la mémoireI Syntaxe parfois lourde et peu intuitive (“pousse-au-crime”)I Gestion facultative des exceptionsI Effets parfois indésirables et peu intuitifs dus à la production

automatique de code

ICC (partie programmation) – Cours 2 : Variables et expressions – 13 / 28

Page 15: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Cycle de développement (1)

fichier source fichier exécutablecompilation

commande : g++ hello.cc -o hello

hello.cc

#include <iostream>using namespace std;

main() {

cout << "Hello World!" << endl;}

hello010100001010101

001010101001110

101111001010001

...

ICC (partie programmation) – Cours 2 : Variables et expressions – 14 / 28

Page 16: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Cycle de développement (2)

Programmer c’est :À réfléchir au problème ; concevoir l’algorithmeÁ traduire cette réflexion en un texte exprimé dans un langage

donné (écriture du programme source)Â traduire ce texte sous un format exécutable par un processeur

(compilation, c++ ou g++)Ã exécution du programme

En pratique :I erreurs de compilation (mal écrit)I erreurs d’exécution (mal pensé)

=⇒ correction(s) + d’où le(s) cycle(s) !

ICC (partie programmation) – Cours 2 : Variables et expressions – 15 / 28

Page 17: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Structure générale d’un programme C++

La structure très générale d’un programme C++ est la suivante :

#include <des_librairies_utiles>...

using namespace std; // on y reviendra

(déclaration d’objets globaux) [à éviter]

déclarations de fonctions utiles [recommandé]

int main() //ou int main(int argc, char **argv){corps duprogramme principal [si possible assez court]}

ICC (partie programmation) – Cours 2 : Variables et expressions – 16 / 28

Page 18: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Exemple de programme en C++

Résolution d’une équation du second degré : x2 +b x +c = 0

#include <iostream>#include <cmath>using namespace std;main() {

double b(0.0);double c(0.0);double delta(0.0);

cin >> b >> c;delta = b*b - 4*c;if (delta < 0.0) {

cout << "pas de solutions reelles" << endl;} else if (delta == 0.0) {

cout << "une solution unique : " << -b/2.0 << endl;} else {

cout << "deux solutions : " << (-b-sqrt(delta))/2.0<< " et " << (-b+sqrt(delta))/2.0 << endl;

}}

donnéestraitementsstructures de contrôle

ICC (partie programmation) – Cours 2 : Variables et expressions – 17 / 28

Page 19: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Données et traitements

Un programme C++ est donc à la base un ensemble detraitements s’effectuant sur des données.

Algorithme structures de donnéesTraitements Données

VariablesExpressions & OpérateursStructures de contrôleFonctions Portée

Chaînes de caractèresTableaux statiquesTableaux dynamiquesStructuresPointeurs

Entrées/Sorties

ICC (partie programmation) – Cours 2 : Variables et expressions – 18 / 28

Page 20: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Variables

En C++, une valeur à conserver est stockée dans une variablecaractérisée par :I son typeI et son identificateur ;

(définis lors de la déclaration)

La valeur peut être définie une première fois lors del’initialisation, puis éventuellement modifiée par la suite.

Rappels de syntaxe : Types élémentaires :type nom ; (déclaration) inttype nom(valeur); (initialisation) double

charnom = expression ; (affectation) bool

Exemples : int val(2) ;const double z(x+2.0*y);

constexpr double pi(3.141592653);i = j + 3;

ICC (partie programmation) – Cours 2 : Variables et expressions – 19 / 28

Page 21: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Variables et types

A retenir :I variable = représentation interne d’une « donnée » du

problème traité = une valeur

I en C++, les valeurs (donc aussi les variables) sont typées :« nature »/« ensemble d’appartenance » de la valeur

I Les principaux types élémentaires définis en C++ sont :int : (une partie des) nombres entiersdouble : (une partie des) nombres décimauxbool : les valeurs logiques « vrai » (true) et

« faux » (false)

char : les caractères ('a', '!', ...)

Note : nous verrons plus tard d’autres types :les types composés, les types énumérés et les types synonymes(alias de typeS).

ICC (partie programmation) – Cours 2 : Variables et expressions – 20 / 28

Page 22: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Valeurs Littérales

I valeurs littérales de type int : 1, 12, ...

I valeurs littérales de type double : 1.23, ...Remarque :

12.3e4 correspond à 12.3 ·104 (soit 123000)12.3e-4 correspond à 12.3 ·10−4 (soit 0.00123)

I valeurs littérales de type char : 'a', '!', ...Remarque :

le caractère ' se représente par \'le caractère \ se représente par \\

I valeurs littérales de type booléen : true, false

Remarque : la valeur littérale 0 est une valeur d’initialisation quipeut être affectée à une variable de n’importe quel type.

ICC (partie programmation) – Cours 2 : Variables et expressions – 21 / 28

Page 23: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Opérateurs

Operateurs arithmétiques* multiplication/ division% modulo+ addition- soustraction++ incrément (1 opérande)-- décrément (1 opérande)

Operateurs de comparaison== teste l’égalité logique!= non égalité< inférieur> supérieur<= inférieur ou égal>= supérieur ou égal

Operateurs logiques&& "et" logique|| ou∧ ou exclusif! négation (1 opérande)

Priorités (par ordre décroissant, tous les opérateurs d’un même groupesont de priorité égale) :! ++ --, * / %, + -, < <= > >=, == !=, ∧ &&, ||

ICC (partie programmation) – Cours 2 : Variables et expressions – 22 / 28

Page 24: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

ConceptscentrauxLangages deprogrammation

Cycle dedéveloppement

Structure généraled’un programmeC++

Données ettraitements

Les variables

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Expression

I une expression représente un calcul à faire, à évaluer

I expression = combinaison d’expressions, de valeurs, devariables, à l’aide d’opérateurs

I toute expression a un type (et une valeur) :en C++, toute expression fait quelque chose et vautquelque chose

ICC (partie programmation) – Cours 2 : Variables et expressions – 23 / 28

Page 25: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

Conceptscentraux

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

« Etude de cas »

Qu’affiche le code suivant :

(à découvrir en classe)

ICC (partie programmation) – Cours 2 : Variables et expressions – 24 / 28

Page 26: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

Conceptscentraux

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

auto

En , on peut laisser le compilateur deviner le type d’unevariable grace au mot-clé auto.

Le type de la variable est déduit du contexte. Il faut donc qu’il y aitun contexte, c’est-à-dire une initialisation.

Par exemple :auto val(2);auto j(2*i+5);auto x(7.2835);

Conseil : N’abuser pas de cette possibilité et explicitez vos typesautant que possibles.N’utilisez auto que dans les cas « techniques », par exemple (quiviendra plus tard dans le cours) :for (auto p = v.begin(); p != v.end(); ++p)

au lieu defor (vector<int>::iterator

p = v.begin(); p != v.end(); ++p)

ICC (partie programmation) – Cours 2 : Variables et expressions – 25 / 28

Page 27: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

Conceptscentraux

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Données modifiables/non modifiables

Par défaut, les variables en C++ sont modifiables.

Si l’on ne souhaite pas modifier une « variable » après soninitialisation : la définir comme constante (pour ce nom làuniquement)

La nature modifiable ou non modifiable d’une donnée au traversde ce nom peut être définie lors de la déclaration par l’indicationdu mot réservé const.

Elle ne pourra plus être modifiée par le programme en utilisant cenom (toute tentative de modification via ce nom produira unmessage d’erreur lors de la compilation).

Exemples :int const couple(2);double const g(9.81);

ICC (partie programmation) – Cours 2 : Variables et expressions – 26 / 28

Page 28: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

Conceptscentraux

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Expressions constantes

En C++11, il existe aussi le mot clé constexpr.

Il est d’utilisation plus générale, mais est aussi plus contraignantque const : la valeur initiale doit pouvoir être calculée à lacompilation.

+ Les deux (const et constexpr) sont donc très différents !

I const indique au compilateur qu’une donnée ne changera pasde valeur au travers de ce nom; mais

1. le compilateur peut très bien ne pas connaître la valeur enquestion au moment de la compilation ; et

2. cette valeur pourrait changer par ailleurs.

I constexpr indique au compilateur qu’une donnée nechangera pas du tout de valeur et qu’il doit pouvoir en calculerla valeur au moment de la compilation (i.e. cette valeur ne dépendpas de ce qu’il va se passer plus tard dans le programme).

Conseil : Si ces deux conditions sont vérifiées, on préfèrerautiliser constexpr.

ICC (partie programmation) – Cours 2 : Variables et expressions – 27 / 28

Page 29: Information, Calcul et Communication (partie …Variables et Expressions Jamila Sam Laboratoire d’Intelligence Artificielle Faculté I&C ICC (partie programmation) – Cours 2 :

Support MOOC

Objectifs

Conceptscentraux

Etude de cas

Compléments

©EPFL 2019-20Jamila Sam& Jean-Cédric Chappelier

Pour préparer le prochain cours

I Vidéos et quiz du MOOC semaine 2 :I Branchements conditionnels [13 :46]I Conditions [13 :14]I Erreurs de débutant le type bool [14 :34]

I Le prochain cours :I de 10h15 à 11h (résumé et quelques approfondissements)

ICC (partie programmation) – Cours 2 : Variables et expressions – 28 / 28