Informatique II : [5pt] Cours de programmation (C++ ...icsam/infosv/slides/cours01-full.pdf ·...

66
Objectifs Présentation du cours Notes et examens Présentation de C++ Rappels de programmation c EPFL 2002–2012 Jamila Sam ÉCOLE POLYTECHNIQUE DÉRALE DE LAUSANNE Informatique II : Cours de programmation (C++) INTRODUCTION Jamila Sam Haroud Laboratoire d’Intelligence Artificielle Faculté I&C Informatique II –Cours 1 : – Introduction – – 1 / 65

Transcript of Informatique II : [5pt] Cours de programmation (C++ ...icsam/infosv/slides/cours01-full.pdf ·...

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Informatique II :

Cours de programmation (C++)INTRODUCTION

Jamila Sam Haroud

Laboratoire d’Intelligence ArtificielleFaculté I&C

Informatique II –Cours 1 : – Introduction – – 1 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Objectifs du cours d’aujourd’hui

◮ Présenter le cours◮ Objectifs (« Quoi ? »)◮ Administration (« Comment ? »)

◮ Présenter la matière :◮ Qu’est-ce que C++ (notamment par rapport à C) ?◮ Qu’est-ce que la programmation orientée-objet ?

◮ Bases élémentaires de programmation (rappels) :◮ Variables et expressions◮ Structures de contrôle

Informatique II –Cours 1 : – Introduction – – 2 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Objectifs du cours

1. Apprendre à programmer de façon plus concise et modulairemais aussi plus fiable et élégante en exploitant les conceptsorientés-objets

☞ au moyen du langage C++

2. Approfondir quelques notions de structuration des données(algorithmique, généricité)

Informatique II –Cours 1 : – Introduction – – 3 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Présentation générale du cours

Public : Cours obligatoire pour les étudiants de 2e semestrede la section des Sciences de la Vie.Connaissances supposées acquises : bases de laprogrammation en C

Langue : Français

Moyens :Concepts théoriques introduits lors de coursmagistraux ex-cathedra (Mardi 1015–1200)

mis en pratique, de manière guidée, lors deséances d’exercices sur machines (Vendredi1415–1600)

Informatique II –Cours 1 : – Introduction – – 4 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Présentation générale du cours

http://moodle.epfl.ch/course/view.php?id=7941

Horaires et Contenu : Un planning détaillant le contenu de chaqueséance est disponible sur le site internet du cours.

Encadrement : Deux assistants et 12 assistants-étudiants (voirégalement le site internet du cours)

Informatique II –Cours 1 : – Introduction – – 5 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Interaction avec les enseignants

Plusieurs moyens pour contacter les enseignants, assistants etétudiants-assistants pour poser des questions sur le cours ou lesexercices :

◮ Durant les séances d’exercices :

☞ c’est le moyen le plus direct, et généralement le plus efficace.

◮ Par l’intermédiaire du forum (dans site Moodle)

☞ moyen idéal pour diffuser la connaissance

N’hésitez pas à en faire usage !

◮ par email aux assistants :

☞ mais pour les cas généraux, préférez le forum.

Les contacts personnels avec l’enseignant (email, té-léphone ou visites) devront être strictement réser-vés aux cas personnels et/ou urgents !

Informatique II –Cours 1 : – Introduction – – 6 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Support de cours

◮ Transparents mis à disposition via le site Webparfois enrichis de notes techniques (mini-références)détaillant certains concepts évoqués pendant le cours, enparticulier les éléments du langage C++également parfois des références complémentaires(bibliographiques et/où hyperliens Internet)

◮ Énoncé des exercicesdisponibles sur le site Web en fin de semaine.

◮ Corrigé des exercicesdisponibles sur le site Web en fin de semaine suivante.

Informatique II –Cours 1 : – Introduction – – 7 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Support de cours

Ces éléments devraient constituer une documentationsuffisante pour ce cours !

Si vous souhaitez la compléter, les ouvrages suivant sontégalement recommandés

Marylène Micheloud & Medard RiederProgrammation orientée objets en C++– une approche évolutive, PPUR, 1997.

Il est disponible pour un prix avoisinant les 43 CHF.

Informatique II –Cours 1 : – Introduction – – 8 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Support de cours

Ces éléments devraient constituer une documentationsuffisante pour ce cours !

Si vous souhaitez la compléter, les ouvrages suivant sontégalement recommandés

J.-C. Chappelier & F. SeydouxC++ par la pratique –recueil d’exercices corrigés et aide-mémoire,PPUR, nouvelle édition corrigée, 2012.

Il est disponible pour un prix avoisinant les 50 CHF.

Informatique II –Cours 1 : – Introduction – – 8 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Notes et examens

Les épreuves de contrôle continu seront les suivantes :

◮ Série notée (bonus) individuel , 1h15

◮ Examen théorique individuel , 1h45

◮ Projet en binômes , environ 8 semaines

Informatique II –Cours 1 : – Introduction – – 9 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Calcul de la note

◮ La note, Nindividuel , pour les tests individuels est calculéecomme suit :

Nindividuel = max( (NSerieNotee+NTestEcrit )2 ,NTestEcrit)

◮ La note finale, N, est calculée comme suit :

N =(Nindividuel+Nprojet )

2

◮ Les notes intermédiaires ne sont pas arrondies.

◮ Les cours Informatique I et II comptent chacun pour la moitiédu semestre. Le calcul de la note se fait sur les notesnon-arrondies de chaque semestre. L’arrondi de la note finalese fait au demi-point le plus proche.

Informatique II –Cours 1 : – Introduction – – 10 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Notes et examensSérie notée

Objectif : vérifier la maîtrise des concepts du langage C++exposés en cours.

Séance d’exercices, à l’issue de laquelle le travail réalisé estenvoyé par courrier électronique aux assistants responsables.

Réalisée individuellement

La série notée aura lieu le :

Jeudi 3 Mai

Informatique II –Cours 1 : – Introduction – – 11 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Notes et examensExamen

Le semestre sera clôturé par un examen écrit portant sur lecontenu du cours et les séances d’exercices.

Date :

Mardi 21 Mai

Informatique II –Cours 1 : – Introduction – – 12 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Notes et examens« Défense » du projet

La dernière séance de TP sera consacrée aux défenses deprojets (pas vraiment de préparation nécessaire si vous avez suivil’échéancier proposé)

Date :

Vendredi 31 Mai

Vous présenterez :◮ ce que vous avez fait (petite démonstration)◮ comment vous avez procédé : choix, méthodes, organisation◮ quelles difficultés vous avez rencontrées et comment vous les

avez traitées◮ en conclusion : ce que vous avez retenu du projet.

Informatique II –Cours 1 : – Introduction – – 13 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Le langage C++ (1)

◮ Extension objet du langage C◮ Développé initialement par Bjarn Stroustrup (1983-1985)◮ Normalisé ISO en 1998 puis 2002

Le C date de 1969-1973.

Informatique II –Cours 1 : – Introduction – – 14 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

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 :

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

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

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

◮ Un langage disponible sur pratiquement toutes lesplate-formes;

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

Informatique II –Cours 1 : – Introduction – – 15 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Le langage C++ (3)

. . . et les inconvénients :

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

automatique de code

Informatique II –Cours 1 : – Introduction – – 16 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

La nouvelle norme C++11

La nouvelle norme C++11, acceptée par le comité ISO le 12 Août2011, introduit de nombreuses nouveautés.Stratégie du cours :

◮ Introduire petit à petit certains des concepts les plusimportants

☞ Les compilateurs actuels intègrent de plus en plus de cesnouveautés

☞ Tout ce que vous écrivez comme code sous l’ancienne normefonctionnera aussi avec la nouvelle

Vous êtes bien sûr libres de coder votre projet selon la nouvellenorme (dans la limite des compétences des compilateursdisponibles en salle CO).

☞ Voir la mini-référence sur C++11

Informatique II –Cours 1 : – Introduction – – 17 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Qu’est-ce que la Programmation OrientéeObjets ?

Dans les grandes lignes :◮ c’est une manière de structurer les données et les traitements

intéragissant dans un programme;◮ la POO n’est pas spécifique à un langage particulier (voir Gtk

par exemple)◮ en POO, un objet regroupe les données et les traitements

relatifs à un concept particulier. Les objets interagissent entreeux.

Un objet peut être vu comme une struct :

◮ dotée de fonctions qui lui sont spécifiques (méthodes) et quipermettent de manipuler les données qu’elle contient;

◮ dans laquelle l’accès direct aux données peut-être interditpour définir un cadre d’utilisation précis.

Informatique II –Cours 1 : – Introduction – – 18 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Concepts caractéristiques de la POO

◮ Abstraction des données : les données sont manipulées àl’aide de méthodes qui cachent leur représentation interne

☞ on peut imposer que ces méthodes vérifient l’intégrité desdonnées (fiabilité)

☞ l’utilisation d’une donnée ne dépend plus des choix faits poursa représentation (facilité de maintenance)

☞ des données différentes peuvent être manipulées de manièreidentique(concision)

◮ Héritage : on peut prendre un type d’objets déjà existant et luirajouter des données et/ou des méthodes pour en faire unnouveau type d’objets

☞ on peut donc établir des liens sémantiques entre des typesd’objets et éviter des redondances dans leurs descriptions(concision).

Informatique II –Cours 1 : – Introduction – – 19 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Avantages de la POO

◮ Façon naturelle de modéliser les données et traitementsintervenant dans un programme

◮ Modularité : le programme est composé d’un ensembled’entités (types d’objets) aux rôles bien déterminés

◮ Réutisabilité : chaque type d’objets peut être réutilisé, sasémantique peut être étendue par le biais de l’héritage

◮ Polymorphisme : un même code peut s’appliquer à destypes d’objets différents

◮ Abstraction : la représentation des données est découpléede leur utilisation. De plus des règles précises d’utilisationdes données peuvent être imposées.

◮ d’énormes librairies déjà écrites (Java, C#)

☞ Efficacité dans la conception des programmes, concision ducodage, meilleures fiabilité et maintenabilité des programmes

Informatique II –Cours 1 : – Introduction – – 20 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Quelques défauts aussi . . .

La POO peut :◮ impliquer une certaine lourdeur pour le codage de choses

simples;◮ engendrer des coûts algorithmiques plus élevés pour la

manipulation de types élémentaires

En C++ les types fondamentaux (élémentaires) ne sont pas desobjets.

Informatique II –Cours 1 : – Introduction – – 21 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammation

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Exemples de langages orientés-objet

◮ Smalltalk (Xerox PARC, 1980);◮ Objective-C (Apple, Brad Cox, 1986);◮ Python (Open source, Guido van Rossum, 1990);◮ Java (Sun Microsystem, 1995)◮ C# (Microsoft, 2001)

Par ailleurs, la plupart des langages non-objets admettent uneextension objets :

◮ Caml◮ PERL◮ PHP◮ etc . . .

Informatique II –Cours 1 : – Introduction – – 22 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

C++ comme sur-ensemble de C

Tout ce qui est syntaxiquement valide en C l’est aussi en C++,mais :

◮ C++ a apporté quelques changements plus élégants◮ la couche objet peut aussi avoir une incidence sur les choix

syntaxiques à effectuer

☞ Dans ce cours nous adhérerons le plus possible à unesyntaxe purement "C++ ienne"

Cette icône sera utilisée pour indiquer les différences principales entreC et C++

C / C++

Informatique II –Cours 1 : – Introduction – – 23 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

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]}

Informatique II –Cours 1 : – Introduction – – 24 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Compilation et nommage de fichiers C++fichier source fichier exécutable

compilateur

commande : g++ hello.cc -o hello

hello.cc

#include <iostream>using namespace std;

main() {

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

hello010100001010101

001010101001110

101111001010001

...

C / C++ En C++ les fichiers sources se terminent par l’extension .cc ou .cpp

(au lieu de .c en C).

Pour des systèmes de type Unix, le compilateur C++ sera invoqué au moyen de la

commande g++ (ou parfois c++ ) au lieu de gcc pour C.

Informatique II –Cours 1 : – Introduction – – 25 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Premier 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

Informatique II –Cours 1 : – Introduction – – 26 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Données et traitementsComme en C, un programme C++ est donc à la base unensemble de traitements 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

L’aspect orienté-objet de C++ permet d’intégrer données ettraitements dans une structure unique, les objets , qui serontdéfinis par le biais de classes . Avant de développer cet aspect,commençons par quelques rappels/mise à jour sur les conceptsdu tableau ci-dessus.

Informatique II –Cours 1 : – Introduction – – 27 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Variables

Pour être utilisée dans un programme C++, une donnée doit êtrestockée quelque part en mémoire. C’est un objet informatique quipourra être manipulé par le programme.

Ces données peuvent être :◮ temporaire/transitoires, et anonymes (nous y reviendrons) ;◮ identifiées/nommées pour être réutilisées : la zone mémoire

utilisée est alors décrite au niveau du langage deprogrammation par une variable .

Informatique II –Cours 1 : – Introduction – – 28 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Déclaration de variablesEn C++, une variable doit être déclarée avant d’être utilisée.

Comme en C, la syntaxe de la déclaration d’une variable est :

type identificateur ;

où type est l’identificateur de type de la variable déclarée etidentificateur est une chaîne de caractères permettant deréférer la variable créée et donc de l’utiliser dans un programme.

Exemples : int val;double delta;

Un identificateur de variable peut être n’importe quelle séquencecomposée de lettres, de chiffres ou du caractère ’_’ etcommençant par une lettre ou par ’_’. Il ne doit pas correspondreà un mot réservé du langage (if, else, while, ...)

Conseil : Pour vos variables, utilisez des noms aussi explicitesque possible .

Une donnée temporaire n’a qu’un type et une valeur, mais pas de nom.Informatique II –Cours 1 : – Introduction – – 29 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Affectation

L’opération d’affectation affecte (!) une valeur à une variable.

Comme en C, la syntaxe d’une affection est :

identificateur = valeur ;

où valeur est une constante ou une expression (voir plus loin)du même type que la variable référencée par identificateur .

Exemple : i = 3 ;

Informatique II –Cours 1 : – Introduction – – 30 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Initialisation

En même temps qu’elle est déclarée, une variable peut êtreinitialisée , c’est-à-dire qu’on lui donne une première valeur avantmême toute utilisation.

Note : il est possible d’utiliser une variable non initialisée. Ceci doitau maximum être évité ! Initialisez toujours vos variables... ...celavous évitera bien des soucis par la suite.

La syntaxe de la déclaration/initialisation d’une variable est :

type identificateur ( valeur_d’initialisation ) ;

où valeur_d’initialisation est n’importe quelle constante(i.e. valeur littérale) ou expression du type indiqué.

Exemples : int val(2) ;double pi(3.1415) ;char c(’a’) ;int j(2 * i+5) ;

Les expressions vont être définieset détaillées plus tard

Informatique II –Cours 1 : – Introduction – – 31 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Valeurs Littérales

◮ valeurs littérales de type entier : 1, 12, ...

◮ valeurs littérales de type réel : 1.23, ...Remarque :

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

◮ valeurs littérales de type caractère : ’a’, ’!’, ...Remarque :

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

◮ 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.

Informatique II –Cours 1 : – Introduction – – 32 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

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)

Informatique II –Cours 1 : – Introduction – – 33 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Données modifiables/non modifiables

Par défaut les variables sont modifiables.

Comme en C, si on ne veut pas qu’une variable soit modifiable : ladéfinir comme constante par l’indication du mot réservé constlors de la déclaration :

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

Une fois déclarée, une constante ne pourra donc plus êtremodifiée par le programme (toute tentative de modificationproduira un message d’erreur lors de la compilation).

Informatique II –Cours 1 : – Introduction – – 34 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Expressions constantes

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

Il est d’utilisation plus générale (voir futur cours sur les fonctions),mais est aussi plus contraignant que const : la valeur initiale doitpouvoir être calculée à la compilation.

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

◮ 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.

◮ 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 .

Informatique II –Cours 1 : – Introduction – – 35 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Variables

Cette icône sera utilisée pour indiquer lestransparents « résumé », c’est-à-dire repre-nant les point principaux d’un aspect du lan-gage.

Toutes les fiches résumé sont accessibles depuis le site web

Informatique II –Cours 1 : – Introduction – – 36 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Variables

En C++, une valeur à conserver est stockée dans une variablecaractérisée par :

◮ son type◮ 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;

Informatique II –Cours 1 : – Introduction – – 37 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Opérateurs et expressions (1)

Les opérateurs arithmétiques sont :

* multiplication/ division% modulo (Remarque : le modulo est le reste de la division entière)

+ addition- soustraction

L’évaluation d’une expression conduit (naturellement) à sa valeur.Exemple : l’évaluation de l’expression (2 * (13-3)/(1+4))correspond à la valeur 4

Note : nous avons déjà précédemment rencontré l’opérateur =, ditd’affection, qui est universel : il s’applique à tout type.

Informatique II –Cours 1 : – Introduction – – 38 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Opérateurs et expressions (2)Autres exemples d’expressions, utilisées ici pour des affectations :

z = (x + 3) % y;z = (3 * x + y) / 10;

C++ fournit un certain nombre de notations abrégées pour desaffectations particulières.x = x + y peut aussi s’écrire x += y(idem pour - , * , / et %)

x = x + 1 peut aussi s’écrire ++x(idem pour - : --x )

C / C++ En C, choisir l’instruction x++; plutôt que ++x; pour l’incrémentation d’une

x variable de type élémentaire n’a quasiment aucune incidence

sur l’efficacité du programme.

En C++, nous verrons que x peut être un objet quelconque.

Or, l’opérateur postfixé copie la valeur originale de x , incrémente x ,

puis retourne sa valeur originale.

Pour éviter une copie inutile et qui peut-être coûteuse , on utilisera

systématiquement la notation préfixée ,++x (sauf en cas de réelle nécessité).

Informatique II –Cours 1 : – Introduction – – 39 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

ATTENTION PIÈGE !

Remarque sur l’opérateur de division en C++:◮ si a et b sont des entiers, a/b est le quotient de la division

entière de a par bExemple : 5/2 = 2(et a%best le reste de la division entière de a par bExemple : 5%2 = 1)

◮ si a ou b sont des réels, a/b est le résultat de la divisionréelle de a par bExemple : 5.0/2.0 = 2.5

Note : dans une expression constante, on distingue un réel d’unentier en lui ajoutant . à la fin. En général pour la lisibilité onpréfère ajouter .0 :

5.0 (réel)←→ 5 (entier)

C’est un point.

Informatique II –Cours 1 : – Introduction – – 40 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Priorité entre Opérateurs

Il est largement préférable de parenthèser ses expressions (neserait-ce que pour la lisibilité !).Par exemple écrire (a * b) % c plutôt que a * b % c

En l’absence de parenthèsage, l’ordre de priorité des opérateurssera :

* ou / ou %puis + ou -

Tous ces opérateurs sont associatifs à gauche : a+b+c =(a+b)+cEn cas d’ambiguité entre opérateurs du même ordre de prioritéc’est la règle d’associativité qui s’applique

Exemples : a * b % c = (a * b) % ca % b * c = (a % b) * ca + b * c % d = a + ((b * c) % d)

Informatique II –Cours 1 : – Introduction – – 41 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Opérateurs de comparaison

Les opérateurs de comparaison sont :

== égalité logique!= non égalité< inférieur> supérieur<= inférieur ou égal>= supérieur ou égal

Leur résultat est un booléen.

Exemples : x >= yx+y == 4

Informatique II –Cours 1 : – Introduction – – 42 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

ATTENTION PIÈGE !

Ne pas confondre l’opérateur de test d’égalité == etl’opérateur d’affectation = !

x = 3 : affecte la valeur 3 à la variable x(et donc modifie cette dernière)

x == 3 : teste la valeur de la variable x , renvoie true si elle vaut3 et false sinon(et donc ne modifie pas la valeur de x)

Informatique II –Cours 1 : – Introduction – – 43 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Opérateurs logiques

Les opérateurs logiques sont :

&& « et »|| « ou »∧ « ou exclusif »! négation (Remarque : cet opérateur n’a qu’un seul opérande)

Exemples : ((z != 0) && (2 * (x-y)/z < 3))

bool un_test(true);...((x >= 0) || ((x * y > 0) && !un_test))

Informatique II –Cours 1 : – Introduction – – 44 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Opérateurs logiques (2)

Les opérateurs logiques &&, || et ! sont définis par les tables devérité usuelles :

x y !x x && y x || y x ∧ y

true true false true true false

true false false false true true

false true true false true true

false false true false false false

Informatique II –Cours 1 : – Introduction – – 45 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Évaluation « paresseuse »

Les opérateurs logiques && et || effectuent une évaluation« paresseuse » (« lazy evaluation ») de leur arguments :

l’évaluation des arguments se fait de la gauche vers la droite et seuls lesarguments strictement nécessaires à la détermination de la valeurlogique sont évalués.

Ainsi, dans X1 && X2 && ... && Xn , les arguments Xi nesont évalués que jusqu’au 1er argument faux (s’il existe, auquelcas l’expression est fausse, sinon l’expression est vraie);

Exemple : dans (x != 0.0) && (3.0/x > 12.0) le secondterme ne sera effectivement évalué uniquement si x est non nul.La division par x ne sera donc jamais erronée.Et dans X1 || X2 || ... || Xn, les arguments ne sont évaluésque jusqu’au 1er argument vrai (s’il existe, auquel cas l’expressionest vraie, sinon l’expression est fausse).

Exemple : dans (x == 0.0) || (3.0/x < 12.0) le secondterme ne sera effectivement évalué uniquement si x est non nul.

Informatique II –Cours 1 : – Introduction – – 46 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Expressions logiques

Une expression logique est une expression de type booléen, dontles valeurs possibles sont donc true et false .

Cependant, en C++, n’importe quelle expression de n’importequel type peut être considérée comme une expression logique.Ceci est fait via la convention suivante :Si l’évaluation de l’expression conditionnelle est une valeur nulle,alors la condition sera dite fausse , sinon elle sera dite vraie .

Exemples d’expressions vraies Exemples d’expressions faussestrue || false true && false2 00.5 + 0.33 16 % 2

Conseil : évitez d’utiliser cette possibilité du langage et préférezécrire explicitement vos expressions logiques.Par exemple, écrivez if (x != 0) plutôt que if (x) .

Informatique II –Cours 1 : – Introduction – – 47 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

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) :! ++ -- , * / %, + - , < <= > >= , == != , ∧ &&, ||

