Vous êtes sur la page 1sur 8

Université de M’SILA Master 1 / S2 / 2011-2012

Faculté de Technologie Option : Contrôle industriel


Département d’électronique Le 29 mai 2011

Examen « Programmation Avancée »


Durée 1h30

Questions de cours : (3 pts)

1. Quel est la différence entre les deux expressions :


Int x = &a ; et int&x = a ;
2. Citer deux avantages de l’approche orientée objet par apport à l’approche structurelle.
3. Donner les caractéristiques d’un constructeur de classe C++.

Exercice 1 : (4 pts)

Soient les déclarations suivantes :


• int n = 5, p = 9 ;
• int x ;
• float y =1.2 ;
Compléter le tableau avec les résultats d’exécution de la séquence d’instruction suivante :

Instruction n p x y
5 9 - 1.2
n *= 5;
x = n == p ;
y = x < ++p/2;
x = (float) p / n ;

Exercice 2 : (6 pts)

Soit la définition et la déclaration suivantes de la classe Point :

/* fichier Point.h */ /* fichier Point.cpp */


/* déclaration de la classe point */ /* définition de la classe point */
#include "point.h"
classtableau #include<iostream>
{ usingnamespacestd ;
int taille; tableau::tableau (int nb)
float*ptr; {
public : taille = nb ;
tableau (int) ; (1) ptr = new tableau[taille];
tableau (tableau& v) (2) }
~tableau() ; (3)
voidafficher () ;
voidlecture () ;
floatRecherche_min () ;

};

1|Page
Université de M’SILA Master 1 / S2 / 2011-2012
Faculté de Technologie Option : Contrôle industriel
Département d’électronique Le 29 mai 2011

1. Donner la signification des lignes (1), (2) et (3)


2. Donnez l’implantation des fonctions membre de la classe tableau.
3. Ajouter une fonction qui additionne deux tableaux (A et B ) et qui met le résultat dans un
nouveau tableau (C).

Exercice 3 : (8 pts)
#include <iostream.h> Questions :
class A {
public:
1. Donner les résultats d’exécution du
int x;
A(int); programme principal.
~A();
};
class B : public A{
main() {
public:
B *BB;
int y;
A *AA;
B(int, int); AA = new A(3);
~B(); BB = new B(1, 2);
};
A::A(int a) { deleteAA;
cout<<"++ A debut"<<endl; delete BB;
x = a; }
cout <<"++ A x = "<< x <<endl;
cout <<"++ A fin"<<endl;
}
A::~A(int a) {
cout<<"-- A debut x = "<< x <<endl;
cout <<"-- A fin"<<endl;
}
B::B(int a, int b) {
cout <<"++ B debut"<<endl;
y = b;
cout <<"++ B y = "<< y <<endl;
cout <<"++ B fin"<<endl;
}
B::~B() {
cout <<"-- B debut y = "<< y <<endl;
cout <<"-- B fin"<<endl;
}

2|Page
Université de M’SILA Master 1 / S2 / 2011-2012
Faculté de Technologie Option : Contrôle industriel
Département d’électronique Le 14 Juin 2011

Examen de rattrapage« Programmation Avancée »


Durée 1h30

Questions de cours : (3 pts)

1. Citer deux avantages de l’approche orientée objet par apport à l’approche structurelle.
2. Donner les caractéristiques d’un destructeur de classe C++.

Exercice 1 : (4 pts)

Soient les déclarations suivantes :


• int n = 5, p = 9 ;
• int x ;
• float y =1.2 ;
Compléter le tableau avec les résultats d’exécution de la séquence d’instruction suivante :

Instruction n p x y
5 9 - 1.2
n += 5; 10 9 - 1.2
x = n == p ; 10 9 0 1.2
p = x+(p/2); 10 4 0 1.2
y = (float) p / n ; 10 4 0 0.4

Exercice 2 : (7 pts)

Soit la définition et la déclaration suivantes de la classe Point :

/* fichier tableau.h */ /* fichier tableau.cpp */


/* déclaration de la classe tableau */ /* définition de la classe tableau */
#include "tableau.h"
classtableau #include<iostream>
{ usingnamespacestd ;
int taille; tableau::tableau (int nb)
float*ptr; {
public : taille = nb ;
tableau (int) ; (1) ptr = new tableau[taille];
tableau (tableau& v) (2) }
~tableau() ; (3)
voidafficher () ;
voidlecture () ;
floatRecherche_min () ;

};

