Petit Résumé Pour IFT1166: C Java C++ C++
Petit Résumé Pour IFT1166: C Java C++ C++
Petit Résumé Pour IFT1166: C Java C++ C++
1
Quelques mots sur la POO :
La programmation orientée objet est un ensemble de nouveaux
concepts de programmation dont l'objectif commun est de
développer des "modules" réutilisables.
Programmation traditionnelle :
Algorithmes + Structures de données = Programmes
2
Encapsulation:
3
Entrées/Sorties en C++
Les entrées et sorties sont gérées dans C++ à travers des
objets particuliers appelés streams ou bien flots.
Écriture en C :
#include <stdio.h>
void main()
{
printf("bonjour");
}
Écriture en C++ :
#include <iostream.h> // indispensable pour utiliser cout
void main()
{
cout << "bonjour"; // équivalent à printf("bonjour"); du langage C
}
Lecture en C :
#include <stdio.h>
void main()
{
float valeur1, valeur2, valeur3;
4
Lecture en C++ :
#include <iostream.h>
void main ()
{
float valeur1, valeur2, valeur3;
Exemple 1:
/* Fichier cincout1.cpp
Premier exemple entrée/sortie avec cin et cout
Fichier d'inclusion :
iostream.h => input/output stream header file
(fichier d'en-tête des flots d'entrée et de sortie
avec cin, cout de C++)
*/
#include <iostream.h>
void main()
{
float taille1, taille2;
5
/* Exécution :
Entrez les deux tailles 1.75 1.62
La taille la plus grande parmi 1.75 et 1.62 est : 1.75 metre
*/
Exemple 2:
#include <iostream.h>
void main()
{ int age ;
double taille, poids ;
char sexe ;
cout << "age : " << age << " an(s) " << endl ;
cout << "taille : " << taille << " metre\n" ;
cout << "taille ajoutee 0.3 cm : " << taille + 0.03 << " metre\n" ;
cout << "poids : " << poids << " kgs" << endl ;
}
/* Exécution:
Entrez f ou m suivi de l'age f 23
Entrez la taille et le poids 1.72 65.4
sexe : feminin
age : 23 an(s)
taille : 1.72 metre
taille ajoutee 0.3 cm : 1.75 metre
poids : 65.4 kgs
*/
Formatage de la sortie:
6
1. Variables numériques
Instructions Affichage
cout.setf(ios::fixed);
cout << 3.14; 3.14
cout << setw(4) << setprecision(1) << 3.14159; 3.1
cout << setw(2) << setprecision(6) << 3.14159; 3.14159
cout.setf(ios::showpoint);
cout << 7.0; 7.00000
7
2. Variables de type chaîne de caractères :
3. Autres manipulateurs :
cout << "merci" << endl; équivalente à cout << "merci" << "\n";
L'affichage sera :
****12
Exemple 3 :
#include <iostream.h>
#include <iomanip.h> /* pour format d'affichage */
void main()
{
int nbPieds = 5, nbPouces = 7 ;
float taille = (nbPieds + nbPouces / 12.0) * FACTEUR;
int nbCol, nbDec ;
cout << "Format d'un entier (ici nbPieds) : " << endl ;
for ( nbCol = 1 ; nbCol <= 10 ; nbCol++)
cout << setw(nbCol) << nbPieds << endl ;
8
/* afficher la partie décimale en mode point flottant fixe */
cout.setf(ios :: fixed);
cout << "Format d'un reel (ici taille) : " << endl ;
for ( nbDec = 1 ; nbDec <= 5 ; nbDec++)
cout << setw(10) << setprecision(nbDec) << taille << endl ;
/* Exécution:
La taille :
- en metre : 1.7018
- en systeme imperial : 5 pied(s) et 7 pouce(s)
Format d'un entier (ici nbPieds) :
5
5
5
5
5
5
5
5
5
5
Format d'un reel (ici taille) :
1.7
1.70
1.702
1.7018
1.70180
*/
9
Pointeurs et références
Adresses:
#include <iostream.h>
void main() {
int nbCafe = 3, nbPieds = 5 ;
10
cout << "\n\n";
cout << "nbPieds vaut : " << nbPieds << endl;
cout << "sizeof(nbPieds) = " << sizeof(nbPieds) << " octets\n";
cout << "&nbPieds = " << ((unsigned int) &nbPieds) << endl;
cout << "\n\n";
/* Exécution:
nbPieds vaut : 5
sizeof(int ) = 4 octets
&nbPieds = 1244964
Schéma d'explication :
╔═══════════════╗
nbPieds ║ ║ 1244964 (adresse du début de nbPieds)
╔══ ══╗
║ ║ 1244965
╔══ 5 ══╗
║ ║ 1244966
╔══ ══╗
║ ║ 1244967
╔═══════════════╗
nbCafe ║ ║ 1244968 (adresse du début de nbCafe)
╔══ ══╗
║ ║ 1244969
╔══ 3 ══╗
║ ║ 1244970
╔══ ══╗
║ ║ 1244971
╔═══════════════╗
11
On voit aussi l'opérateur "*" dont :
Pointeurs:
La valeur d'une variable de type réel est un réel: float poids = 62.0 ;
#include <iostream.h>
void main() {
cout << "p vaut : " << p << " qui est : "
<< ((unsigned int) p) << " (adresse de poids)" << endl;
*p = 123.456 ;
cout << "Et maintenant : *p vaut " << *p << endl;
cout << "poids est change aussi : poids vaut " << poids << endl;
12
/* Exécution :
Demonstration sur les pointeurs :
taille : 1.72
sizeof(taille) = 8 octets
&taille = 1245048
*/
Schéma d'illustration:
╔═══════╗ ╔═══════════╗
║ 56.7 ║ ║ 1245040 ║
╚═══════╝ ╚═══════════╝
poids p
1. p est un pointeur (il pointe vers poids qui est de type double) :
╔═══════╗
p----------> ║ 56.7 ║
╚═══════╝
poids
Référence:
13
Utilité : En général, pour éviter d’avoir affaire aux
pointeurs. En particulier, lors des passages de paramètres
(des classes, des structures), afin d’éliminer la surcharge
causée par la copie de grandes quantités de données.
/* Fichier Reference.cpp
exemple simple pour comprendre la référence
*/
#include <iostream.h>
#include <iomanip.h>
void main() {
int age = 23 ;
int & z = age ; // z est une référence de age (un alias de age)
int nbCafe = 4 ;
cout << " nbCafe : " << setw(12) << &nbCafe<< setw(15) <<
(unsigned int) &nbCafe << " (en entier) " << endl;
cout << "\nage = " << age << " et z = " << z << endl << endl;
cout << "Conclusion : z et age ont meme adresse en memoire => meme
valeur\n\n";
z = 99 ;
cout << "\nEt maintenant, age = " << age << " et z = " << z <<
endl << endl;
/* Exécution :
Les adresses de :
age : 0x0012FF7C 1245052 (en entier)
z : 0x0012FF7C 1245052 (en entier)
(en entier : meme location que age)
14
nbCafe : 0x0012FF74 1245044 (en entier)
age = 23 et z = 23
Et maintenant, age = 99 et z = 99
*/
Passage de paramètres:
Exemple :
Solution :
if ( n % i == 0 ) k++ ;
cout << "Le nombre de diviseurs de "<< n << "est" << k << endl;
}
Appels :
compter(720);
compter(984);
15
Cas 2 : (par pointeur)
L'en-tête :
Exemple de simulation :
#include <iostream.h>
*p1 = (a+b+c) / 3 ;
if (a > b )
*p2 = a ;
else
*p2 = b ;
if (c > *p2)
*p2 = c ;
}
void main() {
float val1, val2 ;
/* Exécution :
val1 = 1.76 et val2 = 1.80
*/
16
Avec l’appel : calculer(1.72, 1.80, 1.76, &val1, &val2);
et l’en-tête :
On a :
a b c p1 p2
1.72 1.80 1.76
val1 val2
Dans calculer :
*p1 = (a+b+c) / 3 ;
déposer (a+b+c) / 3 qui est 1.76 à la variable pointée par p1 => val1
vaut 1.76
On a :
a b c p1 p2
1.72 1.80 1.76
1.76
val1 val2
Avec :
if (c > *p2)
*p2 = c ;
on a 1.76 > 1.80 ?
la réponse est fausse, on n’exécute pas *p2 = c.
Exemple 2 :
/* Fichier : Pointeur1.cpp
Transmission par pointeur :
Voir aussi : Reference1.cpp pour la version
avec la transmission par référence
*/
17
#include <iostream.h>
#include <iomanip.h>
*ptrMin = min;
*ptrMax = max ;
*ptrMoy = somme / n ;
}
void main() {
int age1 = 23, age2 = 41 ;
cout << "Avant l'echange : " << " age1 = " << setw(3) << age1 << "
ans\n";
cout << "Avant l'echange : " << " age2 = " << setw(3) << age2 << "
ans\n\n";
echanger(&age1, &age2);
cout << "Apres l'echange : " << " age1 = " << setw(3) << age1 << "
ans\n";
cout << "Apres l'echange : " << " age2 = " << setw(3) << age2 << "
ans\n\n";
18
cout << " - le plus leger : " << poidsMin << " kgs\n";
cout << " - le plus lourd : " << poidsMax << " kgs\n";
cout << " - moyen : " << poidsMoy << " kgs\n";
/* Exécution :
Avant l'echange : age1 = 23 ans
Avant l'echange : age2 = 41 ans
Le poids :
- le plus leger : 35.8 kgs
- le plus lourd : 100.7 kgs
- moyen : 66.0833 kgs
La taille :
. la plus petite 1.65 metre
. la plus grande 1.85 metre
. moyenne 1.75 metre
*/
Exemple 3 :
/* Fichier pointeur2.cpp
Exercices :
19
On affiche ces deux valeurs (dont la borne est 1.75 mètre)
*/
#include <iostream.h>
void determiner (double t[], int nbElem, double * pMax, double *pMin)
{ double minimum = 100.0 , maximum = 0.0 ;
int i ;
*pMax = maximum ;
*pMin = minimum ;
}
20
void demoParametrePointeur() {
afficher1(taille, nbPers);
cout << "Transmission des parametres via les pointeurs :\n";
afficher2(taille, nbPers);
afficher3(taille, nbPers);
void main()
{
demoParametrePointeur();
}
/* Exécution:
Liste un des tailles :
0) 1.72
1) 1.65
2) 1.58
3) 1.8
4) 1.62
5) 1.84
21
Liste trois des tailles :
0) 1.72
1) 1.65
2) 1.58
3) 1.8
4) 1.62
5) 1.84
L'en-tête :
Exemple 1 :
/* Fichier : Référence1.cpp
Transmission par référence :
Voir aussi : Pointeur1.cpp pour la version
avec la transmission par pointeur
*/
#include <iostream.h>
#include <iomanip.h>
22
p2 = tempo ;
}
void calculer(double t[], int n, double & min, double & max,
double & moy)
{ min = max = somme = t[0];
for (int i = 1 ; i < n ; i++)
{ if ( t[i] < min) min = t[i];
if ( t[i] > max) max = t[i];
somme += t[i];
}
moy= somme / n ;
}
void main() {
int age1 = 23, age2 = 41 ;
cout << "Avant l'echange : " << " age1 = " << setw(3) << age1 << "
ans\n";
cout << "Avant l'echange : " << " age2 = " << setw(3) << age2 << "
ans\n\n";
echanger(age1, age2);
cout << "Apres l'echange : " << " age1 = " << setw(3) << age1 << "
ans\n";
cout << "Apres l'echange : " << " age2 = " << setw(3) << age2 << "
ans\n\n";
23
afficher(" . la plus grande", tailleMax, " metre ");
afficher(" . moyenne ", tailleMoy, " metre ");
/* Exécution :
Avant l'echange : age1 = 23 ans
Avant l'echange : age2 = 41 ans
Le poids :
- le plus leger : 35.8 kgs
- le plus lourd : 100.7 kgs
- moyen : 66.0833 kgs
La taille :
. la plus petite 1.65 metre
. la plus grande 1.85 metre
. moyenne 1.75 metre
*/
Exemple 2 :
/* Fichier reference2.cpp
Exercices :
#include <iostream.h>
24
void determiner (double t[], int nbElem, double & minimum,
double & maximum)
{ minimum = 100.0 , maximum = 0.0 ;
int i ;
void demoParametreReference() {
int age = 25, leDouble, leTriple;
double taille[10] = { 1.72, 1.65, 1.58, 1.80, 1.62, 1.84 };
int nbPers = 6;
double tailleMax, tailleMin;
void main()
{
demoParametreReference();
}
/* Exécution:
Transmission des parametres par reference :
Le double de 25 est : 50
Le triple de 25 est : 75
Taille la plus grande : 1.58 metre
Taille la plus petite : 1.84 metre
*/
#include <iostream.h>
#include <iomanip.h>
25
}
void main() {
cout << "*(p+3) vaut " << setw(5) << *(p+3) << endl;
cout << "age[3] vaut " << setw(5) << age[3] << endl;
cout << "p[3] vaut " << setw(5) << p[3] << endl;
cout << "Conclusion 2 : en C, C++, Si p pointe vers age[0]
alors:\n";
cout << " *(p+i) <==> age[i] <==> p[i]\n\n";
afficher(age, nbPers);
afficher(nbPers, age);
afficher(age, nbPers, "encore des pointeurs");
}
/* Exécution :
age = 0x0012FF58 1245016(en entier)
&age[0] = 0x0012FF58 1245016(en entier)
Conclusion 1 : en C, C++, le nom du tableau
(ici age) est une CONSTANTE, c'est l'adresse
du premier element indice 0 (ici &age[0])
*(p+3) vaut 56
age[3] vaut 56
p[3] vaut 56
Conclusion 2 : en C, C++, Si p pointe vers age[0] alors:
*(p+i) <==> age[i] <==> p[i]
26
Affichage classique (avec indice) :
0 45
1 21
2 12
3 56
4 32
5 18
6 24
*/
27