Informatique II –Cours 1 : – Introduction – – 48 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Entrée-Sorties de base

En C++ les entrées-sorties se font par le biais de flots (streams) :

◮ Flot = objet dans lequel on peut lire (entrée) ou écrire(sortie)des données

◮ cout est le symbole associé au flot de sortie standard(terminal)

◮ cin est le symbole associé au flot d’entrée standard (clavier)◮ la lecture dans un flot se fait au moyen de l’opérateur >>

◮ l’écriture dans un flot se fait au moyen de l’opérateur <<

◮ Pour utiliser cout et cin , il faut inclure la librairie iostream

Nous reviendrons plus en détails sur les entrées-sorties dansdeux cours.

C / C++

E/S en CEn pur C, les entrées-sorties se font au moyen des fonctions printf et scanf .

Nous ne les utiliserons pas dans le cadre de ce cours.

Informatique II –Cours 1 : – Introduction – – 49 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Entrée-Sorties de base : lecture

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

int x;double y;

// Lecture:cin >> x >> y;

return 0;}

◮ l’opérateur >> lit des valeurs dans un flot d’entrée et lesaffecte (dans l’ordre de lecture) aux variables se trouvant sursa droite.

◮ les différentes valeurs à lire seront séparées par un espaceou un retour à la ligne.