1|Page
Université de M’SILA Master 1 / S2 / 2011-2012
Faculté de Technologie Option : Contrôle industriel
Département d’électronique Le 14 Juin 2011

1. Donner la signification des lignes (1), (2) et (3)


2. Donnez l’implantation des fonctions membre de la classe tableau.
3. Ajouter une fonction qui additionne deux tableaux (A et B ) et qui met le résultat dans un
nouveau tableau (C).

Exercice 3 : (6 pts)
#include <iostream.h> Questions :
class A {
public:
1. Donner les résultats d’exécution du
int x;
int y; programme principal.
A(int, int);
~A();
}; main() {
class B : public A{
B *BB;
public:
int z; BB = new B(1, 2, 3);
B(int, int, int);
~B(); delete BB;
}; }
A::A(int a, int b) {
cout<<"++ A debut"<<endl;
x = a;
y = b;
cout <<"++ A x = "<< x <<endl;
cout <<"++ A y = "<< y<<endl;
cout <<"++ A fin"<<endl;
}
A::~A() {
cout<<"-- A debut x = "<< x <<endl;
cout <<"-- A fin"<<endl;
}
B::B(int a, int b, int c) : A(a, b){
cout <<"++ B debut"<<endl;
z = c;
cout <<"++ B y = "<< y <<endl;
cout <<"++ B fin"<<endl;
}
B::~B() {
cout <<"-- B debut y = "<< y <<endl;
cout <<"-- B fin"<<endl;
}

2|Page
Université de M’SILA Master 1 / 2èmesem / 2010-2011
Faculté de Technologie Option : Contrôle industriel
Département d’électronique Le 24 mai 2011

Corrigé d’examen de Programmation Avancée

Questions de cours : (3 pts)

1. La différence entre les deux expressions est que l’opérateur & dans la première (Int x = &a)
renvoi l’adresse de a vers x, par contre la deuxième (int&x = a) définie une référence x sur a.
2. • Temps de mis en œuvre réduit
• Les logiciels réalisés sont de meilleures qualités
• Maintenance facile et applications évolutif
• Modularité
• Réutilisabilité
3. Les caractéristiques d’un constructeur de classe C++ sont :
a. Le constructeur d'une classe est une fonction membre spéciale,
b. Il l’a le même nom que la classe,
c. N'indique pas de type de retour (même pas un void),
d. Ne contient pas d'instruction return.
Exercice 1 : (4 pts)

Soient les déclarations suivantes :


• int n = 5, p = 9 ;
• int x ;
• float y =1.2 ;
Compléter le tableau avec les résultats d’exécution de la séquence d’instruction suivante :

Instruction n p x y
5 9 - 1.2
n *= 5; 25 9 - 1.2
x = n == p ; 25 9 0 1.2
y = x < ++p/2; 25 10 0 1
x///y = (float) p / n ; 25 10 0 0.4

Exercice 2 : (7 pts)

1. (1) Constructeur. (2) Constructeur de recopie. (3) Destructeur


2. L’implantation de chaque fonction membre est comme suit
tableau (int) ;
 tableau (tableau& v)// passage par référence obligatoire
{ taille = v.taille; ptr = new float[taille];
for(int i=0;i<taille;i++)
ptr[i] = v.ptr[i];
}
 ~tableau (deleteptr ;) ;
 void afficher ()
{for(inti=0; i<taille; i++)
cout<<”t[ "<<i<<”] = "<<ptr[i]<<endl; }//ou *(ptr1+i)
 void lecture ()
{ for(inti=0; i<n; i++) {cout<<”t[ "<<i<<”] : ";
cin>> t[i]; }//ou*(ptr1+i)
}

1|Page
Université de M’SILA Master 1 / 2èmesem / 2010-2011
Faculté de Technologie Option : Contrôle industriel
Département d’électronique Le 24 mai 2011
 floatRecherche_min()
{
float min=ptr[0]; inti_min = 0;
for (int i=1; i<taille; i++)
{ if (min>ptr[i])
{
min= ptr[i]; i_min=i; }
}
return min;
}
3. La fonction somme()
tableau tableau::somme(tableau tab)
{ tableau A ;
for (int i=0; i<taille; i++)
A.ptr[i]=ptr[i]+tab.ptr[i];
return A ;
}

Exercice 3 : (6 pts)

1. La sortie du programme est :

++ A debut
++ A x = 3
++ A fin

++ A debut
++ A x = 1
++ A fin
++ B debut
++ B y = 2
++ B fin

-- A debut x = 3
-- A fin
-- B debut y = 2
-- B fin

-- A debut x = 1
-- A fin

2|Page
Université de M’SILA Master 1/ S2 / 2015-2016
Faculté de Technologie Option : Contrôle industriel
Département d’électronique Le 14 Mai 2016

Examen en « Programmation Avancée » Durée 1h30

Questions de cours : (4 pts)


1. Quel est la différence entre les deux expressions :
Int x = &a ; et int&x = a ;
2. Citer les quatre principes fondamentaux du concept de la programmation orienté objet.
3. Donner les caractéristiques d’un constructeur de classe en C++.
4. Quel est l’avantage d’utiliser une fonction Inline.

Exercice 1 : (4 pts)
Ecrire une fonction voidcompter(int n) affichant les premiers entiers par ligne de taille croissante.
Exemple d’exécution :compter(4) 1
12
123
1234

Exercice 2 : (4 pts)
Prenant la structure de test suivante
switch (n)
{ case0 :cout<< "A" <<endl ;
case1 :
case3 :cout<< "B" <<endl ;
break ;
case 2 :
case4 :
case6 :cout<< "C" <<endl ;
default : cout << "D" <<endl ;;
}
Que va afficher le programme dans le cas où l'utilisateur donne comme valeur de n les cas suivants :
1) 0
2) 1
3) 6
4) -1

