Upload
vukiet
View
220
Download
0
Embed Size (px)
Citation preview
8/16/2012
1
2012Stéphane GOBRON
Entretien EPFL – 9 août 2012
@To
rre de Bab
el ‐qu
adro antigo
ASM0100100100111101
Fortran
Cobol C
Lisp
C#Java
C++
1
Introduction à la programmation
Quatre parties
GénéralitésCe qui structure ce cours
Chapitre 1Les concepts qui orientent ce cours
Chapitre 2Comprendre les étapes pour communiquer avec une machine
Chapitre 3Les briques de base qui permettent de programmer
Ce cours• Vue d’ensemble de la programmation• Connaître les concepts fondamentaux• Comprendre un vocabulaire de base
Généralités
15%
Ch.1 Concepts
20%Ch2.
Communi‐cation
30%Ch3. Vocabulaire
35%
Généralités
Qui et quoi? Comment? Evaluation des acquis Travail d’équipe Se connaître Définir un profil
Contes à la ca
rte, © Editio
n Thierry M
agnier, 2
011
Le travail de la pensée ressemble au forage d'un puits; l'eau est trouble d'abord, puis elle se clarifie. Proverbe chinois
3
Généralités
Qui et Quoi?
Partie prof Survol de tous les
aspects C++ en profondeur Ludique
Partie étudiants Travail conséquentindividuelet en équipe
8/16/2012
2
Généralités
Comment?
L’introduction à la programmation
Interaction 1 :Choix multiples
Interaction 2 :Questions
Gros plans/ points dedétailimportants
Code exemple
Références
ProblèmesExercices dirigés
Pour leprochain cours
Généralités
Evaluation des acquis
6 quizzes 30%
Projet(s) 20%
Mi‐semestre 20%
Examen final 30%
Critères d’évaluation :
Connaissance des concepts
Réaliser un codeCode propre
Programme prévisionnel
Examen final
Examen de mi‐
semestre
Quizz#1Quizz#2 Quizz#3 Quizz#4 Quizz#5
Quizz#6
Projet(s) d’équipe
>=95% 5.75~6.00 6 A85~94% 5.25~5.74 5.5 B75~84% 4.75~5.24 5 C65~74% 4.25~4.74 4.5 D55~64% 3.75~4.24 4 E45~54% 3.25~3.74 3.5 Fx35~44% 2.75~3.24 3 F25~34% 2.25~2.74 2.5 F15~24% 1.75~2.24 2 F05~14% 1.25~1.74 1.5 F00~05% 0.00~0.24 1 Fabsent absent 0 F
Généralités
Travail d’équipe
L’informatique : un univers très vaste
«Des» mondes
Seul, quel que soit notre niveau, on peut s’y perdre
Apprendre à se connaître
?
Collaboration etvalorisation des compétences
Partage etremise en question des acquis
Généralités
Se connaître
1 1 1
2 2 23 34 4
556
3456 6
B.A. C. Déterminer votre profil
A. Prise d’initiativeB. Intérêt pour les énigmesC. Qualités relationnelles
/!\ A,B et C abstraits Sans référentiel :
exercice difficile, voire impossible
Pour vous aider : proposition de méthode, de procédure
8/16/2012
3
Généralités
Définir un profil
1 1 12 2 23 34 4
556
3456 6B.A. C.
1 1 12 2 23 34 4
556
3456 6B.A. C.
1 1 12 2 23 34 4
556
3456 6B.A. C.
1 1 12 2 23 34 4
556
3456 6B.A. C.
1 1 12 2 23 34 4
556
3456 6B.A. C.
1 1 12 2 23 34 4
556
3456 6B.A. C.
1 1 12 2 23 34 4
556
3456 6B.A. C.
1 1 12 2 233 34 4
556
3456 6B.A. C.
1 1 122 2 23 34 4
556
3456 6B.A. C.
1 1 12 2 23 34 4
556
34556 6B.A. C.
1 1 12 2 23 34 4
556
3456 6B.A. C.
4. Etat final
1. Définitionet initialisation
2. Changementd’état
3.1 Réflexion 1
3.2 Réflexion 2 3.3 Réflexion 3
Déterminer votre profil
A. Prise d’initiativeB. Intérêt pour les énigmesC. Qualités relationnelles
Procédure1. Partez de la valeur « 3 » pour chaque critère
2.Sans comparer ajoutez « 1 » au critère que vous aimez le plus
3. Comparez les 2 à 2, le meilleur gagne 1 point, l’autre perd 1 point
4.La somme finale est 10
Chapitre 1.Concepts fondamentaux
Transparence Développement logiciel et codage Des ordinateurs et des hommes Grain de temps Notion d’algorithme Notion de programmation Premiers formalismes
L’essentiel est invisible avec les yeux, Antoine de Saint‐Exupéry
Contes à la ca
rte, © Editio
n Thierry M
agnier, 2
011
10
Concepts fondamentaux
Transparence
Il est difficile, même pour un informaticien expérimenté, d’évaluer le travail nécessaire au développement d’une application informatique
Le petit prince, A
.deS
t‐Ex
upéry
L’essentiel est invisible avec les yeux, Antoine de Saint‐Exupéry
©MS Office Ex
cel 201
3
Exem
ples jeux vidéo 201
3
Concepts fondamentaux
Transparence
Métaphore :Si votre tâche était de faire un mouton ?
Mouton du 21ème siècle
Mouton du 20ème siècle
8/16/2012
4
Concepts fondamentaux
Développement logiciel et codage
«Programmation» «codage»
Codage : petite partie du développement logiciel
Programmation et codage: dans les deux casFaire comprendre à un ordinateur ce qu’il doit faire
ProgrammationDéf. : Ensemble des activités qui permettent l’écriture des programmes informatiques
CodageDéf. : Rédaction du code source d’un logiciel
Développement logiciel
Programmation / Codage
Concepts fondamentaux
Des ordinateurs et des hommes
«Intelligence» d’un ordinateur?
Ordinateur : amas de commutateurs électroniques
Commutateurs sous tension ou non
Transfert vers le monde numérique
MIPS: millions d’instructions par seconde
« Ces machines n'ont pas de bon sens, elles font exactement ce qu'on leur dit, ni plus ni moins.
Ce fait est la notion la plus difficile à saisir quand on fait ses premiers pas avec un ordinateur »
Donald E. KnuthProf Stanford, US, un des pionniers de l'algorithmique D
onald E. Knu
th, T
he Art of C
ompu
ter
Prog
ramming, Add
ison W
esley 19
97,
volume 1, p. v
http://www.frc.ri.cm
u.ed
u/~h
pm/talks/rev
o.slides/pow
er.aug
.curve
/pow
er.aug
.htm
l
La puissance de calcul d’un ordinateur ne le rend pas intelligent
Concepts fondamentaux
Grain de temps
Notion d’horloge
Simule une évolution dans le temps d'un phénomène
Temps discretGrain de tempsChaque
instruction «coûte» du temps
Savoir trouver un compromis entre qualité, quantité, et difficulté algorithmique
Concepts fondamentaux
Algorithme
Déf. : procédé de calcul, suite finie et non‐ambigüe d’opérations ou d'instructions per‐mettant de résoudre un problème
«Algorithme» du nom du savant persan
Al‐Khuwarizmi
1ère calculatrice mécanique
http://interstic
es.in
fo/jc
ms/i_60
056/un
e‐revo
lutio
n‐pe
rman
ente
Blaise Pascal (1623‐1662)
La Pascaline, 1ère calculatrice mécanique (1642)
Al Khuwarizmi(783‐850)
Exemple de représentation d’un algorithme
Machine permettant de résoudre un problème mais qui
ne peut en changer
8/16/2012
5
Programmation
Les 1ers programmes? Siècle des Lumières 18ème , début 19ème
Bouchon et Falcon vers 1730, améliorent l’idée de Marine de Gennes env. 1690 : automatiser les métier à tisser
Jacquard : 1èremachine programmable industrialisée massivement
http://www.cha
teau‐bou
theo
n.co
m/‐
Metiers‐a‐tisser‐Jacq
uard‐.h
tml
JM Jacquard(1752‐1834)
Métier à tisser de Jacquard (1801)
* Étud
es sur le ré
gime de
s man
ufac
tures
Louis R
eyba
ud
Concepts fondamentaux
Cartes perforées Univers de 0 et 1
Concepts fondamentaux
Premier formalisme
Univers de 0 et 1
G. Boole conjonction calcul
numérique / décision logique
1ère approche formelle
la base de l’informatique
A. Turing Formalisation du
concept d’algorithme et de calcul numérique
George Boole (1815‐1865)
http://en
.wikiped
ia.org/w
iki/B
oolean
_algeb
ra_%
28logic%
29
Alan Turing (1912‐1954)
Machine de Turing
«On Co
mpu
table Num
bers, w
ith an
App
lication to th
e En
tscheidu
ngsproblem
» (193
6)
Modèle abstrait du fonctionnement de tout appareil de calcul, donc des ordinateurs
Chapitre 2.Communication entre deux mondes
De l’idée au logiciel Pont entre deux univers Systèmes opérationnels Compilateur Langages informatiques Paradigmes Langage support
Un pont vers le monde numérique
Contes à la ca
rte, © Editio
n Thierry M
agnier, 2
011
19
Communication entre deux mondes
De l’idée au logiciel
5 étapesintermédiaires
1. Conception
2. Interface homme‐machine3. EnvironnementMachine et système opérationnel
4. Codage
L’idée
Logiciel
5. Compilation
6. Recodage?!!
Difficulté
8/16/2012
6
Communication entre deux mondes
Pont entre 2 univers
Programmer?C’est réaliser une passerelle du monde réel au monde numérique
Notion d’interfaces d’entrée et de sortie
clavier, souris, webcam, capteur
écran, imprimante système haptique
Communication entre deux mondes
Systèmes opérationnels
=> environnements
Quelques familles liées aux fabricants de machines
UNIX
Linux
Androïd
Windows
Mac OS
iOS
DebianUbuntuRedhat…
Super calculateur
PC
Mobile
AppleApple
Compilateur
Communication entre deux mondes
Compilateur
Trouver un terrain d’entente
Utilisation de langages de «haut» niveau
Le compilateur convertit en langage machine
Création de l’exécutable
Programme source
Analyse du lexique
Analyse de la syntaxe
Analyse sémantique
Génération de code binaire
Programme exécutable
Demande Token
Nouveau Token
AST
AST modifié
Entrée «input»
Sortie «output»
Communication entre deux mondes
Langages informatiques
Pourquoi de nouveaux langages?
améliorer le ratio efficacité / effort
Langages de «haut niveau»
Langages de «bas niveau»
Form
alisme
Composants électroniques
Langage machine«0001010111010…»
Assembleur«mov ax, @data…»
Fortran, C, Pascal…« if max < min then max = min »
OO et langages «visuals»
8/16/2012
7
Communication entre deux mondes
Paradigmes
4 « Familles » de langages
4 paradigmes
Impératif ouProcédural
Fonctionnel
Logique
Orienté Objet (OO)
«Philosophies» de programmation drastiquement différentes qui influencent donc très fortement le travail de développement
Fonctionnel
Lisp…
Impératif
PascalFortran
C…
Logique
Prolog…
POO
SmalltalkC++Java…
Ici, tout est symbole
Étape par étape, comme une recette de cuisine
Interactions entre objets
Évaluation d’une formule
Cascade de recherches par des règles sur un ensemble
Communication entre deux mondes
Langage support
C++
Orienté Objet (OO)
Ajoute l’aspect OO au langage C
Couvre un large spectre de la programmation
Très puissantDonc difficile
Populaire
Applications graphiques
Développé parBjarne Stroustrup (1950~)
langage C++
Fonctionnalités OO
langage C
Méthodologies procédurales
Chapitre 3.Vocabulaire de base
Résoudre un problème? Code source, éditeur‐compilateur Fichiers de sortie Instructions Notion de phrase Notion de type Conseils d’écriture 1 Opérateurs de base Fonction de base Conseils d’écriture 2 Tampon (Buffer) d’entrée / sortie Constantes
Bâtir sur le néant
Contes à la ca
rte, © Editio
n Thierry M
agnier, 2
011
27
Vocabulaire de base
Résoudre un problème?
Programmer, c’est construire, bâtir
Utilisation de briques de plans de
construction
Réutiliser ce qui a été développé
CodesAlgorithmes Patterns
d’architectureUne montagne de
briques simples peut résoudre des problèmes
complexes
Vocabulaire de base
8/16/2012
8
EditeurCode source
Vocabulaire de base
Code source, éditeur‐compilateur
La meilleure façon d’apprendre un langage?
c’est peut‐être de tester soi‐même!
Editeur‐compilateur PC/WindowsCode::BlocksVisual Studio Eclipse
PC/Linux Code::Blocks Eclipse
MacXCode
Bla blablabla blablabla Bla blabla blablablabla Bla blablabla bla blabla Bla blablabla blablabla Bla blablabla blablabla Bla blabla blablablabla Bla blab la bla blablabla Bla blablabla blablabla Bla blablabla blablabla Bla blablabla bla blabla Bla blablabla blablabla Bla blablabla blablabla Bla blabla blablablabla Bla blab la bla blablabla
Bla blablabla blablabla Bla blabla blablablabla Bla blablabla bla blabla Bla blablabla blablabla Bla blablabla blablabla Bla blabla blablablabla Bla blab la bla blablabla Bla blablabla blablabla Bla blablabla blablabla Bla blablabla bla blabla Bla blablabla blablabla Bla blablabla blablabla Bla blabla blablablabla Bla blab la bla blablabla
Bla blablabla blablabla Bla blabla blablablabla Bla blablabla bla blabla Bla blablabla blablabla Bla blablabla blablabla Bla blabla blablablabla Bla blab la bla blablabla Bla blablabla blablabla Bla blablabla blablabla Bla blablabla bla blabla Bla blablabla blablabla Bla blablabla blablabla Bla blabla blablablabla Bla blab la bla blablabla
Bla blablabla blablabla Bla blabla blablablabla Bla blablabla bla blabla Bla blablabla blablabla Bla blablabla blablabla Bla blabla blablablabla Bla blab la bla blablabla Bla blablabla blablabla Bla blablabla blablabla Bla blablabla bla blabla Bla blablabla blablabla Bla blablabla blablabla Bla blabla blablablabla Bla blab la bla blablabla
Fichier(s) texte
Compilateur
Fichiers de sortie compilés
Analysé par…
Si accepté, génération de…
e.g. «Code::Blocks»Logiciel gratuit
EditeurEditeurCode sourceCode source
Vocabulaire de base
Fichiers de sortie
Réutilisation du fichier de sortie
Boîte à outils
E.g. fonctions mathématiques
Bla blablabla blablabla Bla blabla blablablabla Bla blablabla bla blabla Bla blablabla blablabla Bla blablabla blablabla Bla blabla blablablabla Bla blab la bla blablabla Bla blablabla blablabla Bla blablabla blablabla Bla blablabla bla blabla Bla blablabla blablabla Bla blablabla blablabla Bla blabla blablablabla Bla blab la bla blablabla
Bla blablabla blablabla Bla blabla blablablabla Bla blablabla bla blabla Bla blablabla blablabla Bla blablabla blablabla Bla blabla blablablabla Bla blab la bla blablabla Bla blablabla blablabla Bla blablabla blablabla Bla blablabla bla blabla Bla blablabla blablabla Bla blablabla blablabla Bla blabla blablablabla Bla blab la bla blablabla
Bla blablabla blablabla Bla blabla blablablabla Bla blablabla bla blabla Bla blablabla blablabla Bla blablabla blablabla Bla blabla blablablabla Bla blab la bla blablabla Bla blablabla blablabla Bla blablabla blablabla Bla blablabla bla blabla Bla blablabla blablabla Bla blablabla blablabla Bla blabla blablablabla Bla blab la bla blablabla
Bla blablabla blablabla Bla blabla blablablabla Bla blablabla bla blabla Bla blablabla blablabla Bla blablabla blablabla Bla blabla blablablabla Bla blab la bla blablabla Bla blablabla blablabla Bla blablabla blablabla Bla blablabla bla blabla Bla blablabla blablabla Bla blablabla blablabla Bla blabla blablablabla Bla blab la bla blablabla
CompilateurCompilateur
Fichiers de sortie«Librairie» ou «Exécutable»
Fichiers de sortie«Librairie» ou «Exécutable»
Le logicielBoîte à outilsréutilisable
#include < iostream >
Vocabulaire de base
Instructions
Instructions de base
Similaires aux mathématiques
FonctionsVariablesOpérateursConstantes
Mathématiques et informatique?
y = f( x )
y = a. f2( x1, x2) + b
avec f(x) = x2
avec f2= x12 +x2
Constantes
Opérateur d’affectation
Opérateurs de calcul
Définition des fonctions
fonctionOpérateur
Variables
Variables d’entrée
Variablesde sortie
Vocabulaire de base
Notion de phrase
Une phrase est une instruction
1. Finit par un « ; »
2. Les accolades ouvrantes et fermantes délimitent le code
3. Les chiffres en début de ligne ne sont ici que pour indiquer la ligne de code, ils ne font pas partie du code
1 {2 < code instruction > ;34 < code instruction > ;5 < code instruction > ;67 < code instruction > ;8910 < code instruction > ;11 < code instruction > ;12 }
1
2
3 2
8/16/2012
9
Vocabulaire de base
Notion de type
x, y et sont des valeurs réelles
Valeurs absolues et parfaites
Ordinateur limité en mémoire
Monde numérique paradigme discret
Exemple_________________________________________1 <…>2 {3 int age = 34 ;4 float masse = 76.5 ;56 <…>7 }
y = . x
Booléensbooltrue ou false
Entiersint et longE.g. 1475
Réelsfloat et doubleE.g. -45.8
Les caractèrescharE.g. ‘a’ , ‘Z’, ‘?’, ‘9’
Les motsstringE.g. "Bonjour"
1. L’initialisation n’est pas obligatoire
2. L’indentation permet de rendre le code lisible
3. Une ligne, … …une phrase
Vocabulaire de base
Conseils d’écriture 1
1 <…> 2 {3 int age ;4 float masse = 76.5 ;56 <…>7 }
2. indentation 1. initialisation 3. Une phrasepar ligne
Vocabulaire de base
Opérateurs de base
Affectation a reçoit la valeur b a = b
Addition et soustraction
a + b et a – bavec assignation :
a += b et a –= b
Multiplication et division
a * b et a / bavec assignation :
a *= b et a /= b
Exemple__________________________________1 <…>2 {3 int age1 = 0 ;4 int age2 = 17 ;5 age1 = 17 * 2 ;6 age2 *= 2 ;7 <…>8 }
http://www.commentcamarche.net/contents/cpp/cppop.php3Plus d’informations sur les opérateurs :
Vocabulaire de base
Fonction de base
La fonction de base en C++
« main » : principale
Tout commence par le main, c’est le point d’entrée
Nombreuses façons de résoudre un problème
Pas de solution parfaite
Notre but : approximation ‘‘suffisante’’
<type retour><nom fonction>( <paramètre(s) de la fonction> ){
< code de la fonction >}
Exemple 1________________________123 int main()4 { 5 double myReal = 3.14 * 5.0;6 return 0;7 }
Exemple 2______________________________________________________________________1 double calCirclePerim( double radius )2 {3 double perimeter = radius * 2.0 * 3.1415926 ;4 return perimeter ;5 }67 int main()8 { 9 double myReal = calCirclePerim( 2.5 );10 return 0;11 }
8/16/2012
10
1. Le choix des noms de variables et de fonctions
2. Respecter les types
3. ‘‘Diviser pour mieux régner’’
Vocabulaire de base
Conseils d’écriture 2
Exemple 2______________________________________________________________________1 double calCirclePerim( double radius )2 {
3 double perimeter = radius * 2.0 * 3.1415926 ;
4 return perimeter ;5 }67 int main()8 { 9 double valuePerimeter = calCirclePerim( 2.5 );10 return 0;11 }
3. Diviser en sous‐parties
2. indentation
1. Noms explicites « #include » inclut une source extérieure au code source « iostream » est une librairie orientée objet gérant les flux (stream) d’entrée (in) / sortie (out)
Buffer d’entrée et de sortie
Vocabulaire de base
1 #include <iostream>23 int main()4 { 5 int age = 0;6 int nbOfDays = 0;78 std::cout << "Quel est votre age? " ; 9 std::cin >> age ;1011 nbOfDays = 365 * age ; // approximation inférieur de l'âge en nombre de jours1213 std::cout << "Vous avez donc au moins " << nbOfDays << "jours de vie." << std::endl ;1415 return 0 ; 16 }
define : #define <caractères à chercher> < caractères de substitution> const : const <type de la constante> <nom de la constante> = <valeur constante>
Constantes
Vocabulaire de base
1 #include <iostream>23 using namespace std; 4 #define PI_v1 3.141595 const double PI_v2 = 3.1415926535897932384626433832795;67 int main()8 {9 double r = 5.0;10 double circle1, circle2;11 circle1 = 2.0 * PI_v1 * r; // circle = 2 x 3.14159 x r 12 circle2 = 2.0 * PI_v2 * r; // circle = 2 x 3.141592653589793 x r13 cout << circle1 << " " << circle2 << nline; // écrit les valeurs de «circle» dans le buffer de sortie14 return( 0 ); // retour le code erreur de valeur zéro, signifiant «tout s’est bien passé»15 }
Prochain cours :Chapitres 4 et 5Itérations et Notions de classe
Notions de boucle La boucle for La boucle while Arrêts et sorties Boucles récursives
Structure Protection et encapsulation Notion de classe Notion d’objet
Contes à la ca
rte, © Editio
n Thierry M
agnier, 2
011
40
8/16/2012
11
Former des équipes de 3, 5, ou7 personnes
Indices! Regroupez‐vous
avant tout pour réaliser une équipe homogène
Trois critères‐ Proximité‐ Affinités‐ Complémentarité
Assignment
Choix des équipes
http://ocw.mit.edu/ http://en.wikipedia.org/ http://www.cplusplus.com/
Livres de référence recommandés : Walter Savitch, Problem Solving with C++, 7th Edition, Addison
Wesley Publishing Company, Inc., 2009 Bjarne Stroustrup, The C++ Programming Language (Special Edition),
Addison Wesley Publishing Company Inc., 3rd Edition, 2000
42