
\documentclass{examen}
\usepackage{alltt}
\usepackage[T1]{fontenc}

\titre{Examen intra}
\cours{{\bf {\Large INF-3105}, Structures de données et algorithmes}}
\jour{---}
\session{---}
\annee{2009}
\universite{{\bf {\LARGE UQÀM}  Université du Québec à Montréal}}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{document}

\consigne{{\bf Les règlements de l'UQAM concernant le plagiat seront strictement appliqués.}}
\consigne{Aucune sortie n'est permise durant l'examen.}
\consigne{Il est important de bien expliquer vos choix s'il y a lieu.}
\consigne{Aucun document n'est permis.}
\consigne{La durée de l'examen est de 3 heures.}
\consigne{Vous pouvez utiliser les versos comme brouillon ou comme espace supplémentaire.}
\consigne{{\bf Il est interdit de dégrafer le questionnaire.}}
\consigne{Les téléphones cellulaires, calculatrices, ordinateurs, palm, baladeurs, iPods, etc. sont interdits.}

\setboolean{reponseVisible}{false}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Q

\numero{0}\ 

\begin{objectifs}
\item Application des connaissances.
\item Constructeur, Destructeur.
\end{objectifs}

\question\ Que va afficher le programme suivant~:

\begin{alltt}
#include <iostream>

using namespace std;

class G \{
 public :
  G()\{ cout << "G" << endl; \};
  virtual ~G()\{ cout << "-G" << endl; \};
\};

class H : public G \{
 public :
  H(): G() \{ cout << "H" << endl; \};
  virtual ~H()\{ cout << "-H" << endl; \};
\};

class K \{
 public :
  K()\{ cout << "K" << endl; \};
  virtual ~K()\{ cout << "-K" << endl; \};
\};

class F : public H, public K \{
 public :
  F(): K(), H() \{ cout << "F" << endl; \};
  virtual ~F()\{ cout << "-F" << endl; \};
\};

void t() \{
  F f;
\}

int main() \{
  t();
  return 0;
\}
\end{alltt}

\reponse{1}{
G

H

K

F

-F

-K

-H

-G
}

\clearpage

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Q

\numero{0}\ 

\begin{objectifs}
\item Application des connaissances.
\item Surcharge d'opérateur.
\end{objectifs}

\question\ Soit la déclaration suivante~:

\begin{alltt}
class NombreComplexe {
  private :
    double reelle;
    double imaginaire;
  public :
    NombreComplexe( double a_reelle = 0.0, double a_imaginaire = 0.0 ) :
      reelle( a_reelle ), imaginaire( a_imaginaire ) {};
    virtual ~NombreComplexe(){};
};
\end{alltt}

Écrivez le code qui permet de surcharger l'opérateur de multiplication (*)
afin de multiplier deux nombres complexes sachant que
re = x1.re * x2.re - x1.im * x2.im
et
im = x1.re * x2.im + x1.im * x2.re.

\reponse{1}{}

\clearpage

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Q

\numero{0}\ 

\begin{objectifs}
\item Synthèse de la matière.
\item Fonction amie.
\end{objectifs}

\question\ Expliquez le role du mot {\bf friend} lorsqu'il
est appliqué à une foncion.

\reponse{20}{
Cela donne accès au différents champs de la classe.
Cette accès est donnée à la fonction friend.
L'accès s'applique au champs privés, protégés et publiques.
}

\clearpage

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Q

\numero{0}\ 

\begin{objectifs}
\item Application des connaissances.
\item Utilisation des pointeurs.
\end{objectifs}

\question\ Dites ce que va afficher le code suivant~:

\begin{alltt}
#include <iostream>

using namespace std;

class C \{
public :
  C(int a_a = 0) : a(a_a) \{\}
  C(const C & a_c) : a( a_c.a ) \{\}
  virtual ~C()\{\}
  C * f()\{ 
    C * r = this; 
    r++; 
    return r; 
  \}
  friend ostream & operator<<( ostream &, C & );
private :
  int a;
\};

ostream & operator<<( ostream & a_cout, C & a_c )\{
  a_cout << a_c.a;
  return a_cout;
\}

int main() \{
  C t[10];
  int i = 0;
  for( i = 0; i < 10; i++ )\{
    t[i] = C( 10 - i );
  \}

  C * k = t + 3;
  cout << *k;
  *( k + 1 ) = *( k - 1 );
  cout << k[1];
  k = k->f();
  cout << k[0];

  return 0;
\}

\end{alltt}
\reponse{2}{
788
}

\clearpage

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Q

\numero{0}\ 

\begin{objectifs}
\item Synthèse de la matière.
\item Classe Abstraite.
\end{objectifs}

\sousnumero{0} Expliquez ce qu'est une méthode abstraite pure.

\reponse{10}{
C'est une méthode qui n'a pas de code.  Elle n'est pas implémentée
par la classe.
}

\sousnumero{0} Expliquez ce qu'est une classe abstraite.

\reponse{10}{
C'est une classe qui contient au moins une méthose abstraite.
Il est impossible d'instantier cette classe.
}

\sousnumero{0} Quel est l'utilité d'avoir des classes abstraite pure ?

\reponse{10}{
Cela permet de construire des interfaces.  
Une interface nous permet de garantir des caractéristiques
fonctionnelles pour une classe.
}

\clearpage

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Q

\numero{0}\ 

\begin{objectifs}
\item Application des connaissances.
\item Programmation C++.
\end{objectifs}

\question Le code suivant contient deux (2) classes.  Compl\'etez le
en ajoutant le code pour les constructeurs par d\'efaut et le code
pour les constructeurs de copies.

Note: L'ent\^ete des constructeurs par d\'efaut est d\'ej\`a inclue.

\begin{alltt}
class Forme2D \{
 public:
  Forme2D (double x = 0, double y = 0);
  virtual double surface () = 0;
 protected:
  double centre_x;
  double centre_y;
\};

class Cercle : virtual public Forme2D \{
 public:
  Cercle (double x = 0, double y = 0, double r = 0);
  double surface ();
 protected:
  double rayon;
\};
\end{alltt}


\reponse{1}{
}

\clearpage

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Q

\numero{0}\ 

\begin{objectifs}
\item Application des connaissances.
\item Programmation C++.
\end{objectifs}

\question Soit les classes {\bf Forme2D} et {\bf Cercle} 
d\'eclar\'ees au num\'ero pr\'ec\'edant, et la classe {\bf Forme3D}
suivante:

\begin{alltt}
class Forme3D : virtual public Forme2D \{
 public:
  Forme3D (double x = 0, double y = 0, double z = 0);
  virtual double volume () = 0;
 protected:
  double centre_z;
\};
\end{alltt}

\'Ecrivez le code pour les deux classes concr\`etes (non abstraites)
{\bf Cylindre} et {\bf Sphere}.  Ces classes doivent contenir
un constructeur par d\'efaut.
Les classes {\bf Cylindre} et {\bf Sphere} doivent \^etre d\'eriv\'ees
des classes {\bf Cercle} et {\bf Forme3D}.

\medskip

\begin{tabular} {l||c|c|} 
	& Cylindre & Sphere \\ \hline \hline
	& & \\
surface & $2\pi r h + 2\pi r^2 $ & $4\pi r^2$ \\ 
	& & \\ \hline
	& & \\
volume  & $\pi r^2 h$ & $\frac{4\pi r^3}{3}$ \\ 
	& & \\ \hline
\end{tabular}

o\`u $h$ est la hauteur du cylindre et $\pi \approx 3.1415926$.


\reponse{1}{
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


\end{document}


%% FIN
%% Local Variables: 
%% compile-command: "C:\\Progra~1\\TeXLive\\bin\\win32\\latex.exe examenTypeIntra.tex" 
%% End: 

