Programmation I

publicité
Support MOOC
Support MOOC
Concepts
centraux
Concepts
centraux
Approfondissements
Approfondissements
Vidéos, Quiz et transparents
Programmation I :
Cours de programmation (C++)
Variables et opérateurs
https://www.coursera.org/learn/init-prog-cpp/home/week/1
Jamila Sam
+ Semaine 1
Laboratoire d’Intelligence Artificielle
Faculté I&C
c EPFL 2016-17
c EPFL 2016-17
Jamila Sam
& Jean-Cédric Chappelier
Jamila Sam
& Jean-Cédric Chappelier
Programmation I – Cours 2 : Variables et opérateurs – 1 / 25
Support MOOC
Concepts
centraux
Les instructions de l’ordinateur
Langages de
programmation
Cycle de
développement
Structure générale
d’un programme
C++
Données et
traitements
Les variables
Opérateurs et
expressions
Entrée-Sorties
Approfondissements
Programmation I – Cours 2 : Variables et opérateurs – 2 / 25
Support MOOC
Concepts
centraux
Les instructions de l’ordinateur
Langages de
programmation
Concrètement, quelles sont les instructions et les données
« adaptées » à l’ordinateur ?
Ordinateur '
microprocesseur
détermine l’ensemble des instructions élémentaires
que l’ordinateur est capable d’exécuter ;
Cycle de
développement
Structure générale
d’un programme
C++
Données et
traitements
Les variables
Opérateurs et
expressions
Entrée-Sorties
Approfondissements
Ordinateur '
microprocesseur
mémoire centrale
périphériques
mémoire centrale
détermine l’espace dans lequel des données
peuvent être stockées en cours de traitement
+ C’est donc le microprocesseur qui détermine le
« jeu d’instructions » (et le type de données) à utiliser.
périphériques
On les appelle « Instructions Machine », « Langage Machine »,
' « Assembleur »
permettent l’échange ou la sauvegarde à long terme
des données
c EPFL 2016-17
c EPFL 2016-17
Jamila Sam
& Jean-Cédric Chappelier
Jamila Sam
& Jean-Cédric Chappelier
Programmation I – Cours 2 : Variables et opérateurs – 3 / 25
Concrètement, quelles sont les instructions et les données
« adaptées » à l’ordinateur ?
On peut programmer directement le microprocesseur en langage
machine...
...mais c’est un peu fastidieux et de plus, chaque processeur
utilise ses propres instructions
Programmation I – Cours 2 : Variables et opérateurs – 3 / 25
Support MOOC
Concepts
centraux
Langages de
programmation
Cycle de
développement
Structure générale
d’un programme
C++
Données et
traitements
Les variables
Opérateurs et
expressions
Exemple d’instructions-machine
Programme en Assembleur
1: LOAD 10 5
2: CMP 10 0
3: JUMP +3
4: DECR 10
5: JUMP -3
6: END
mettre 5 dans la mémoire 10
comparer le contenu de la mémoire 10 à 0
si tel est le cas sauter 3 instructions plus loin
décrémenter la mémoire 10 (de 1)
sauter 3 instructions en arrière
Jamila Sam
& Jean-Cédric Chappelier
Cycle de
développement
Structure générale
d’un programme
C++
Données et
traitements
Opérateurs et
expressions
Instructions machine :
Code Machine
00000000
00000001
00000010
00000011
00000100
Approfondissements
données
-3
0
2
3
5
6
10
Code Machine
10000011
00000000
00000010
00000011
00000101
00000110
00001010
Le programme ci-dessus correspond donc physiquement en
machine à la séquence :
0000010000001010000001010000000000001010000000000000001100000011
0000000100001010000000111000001100000010
Concepts
centraux
La notion de langage de programmation (2)
1 N=5
2 IF (N>0) THEN PRINT N;
N=N-1; GOTO 2
3 END
Programmation I – Cours 2 : Variables et opérateurs – 5 / 25
Support MOOC
Concepts
centraux
Cycle de
développement
Structure générale
d’un programme
C++
Structure générale
d’un programme
C++
Opérateurs et
expressions
Entrée-Sorties
Approfondissements
+ traduire les séquences d’instructions de haut niveau en
instructions-machine directement exécutables par le
microprocesseur
Données et
traitements
Les variables
Opérateurs et
expressions
Entrée-Sorties
Approfondissements
Selon ses caractéristiques, un tel traducteur est appelé
compilateur ou interpréteur
La notion de langage de programmation (3)
Un langage de programmation est donc un moyen formel
permettant de décrire des traitements (i.e. des tâches à réaliser)
sous la forme de programmes (i.e. de séquences d’instructions et
de données de « haut niveau », compréhensibles par le
programmeur) pour lesquels un compilateur ou un interpréteur
est disponible pour permettre l’exécution effective par un
ordinateur.
Exemples de langages de programmation : C, python, Lisp, Java...
et C++
L’ensemble des instructions de plus haut niveau qu’un compilateur
ou un interpréteur est capable de traiter constitue un langage de
programmation.
c EPFL 2016-17
c EPFL 2016-17
Jamila Sam
& Jean-Cédric Chappelier
Jamila Sam
& Jean-Cédric Chappelier
Programmation I – Cours 2 : Variables et opérateurs – 6 / 25
main() {
int n;
for (n=5; n>0; --n)
printf("%d\n", n);
}
Jamila Sam
& Jean-Cédric Chappelier
Langages de
programmation
Les variables
C
c EPFL 2016-17
Cycle de
développement
Comment rendre les instructions plus sophistiquées
compréhensibles par l’ordinateur ?
. . . il faut donc fournir au programmeur la possibilité d’utiliser des
instructions de plus haut niveau, plus proches de notre manière
de penser et de conceptualiser les problèmes . . .
« vieux » BASIC
Langages de
programmation
Données et
traitements
Cependant, ces instructions-machine sont trop élémentaires
pour pouvoir être efficacement utilisées (par les humains) pour
l’écriture de programmes...
Exemples de langage de programmation de haut niveau :
Programmation I – Cours 2 : Variables et opérateurs – 4 / 25
Support MOOC
La notion de langage de programmation
Les variables
Entrée-Sorties
Instructions
CMP
DECR
END
JUMP
LOAD
c EPFL 2016-17
Concepts
centraux
Langages de
programmation
Entrée-Sorties
Approfondissements
Support MOOC
Programmation I – Cours 2 : Variables et opérateurs – 7 / 25
Support MOOC
Concepts
centraux
Interpréteur/Compilateur
Support MOOC
Concepts
centraux
Langages de
programmation
Langages de
programmation
Cycle de
développement
Cycle de
développement
Structure générale
d’un programme
C++
Données et
traitements
Comment rendre les instructions plus sophistiquées
compréhensibles par l’ordinateur ?
Les variables
Opérateurs et
expressions
Entrée-Sorties
Approfondissements
Structure générale
d’un programme
C++
Données et
traitements
Interpréteur/Compilateur (2)
I
Le compilateur traduit un programme, écrit dans un langage
de haut niveau, en un fichier binaire (exécutable) spécifique à
une architecture matérielle (ARM, x86, amd64, ...). Chaque
plateforme a son format de fichiers binaires (ELF, COFF, ...)
I
L’interpréteur exécute un programme, écrit dans un langage
de haut niveau, sans étape intermédiaire. Un programme
interprété de manière naïve est plus lent qu’un programme
compilé, mais indépendant de l’architecture.
Les variables
+ traduire les séquences d’instructions de haut niveau en
instructions-machine directement exécutables par le
microprocesseur
Opérateurs et
expressions
Entrée-Sorties
Approfondissements
Selon ses caractéristiques, un tel traducteur est appelé
compilateur ou interpréteur.
L’ensemble des instructions de plus haut niveau qu’un compilateur
ou un interpréteur est capable de traiter constitue un langage de
programmation.
+ C++ est un langage compilé
c EPFL 2016-17
c EPFL 2016-17
Jamila Sam
& Jean-Cédric Chappelier
Jamila Sam
& Jean-Cédric Chappelier
Programmation I – Cours 2 : Variables et opérateurs – 8 / 25
Support MOOC
Concepts
centraux
Le langage C++ (1)
Programmation I – Cours 2 : Variables et opérateurs – 9 / 25
Support MOOC
Concepts
centraux
Langages de
programmation
Langages de
programmation
Cycle de
développement
Cycle de
développement
Structure générale
d’un programme
C++
Structure générale
d’un programme
C++
Données et
traitements
Données et
traitements
Les variables
Les variables
Opérateurs et
expressions
Opérateurs et
expressions
Entrée-Sorties
Approfondissements
Entrée-Sorties
Le langage C++ (2)
Plus précisément, le langage C++ est un langage orienté-objet
compilé fortement typé :
C++ = C + typage fort + objets
Parmi les avantages de C++, on peut citer :
I
Extension objet du langage C
I
Développé initialement par Bjarn Stroustrup (1983-1985)
I
Un des langages objets les plus utilisés
I
Normalisé ISO en 1998, 2002 et 2011
I
Un langage compilé, ce qui permet la réalisation
d’applications efficaces (disponibilité d’excellents
compilateurs open-source (GNU))
I
Un typage fort, ce qui permet au compilateur d’effectuer de
nombreuses vérifications lors de la compilation ⇒ moins de
« bugs »...
I
Un langage disponible sur pratiquement toutes les
plate-formes;
I
Similarité syntaxique et facilité d’interfaçage avec le C
Approfondissements
Le C date de 1969-1973.
c EPFL 2016-17
c EPFL 2016-17
Jamila Sam
& Jean-Cédric Chappelier
Jamila Sam
& Jean-Cédric Chappelier
Programmation I – Cours 2 : Variables et opérateurs – 10 / 25
Programmation I – Cours 2 : Variables et opérateurs – 11 / 25
Support MOOC
Concepts
centraux
Le langage C++ (3)
Support MOOC
Concepts
centraux
Langages de
programmation
Langages de
programmation
Cycle de
développement
Cycle de
développement
Structure générale
d’un programme
C++
Structure générale
d’un programme
C++
Données et
traitements
. . . et les inconvénients :
Les variables
Opérateurs et
expressions
Opérateurs et
expressions
Entrée-Sorties
I
Similarité syntaxique avec le C !
I
Pas nécessairement de gestion automatique de la mémoire
I
Pas de protection de la mémoire
I
Syntaxe parfois lourde et peu intuitive (“pousse-au-crime”)
I
Gestion facultative des exceptions
I
Effets parfois indésirables et peu intuitifs dus à la production
automatique de code
Programmation I – Cours 2 : Variables et opérateurs – 12 / 25
Cycle de
développement
Structure générale
d’un programme
C++
Données et
traitements
Les variables
Opérateurs et
expressions
Entrée-Sorties
Approfondissements
hello.cc
cout <<
}
Jamila Sam
& Jean-Cédric Chappelier
Langages de
programmation
commande : g++ hello.cc -o hello
hello
main() {
c EPFL 2016-17
Cycle de développement (2)
fichier exécutable
#include <iostream>
using namespace std;
Jamila Sam
& Jean-Cédric Chappelier
Concepts
centraux
fichier source
Entrée-Sorties
Approfondissements
c EPFL 2016-17
Support MOOC
compilation
Données et
traitements
Les variables
Approfondissements
Cycle de développement (1)
"Hello World!" << endl;
010100001010101
001010101001110
101111001010001
...
Programmation I – Cours 2 : Variables et opérateurs – 13 / 25
Support MOOC
Concepts
centraux
Structure générale d’un programme C++
Langages de
programmation
Cycle de
développement
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++)
Structure générale
d’un programme
C++
Données et
traitements
Les variables
La structure très générale d’un programme C++ est la suivante :
#include <des_librairies_utiles>
...
Opérateurs et
expressions
Entrée-Sorties
using namespace std; // on y reviendra
Approfondissements
(déclaration d’objets globaux)
à exécution du programme
déclarations de fonctions utiles
[à éviter]
[recommandé]
En pratique :
I
erreurs de compilation (mal écrit)
I
erreurs d’exécution (mal pensé)
=⇒ correction(s)
int main() //ou int main(int argc, char **argv)
{
corps du
programme principal
[si possible assez court]
}
+ d’où le(s) cycle(s) !
c EPFL 2016-17
c EPFL 2016-17
Jamila Sam
& Jean-Cédric Chappelier
Jamila Sam
& Jean-Cédric Chappelier
Programmation I – Cours 2 : Variables et opérateurs – 14 / 25
Programmation I – Cours 2 : Variables et opérateurs – 15 / 25
Support MOOC
Concepts
centraux
Langages de
programmation
Cycle de
développement
Structure générale
d’un programme
C++
Données et
traitements
Les variables
Opérateurs et
expressions
Entrée-Sorties
Approfondissements
Exemple de programme en C++
Résolution d’une équation du second degré : x 2 + b x + c = 0
#include <iostream>
#include <cmath>
using namespace std;
main() {
double b(0.0);
double c(0.0);
double delta(0.0);
Support MOOC
Concepts
centraux
Données et traitements
Langages de
programmation
Cycle de
développement
Structure générale
d’un programme
C++
Un programme C++ est donc à la base un ensemble de
traitements s’effectuant sur des données.
Données et
traitements
données
traitements
structures de contrôle
Les variables
Algorithme
Traitements
Opérateurs et
expressions
Entrée-Sorties
structures de données
Données
Variables
Approfondissements
Expressions & Opérateurs
Structures de contrôle
Fonctions
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;
}
Portée
Chaînes de caractères
Tableaux statiques
Tableaux dynamiques
Structures
Pointeurs
Entrées/Sorties
}
c EPFL 2016-17
c EPFL 2016-17
Jamila Sam
& Jean-Cédric Chappelier
Jamila Sam
& Jean-Cédric Chappelier
Programmation I – Cours 2 : Variables et opérateurs – 16 / 25
Support MOOC
Concepts
centraux
Langages de
programmation
Cycle de
développement
Structure générale
d’un programme
C++
Données et
traitements
Les variables
Opérateurs et
expressions
Entrée-Sorties
Approfondissements
Variables
Programmation I – Cours 2 : Variables et opérateurs – 17 / 25
Support MOOC
auto
Concepts
centraux
En C++, une valeur à conserver est stockée dans une variable
caractérisée par :
I son type
I et son identificateur ;
(définis lors de la déclaration)
La valeur peut être définie une première fois lors de
l’initialisation, puis éventuellement modifiée par la suite.
Rappels de syntaxe :
type nom ;
type nom(valeur);
(déclaration)
(initialisation)
nom = expression ;
(affectation)
Langages de
programmation
Cycle de
développement
Structure générale
d’un programme
C++
Données et
traitements
Les variables
Opérateurs et
expressions
Entrée-Sorties
Approfondissements
Types élémentaires :
int
double
char
bool
En
, on peut laisser le compilateur deviner le type d’une
variable grace au mot-clé auto.
Le type de la variable est déduit du contexte. Il faut donc qu’il y ait
un 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 types
autant que possibles.
N’utilisez auto que dans les cas « techniques », par exemple (qui
viendra plus tard dans le cours) :
for (auto p = v.begin(); p != v.end(); ++p)
Exemples :
int val(2) ;
const double z(x+2.0*y);
c EPFL 2016-17
Jamila Sam
& Jean-Cédric Chappelier
au lieu de
c EPFL 2016-17
constexpr double pi(3.141592653);
i = j + 3;
Programmation I – Cours 2 : Variables et opérateurs – 18 / 25
Jamila Sam
& Jean-Cédric Chappelier
for (vector<int>::iterator
p = v.begin(); p != v.end(); ++p)
Programmation I – Cours 2 : Variables et opérateurs – 19 / 25
Opérateurs
Support MOOC
Concepts
centraux
Langages de
programmation
Cycle de
développement
Structure générale
d’un programme
C++
Données et
traitements
Les variables
Opérateurs et
expressions
Entrée-Sorties
Approfondissements
Operateurs arithmétiques
multiplication
*
/
division
%
modulo
+
addition
soustraction
++ incrément
(1 opérande)
-- décrément (1 opérande)
&&
||
∧
!
c EPFL 2016-17
Jamila Sam
& Jean-Cédric Chappelier
Support MOOC
Concepts
centraux
Operateurs de comparaison
== teste l’égalité logique
!= non égalité
<
inférieur
>
supérieur
<= inférieur ou égal
>= supérieur ou égal
Langages de
programmation
Cycle de
développement
Structure générale
d’un programme
C++
Données et
traitements
En C++ les entrées-sorties se font par le biais de flots (streams) :
I
Flot = objet dans lequel on peut lire (entrée) ou écrire(sortie)
des données
I
cout est le symbole associé au flot de sortie standard
(terminal)
I
cin est le symbole associé au flot d’entrée standard (clavier)
I
la lecture dans un flot se fait au moyen de l’opérateur >>
I
l’écriture dans un flot se fait au moyen de l’opérateur <<
I
Pour utiliser cout et cin, il faut inclure la librairie iostream
Les variables
Opérateurs et
expressions
Entrée-Sorties
Approfondissements
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 groupe
sont de priorité égale) :
! ++ --, * / %, + -, < <= > >=, == !=, ∧ &&, ||
Entrée-Sorties de base
Nous reviendrons plus en détails sur les entrées-sorties dans la
suite du cours.
c EPFL 2016-17
Jamila Sam
& Jean-Cédric Chappelier
Programmation I – Cours 2 : Variables et opérateurs – 20 / 25
Support MOOC
Concepts
centraux
Entrée-Sorties de base : lecture
Langages de
programmation
Cycle de
développement
Structure générale
d’un programme
C++
Données et
traitements
Les variables
Opérateurs et
expressions
Programmation I – Cours 2 : Variables et opérateurs – 21 / 25
Support MOOC
Concepts
centraux
Entrée-Sorties de base : écriture
Langages de
programmation
Cycle de
développement
#include<iostream>
using namespace std;
int main()
{
int x;
double y;
Structure générale
d’un programme
C++
Données et
traitements
Les variables
Opérateurs et
expressions
Entrée-Sorties
Entrée-Sorties
Approfondissements
Approfondissements
// Lecture:
cin >> x >> y;
return 0;
#include<iostream>
using namespace std;
int main()
{
// Ecriture:
cout << "un entier :" << n << "un double :";
cout << (12.5 + 3.0) << endl;
return 0;
}
}
I
I
c EPFL 2016-17
l’opérateur >> lit des valeurs dans un flot d’entrée et les
affecte (dans l’ordre de lecture) aux variables se trouvant sur
sa droite.
les différentes valeurs à lire seront séparées par un espace
ou un retour à la ligne.
Jamila Sam
& Jean-Cédric Chappelier
I
l’opérateur << prend un flot de sortie à gauche, un type
quelconque à droite. Il réalise l’écriture sur le support associé
au flot et retourne le flot.
I
endl provoque un saut de ligne.
c EPFL 2016-17
Jamila Sam
& Jean-Cédric Chappelier
Programmation I – Cours 2 : Variables et opérateurs – 22 / 25
Programmation I – Cours 2 : Variables et opérateurs – 23 / 25
Support MOOC
Concepts
centraux
Approfondissements
Support MOOC
Concepts
centraux
Approfondissements
Pour préparer le prochain cours
Approfondissements
I
I
transtypage . . . ou comment disserter sur un calcul de
moyenne
I
x++ vs ++x
Vidéos et quiz du MOOC semaine 2 :
I
I
I
I
Le prochain cours :
I
c EPFL 2016-17
c EPFL 2016-17
Jamila Sam
& Jean-Cédric Chappelier
Jamila Sam
& Jean-Cédric Chappelier
Programmation I – Cours 2 : Variables et opérateurs – 24 / 25
Branchements conditionnels [13:46]
Conditions [13:14]
Erreurs de débutant le type bool [14:34]
de 15h15 à 16h (résumé et quelques approfondissements)
Programmation I – Cours 2 : Variables et opérateurs – 25 / 25
Téléchargement