Informatique II –Cours 1 : – Introduction – – 50 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Entrée-Sorties de base : écriture

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

// Ecriture:cout << "un entier :" << n << "un double :" ;cout << ( 12.5 + 3.0 ) << endl;return 0;

}

◮ l’opérateur << prend un flot de sortie à gauche, un typequelconque à droite. Il réalise l’écriture sur le support associéau flot et retourne le flot.

◮ endl provoque un saut de ligne.

Informatique II –Cours 1 : – Introduction – – 51 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Instructions composées : les blocs

En C++, les instructions peuvent être regroupées en blocs .

Les blocs sont identifiés par des délimiteurs explicites de débutet de fin de bloc : { }

Exemple de bloc :

{int i ;double x ;cout << "Valeurs pour i et x : " << endl ;cin >> i >> x ;cout << "Vous avez saisi : i=" << i

<< ", x=" << x << endl ;}

Informatique II –Cours 1 : – Introduction – – 52 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Branchement conditionnel

La syntaxe générale d’un branchement conditionnel est :

if (condition)Instructions 1

else Instructions 2

La condition, qui s’exprime au moyen d’une expression , est toutd’abord évaluée puis, si le résultat de l’évaluation est vrai alors laséquence d’instructions 1 est exécutée, sinon la séquenced’instructions 2 est exécutée.

