retour sommaire des sujets logo ULP

Master Ingénierie et Technologies

Spécialités :
Génie Mécanique et Industriel
Informatique Industrielle et Systèmes Automatisés

premier contrôle continu

TCP 19 - Génie informatique

Durée de l'épreuve : 1h45. Tous documents papier autorisés. Les questions, bien que liées, peuvent être traitées indépendamment. Efforcez vous à expliquer les différents concepts abordés dans chaque question.

Question 1 : Le contenu du fichier point.h est listé en annexe 1. Qu'est-ce qu'un objet « point » et que peut-on en faire ?

Question 2 : Le contenu du fichier tpts.h est listé en annexe 2. Qu'est-ce qu'un objet « tpts » et que peut-on en faire ?

Question 3 : Supposons désirer qu'un objet « tpts » soit continuellement en mémoire. Et que plusieurs tâches indépendantes (voire simultanées) puissent y accéder, chacune ne travaillant que sur un seul point (on peut accéder à des points différents en même temps, mais pas simultanément au même point). Un seul peut modifier « nbpoints » à la fois . Pourriez vous imaginer les mécanismes de synchronisation que l'on pourrait utiliser (explications en français, pas de programmation).

Question 4 : Les différentes figures planes peuvent être définies par un ensemble de points (segment par deux points, cercle par le centre et un point de passage, polygone par ses sommets, triangle, rectangle...) On pourrait créer une une classe qui hérite de la classe tpts. Décrivez en quoi consiste l'héritage, et quels en sont les avantages.

Question 5 : Dans les questions précédentes, les points sont stockés sous forme d'un tableau. Peut-être pourrait-on les stocker sous forme d'une liste chaînée. Veuillez expliquer ce qu'est une liste chaînée, ce que cela apporterait ici, ainsi que les éventuels inconvénients.

Question 6 : Pour un objet point (annexe 1), on dispose de diverses méthodes. Certaines sont des "accesseurs en lecture". Lesquelles ? Proposez (en C++) les accesseurs en écriture (plusieurs, ou un seul qui fixe directement tous les attributs privés).

Question 7 : Quand on écrit une fonction, on peut utiliser des variables locales. Qu'est-ce qu'une variable locale dans une fonction ? On peut aussi transférer des variables à la fonction via les arguments, qui peuvent être passés par adresse ou par valeur. Expliquez en quoi cela consiste. Peut-être pourriez-vous illustrer vos explication sur un exemple de fonction qui recevrait des arguments et utiliserait des variables locales.


ANNEXE 1 : fichier « point.h »

include <iostream.h>
class point
 {
  int num;
  float x,y;
 public:
  void saisie(int i);
  void affiche(void);
  int get_num(void);
  float get_x(void);
  float get_y(void);
  void deplace(float dx,float dy);
 };

int point::get_num(void)
 {return num;}
float point::get_x(void)
 {return x;}
float point::get_y(void)
 {return y;}
void point::saisie(int i)
 {
  cout<<"coordonnées du point "<<i<<" ? ";
  num=i;
  cin>>x;
  cin>>y;
 }
void point::affiche(void)
 {
  cout<<"point "<<num<<" : ("<<x<<","<<y<<")";
 }
void point::deplace(float dx,float dy)
 {
  x=x+dx;
  y=y+dy;
 }


ANNEXE 2 : fichier « tpts.h »

#include "point.h"
#define MAXPTS 1000
class tpts
 {
  int nbpoints;
  point n[MAXPTS];
 public:
  void saisie(void);
  void affiche(void);
  void deplace(float dx,float dy);
  int get_nbpoints(void);
  int position(int num);
  point get_point_direct(int i);
  point get_point(int num);
  void ajoute_point(point p);
  void supprime_point(int num);
 };
void tpts::saisie(void)
 {
  int i;
  cout<<"combien de points ? ";
  cin>>nbpoints;
  for(i=0;i<nbpoints;i++) n[i].saisie(i+1);
 }
void tpts::affiche(void)
 {
   int i;
   for(i=0;i<nbpoints;i++)  {n[i].affiche();cout<<"\n"; }
 }
void tpts::deplace(float dx,float dy)
 { int i; for(i=0;i<nbpoints;i++) n[i].deplace(dx,dy); }
int tpts::get_nbpoints(void)
 {return nbpoints;}
int tpts::position(int num)
 {
  int i;
  for(i=0;i<nbpoints;i++) 
    if(n[i].get_num() == num) return i;
  return -1; //au cas où je n'aurais pas trouve
 }
point tpts::get_point_direct(int i)
 {return n[i];}
point tpts::get_point(int num) 
 {
  int pos;
  pos=position(num);
  return n[pos];
 }
void tpts::ajoute_point(point p)
 {
  n[nbpoints]=p;
  nbpoints=nbpoints+1;
 }
void tpts::supprime_point(int num)
 { 
   //non détaillé dans le sujet du contrôle 
 }

Je ne mets pas de correction ici, tous ceux qui ont participé aux TD qui suivaient sont censés avoir pris des notes. Ci-contre, l'histogramme des notes.

retour sommaire des sujetsPatrick TRAU, ULP - IPST novembre 05