Exercice 3 : (4 pts)
Ecrire une fonction qui recherche le minimum d’un tableau d’entier.
voidgetMin(int& min, int& indice, int a[], int n);
Exercice 4 : (4 pts)
1. Réaliser une classe point permettant de manipuler un point d’un plan. La classe doit contenir au
minimum:
 Une fonction membre deplace effectuant un déplacement vers de nouvelles coordonnées
définie par deux arguments.
 Une fonction membre affiche qui permet d’afficher les coordonnées cartésiennes du point.
Les coordonnées du point seront des membres ‘ donnée ’ publiques.
2. Il faut aussi écrire, un programme d’essai (main) déclarant un point statique, qui initialise les
coordonnées du point, les affichant, les déplaçant et les affichant de nouveau.

Bonne chance
Université de M’SILA Master 1/ S2 / 2015-2016
Faculté de Technologie Option : Contrôle industriel
Département d’électronique Le 14 Mai 2016

Corrigé Type
Questions de cours : (4 pts)
1. La différence entre les deux expressions est que l’opérateur & dans la première (Int x = &a)
renvoi l’adresse de a vers x, par contre la deuxième (int&x = a) définie une référence x sur a.
2. Class et objet Encapsulation Héritage polymorphisme
3. Lescaractéristiques d’un destructeur de classe C++ sont :
a. Le constructeur d'une classe est une fonction membre spéciale,
b. Il l’a le même nom que la classe avec le signe ~ placé avant le nom,
c. N'indique pas de type de retour (même pas un void),
d. Ne contient pas d'instruction return.
4. En utilisant une fonction inline, le compilateur remplace le contenue de la fonction
directement dans le programme principal, ceci élimine les temps nécessaires pour l’appel de
la fonction et les passages de paramètres ce qui permet de réduire le temps d’exécution.
Exercice 1 : (4 pts)
voidcompter(intn)
{
for (intj=1; j <= n; j++)
{
for (inti=1; i<= j; i++)
cout<< i << " ";
cout<<endl ;
}
}
Exercice 2 : (4 pts)
Le programme affiche les résultats suivants :
(1) (2) (4) (5)
n= 0 1 6 -1
A B C D
B D
Exercice 3 : (4 pts)
voidgetMin(int& min, int&indice, int a[], int n)
{
Indice =0;
min = a[0];
for (inti=1; i<n; i++)
if (a[i] < min)
min = a[i];
indice = i;
}

Exercice 3 : (5 pts)

class Point { int main()


public : {
float x, y; Point a;
public: a.x=1 ; a.y=2 ;
void afficher() cout<<"le point statique est :"<<endl;
{ cout << "L'abscisse vaut " << x <<endl; a.afficher();
cout<<"L'ordonnée vaut " << y <<endl ; } a.deplacer(4,5);
void deplacer(float dx, float dy) cout<<"le point statique est :"<<endl;
{ x = dx; a.afficher();
y = dy;} return EXIT_SUCCESS;}
};

Vous aimerez peut-être aussi