Le else est optionnel

Instructions 1 et Instructions 2 sont soit uneinstruction élémentaire , soit un bloc d’instructions .Note : Il est conseillé de toujours utiliser la syntaxe par bloc.

Informatique II –Cours 1 : – Introduction – – 53 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Choix multiplesOn peut écrire de façon plus synthétique l’enchaînement deplusieurs conditions dans le cas où l’on teste différentes valeurs(entières) d’une expressionif (i == 1)

Instructions 1else if (i == 12)

Instructions 2...else if (i == 36)

Instructions Nelse

Instructions N +1

switch (i) {case 1:

Instructions 1break ;

case 12:Instructions 2break ;

...case 36:

Instructions Nbreak ; Informatique II –Cours 1 : – Introduction – – 54 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Exemple plus complexe

Si on ne mets pas de break , l’exécution ne passe pas à la fin duswitch , mais continue l’exécution des instructions du casesuivant :switch (a +b) {

case 2:case 8: instruction2; // lorsque (a+b) vaut 2 ou 8case 4:case 3: instruction3; // lorsque (a+b) vaut 2, 3, 4 ou 8

break ;case 0: instruction1; // execution uniquement lorsque

break ; // (a+b) vaut 0default : instruction4; // dans tous les autres cas

break ;}

Informatique II –Cours 1 : – Introduction – – 55 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

BouclesLa syntaxe générale d’une boucle avec condition de continuationa priori (on veut tester la condition avant d’exécuter lesinstructions) est :while (condition)

Instructions

Tant que la condition de continuation est vérifiée, les instructionssont exécutées. a posteriori (on veut exécuter les instructions au

moins une fois avant de tester la condition) est :do

Instructionswhile (condition);

Les instructions sont exécutées jusqu’à ce que la condition decontinuation soit fausse (et au moins une fois au départ,indépendemment de la valeur de la condition).

Même remarque ici que pour if :Instructions est soit une instruction élémentaire (suivie deson ; ), soit un bloc d’instructions .Il est plutôt conseillé de toujours utiliser la syntaxe par bloc.Informatique II –Cours 1 : – Introduction – – 56 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

L’itération for « classique »

Les itérations permettent l’application itérative d’un traitement,contrôlée par une initialisation , une condition de continuation ,et une opération de mise à jour de certaines variables.Syntaxe :for (initialisation; condition; mise_a_jour)

Instructions

Même remarque ici que pour if et while :Instructions est soit une instruction élémentaire (suivie deson ; ), soit un bloc d’instructions .Il est plutôt conseillé de toujours utiliser la syntaxe par bloc.

Note : Une boucle for (sans continue !) est équivalente à laboucle while suivante :

{ initialisation;while (condition) {

Instructions;mise_a_jour;

}}

Informatique II –Cours 1 : – Introduction – – 57 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Boucles : Exercice

int i( 0);while (i > 1) {

cout << i << endl;i = i / 2 ;

}

int i( 0);do {

cout << i << endl;i = i / 2 ;

} while (i > 1);

affichera affichera

Informatique II –Cours 1 : – Introduction – – 58 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

L’itération for : Exercice

Remarque : si plusieurs instructions d’initialisation ou de mise àjour sont nécessaires, elles sont séparées par des virgules . Ellessont exécutées de la gauche vers la droite .

Qu’affiche l’instruction suivante ?

for ( int i( 0), s( 0); i < 5; s += i, ++i) {cout << i << ", " << s << endl ;

}

Informatique II –Cours 1 : – Introduction – – 59 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Les itérations for de C++11

En , il y a DEUX sortes d’itérations :◮ les itérations « classiques » (telles que nous venons de les

voir), très générales ;◮ les nouvelles itérations, spéciquement pour parcourir des

ensembles de valeurs.

Les deux utilisent le mot clé for , mais se distinguent par leursyntaxe :

for ( initialisation ; condition ; mise_à_jour )

for ( déclaration : ensemble )

Voici un exemple d’itération sur un ensemble (nous y reviendronslors des rappels sur les tableaux):for ( int i : { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }){

cout << i * i << endl ;}

Informatique II –Cours 1 : – Introduction – – 60 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Sauts : break et continue

C++ fournit deux instructions prédéfinies, break et continue ,permettant de contrôler de façon plus fine le déroulement d’uneboucle.

◮ Si l’instruction break est exécutée au sein du bloc intérieurde la boucle, l’exécution de la boucle est interrompue(quelque soit l’état de la condition de contrôle);

◮ Si l’instruction continue est exécutée au sein du blocintérieur de la boucle, l’exécution du bloc est interrompue et lacondition de continuation est évaluée pour déterminer sil’exécution de la boucle doit être poursuivie.

Conseil : En toute rigueur on n’aurait pas besoin de cesinstructions, et tout bon programmeur évite de les utiliser.

Pour la petite histoire, un bug lié à une mauvaise utilisation de break; aconduit à l’effondrement du réseau téléphonique longue distance d’AT&T,le 15 janvier 1990. Plus de 16’000 usagers ont perdu l’usage de leur télé-phone pendant près de 9 heures. 70’000’000 d’appels ont été perdus.

[P. Van der Linden, Expert C Programming, 1994.]

Informatique II –Cours 1 : – Introduction – – 61 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Instruction break : exemple

Exemple d’utilisation de break :une mauvaise (!) façon de simuler une boucle avec conditiond’arrêtwhile ( true ) {

Instruction 1;...if (condition_d_arret)

break ;}autres instructions;

Question : quelle est la bonne façon d’écrire le code ci-dessus ?

Informatique II –Cours 1 : – Introduction – – 62 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Instruction continue : exemple

Exemple d’utilisation de continue :

int i;...i = 0;while (i < 100 ) {

++i;if ((i % 2) == 0) continue ;// L’execution de la suite des instructions// ne se fait pour les entiers impairsInstructions;...

}

Question : quelle est une meilleure façon d’écrire le codeci-dessus ?(on suppose que Instructions; ... ne modifie pas la valeur de i )

Informatique II –Cours 1 : – Introduction – – 63 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Les structures de contrôle

les branchements conditionnels : si ... alors ...if (condition)

instructions

. . . . . . . . . . . . . . . . . . . . . . . .if (condition 1)

instructions 1...else if (condition N)

instructions Nelse

instructions N+1

switch (expression) {case valeur:

instructions;break;

...default:

instructions;}

les boucles conditionnelles : tant que ...while (condition)

Instructionsdo

Instructionswhile (condition);

les itérations : pour ... allant de ... à ...for (initialisation ; condition ; increment)

instructions

les sauts : break; et continue;

Note : instructions représente une instruction élémentaire ou un bloc.instructions; représente une suite d’instructions élémentaires.

Informatique II –Cours 1 : – Introduction – – 64 / 65

Objectifs

Présentation ducours

Notes etexamens

Présentation deC++

Rappels deprogrammationLes variables

Opérateurs etexpressions

Entrée-Sorties

Structures decontrôle

c©EPFL 2002–2012Jamila Sam

ÉC OL E POL Y T EC H N I Q U EFÉ DÉRA LE D E L A U SAN N E

Ce que j’ai appris aujourd’hui

◮ que toutes les informations utiles se trouvent sur la page webdu cours;

◮ que les concepts fondamentaux de la POO permettent deproduire des programmes plus élégants, concis, fiables etmaintenables;

◮ que la POO n’est pas spécifique à C++ mais que ce langagemet en oeuvre la plupart de ses concepts fondamentaux;

◮ que ce cours va aussi me permettre d’aborder des thèmesliés à l’algorithmique;

◮ et . . . qu’il faut bien se replonger dans le B.A-BA pourcommencer :

◮ variables et expressions, structures de contrôles (if , while ,for , break , continue ) et entrées-sorties de base.

☞ je peux dès maintenant écrire des programmes nonorientés-objet simples, en faisant attention à bien adhérerdésormais à l’« esprit » C++ (plutôt que C).

Informatique II –Cours 1 : – Introduction – – 65 / 65