M1103 – TP6 Exercice 2

On remplace les plots par des vecteurs d’entiers naturels afin de pouvoir afficher le contenu de chaque vecteur après chaque déplacement.

Coder la fonction void Hanoi (const unsigned & N, vector <unsigned> & Dep, vector <unsigned> & Arr, vector <unsigned> & Int);

NB:

  • N’oublier pas d’initialiser le plot de départ avant l’appel de la fonction;
  • L’affichage d’un vecteur se fera sur la même ligne pour plus de simplicité.

R1.01 – Prog#8 – Exercice 2

Le code suivant contient la procédure de génération d’un tableau et la recherche de la valeur maximale.

using namespace std;

void initVect (vector & V, const size_t & _size, const unsigned & min, const unsigned & max)
{
    V.resize(_size);
    for (unsigned & val : V)
        val = min + rand() % (max - min);
}

unsigned maxElemem (const vector & V)
{
    return *max_element (V.begin(), V.end());
}

int main()
{
    srand (time(nullptr));

    vector  V;
    unsigned maxAGenerer (20);
    initVect (V, 10, 1, maxAGenerer);

    //TODO

    return 0;
}

Compléter le contenu pour afficher l’histogramme du tableau.
Veillez à bien dimensionner votre fenêtre.

M3103 – TP2 Exercice 1

Dans le fichier node.hpp, créer la classe générique CNode :

template 
class CNode
{
private:
    T m_Data;
    CNode* m_Next;
public:
    //constructor
    CNode ();
    //destructor
    ~CNode ();

    //getter / setter
    TODO
};
  1. Faites en sorte d’avoir un constructeur par défaut;
  2. Ecrivez le profil des getter et des setter;
  3. Pour cet exercice, faites en sorte que le destructeur affiche la contenu de la case supprimée (ce dernier est supposé être injectable dans le flux écran);
  4. Ecrivez le corps de toutes les fonctions.

Tester votre classe avec le code suivant :

void ListeSimple (void)
{
    std::cout << "ListeSimple : \n\n";

    CNode* Tete = nullptr;

    // Le dernier element cree est toujours le premier de la liste


    for (unsigned i (0); i < 5; ) {
        Tete = new CNode (i++, Tete);
        std::cout << Tete << endl;
    }

    for (CNode* Ptr (Tete); Ptr; Ptr = Ptr->GetNextNode ())
        std::cout << Ptr->GetData() << "; ";

    std::cout << '\n';

    // Dans cette version, le destructeur de C1Link detruit son
    //   suivant donc la destruction de la liste est recursive

    delete Tete;

}// ListeSimple ()

M3103 – TP2 Exercice 2

Dans le fichier list.hpp, créer la classe générique CList de signature suivante :

template 
class CList
{
private:
    CNode* m_Head;
public:
    CList ();
    ~CList ();
   //ajout en tête de liste
    void push_front (const T & val);
   //affichage
    void Show () const;
    //recherche d'un élément dans la liste, renvoie le pointeur du maillon si l'élément est présent, nullptr sinon
    CNode* Find (const T & val) const;
    //ajout d'une valeur après un maillon de la liste
    void Add (const T & val, CNode*);
    //détache un maillon de la liste et le supprime
    void Delete (CNode*);
};

Ecrivez le corps de toutes les fonctions de cette classe.

Tester votre classe avec le code suivant :

void ListeSimpleV2 ()
{
    cout << "ListeSimpleV2 : \n\n";

    CList AList;

    // Le dernier element cree est toujours le premier de la liste

    for (unsigned i (0); i < 5; ) 
    {
        AList.push_front (i++);
    }

    AList.Show ();

    int i;
    cin >>i;
    CNode* ptr = AList.Find (i);
    AList.Add (3*i, ptr);
    AList.Show ();

    cout << ((ptr != NULL)?  " " : "non ") << "trouve" << endl;

}

M3103 – TP2 Exercice 3

Ajouter à la classe CList une donnée membre qui indique l’adresse de la queue (dernier élément) de la liste.

Modifier la fonction Add en mettant à jour cette variable lorsque cela est nécessaire.

Ajouter à la classe la fonction push_back () de signature :

void push_back (const T & val);

Tester votre fonction.

M3103 – TP2 Exercice 4

La donnée membre m_Head change de sémantique : elle ne pointe plus vers la tête réelle mais vers une tête fictive nommée m_fictionaHead.

Modifier toutes les fonctions de la classe CList pour appliquer cette modification.

M2103-TP9-EXO-1

Créer le projet ReseauSocial.

Depuis C++11, C++ offre une bibliothèque ctime, qui permet de grossièrement gérer l’heure et la date. Cette bibliothèque reprend les structures du C, dans l’espace de nom std. Pour obtenir la date du jour, il faut procéder en 2 étapes. D’abord, récupérer le nombre de secondes écoulées depuis le 01/01/1970, à l’aide de la fonction time() de profil (simplifié)

time (time_t * t);

qui s’utilise comme suit :

time_t t; 
time (&t);

Ensuite,on transforme le time_t en une structure struct tm (rappel: struct classe où tout est publique par défaut) à l’aide de la fonction localtime() de profil

tm * localtime (time_t * t);

qui transforme t, le nombre de secondes écoulées depuis le 01/01/1970, en une tm et s’utilise comme suit :

tm local = * localtime (& t);

nous allons encapsuler cette struct tm dans la classe Date, comme sur le schéma UML suivant, de manière à interdire, à l’utilisateur qui utiliserait cette classe Date, l’accès aux attributs de la struct tm :

On ajoutera à cette classe Date un constructeur par défaut qui construit une Date avec la date du jour.

Travail demandé

Ecrire complètement les fichiers Date.h et Date.cpp qui contiennent respectivement les déclarations et les définitions de la classe Date correspondant au schéma et aux explications, dans l’espace de noms std.
Tester en ajoutant la fonction suivante à l’espace de noms anonyme de votre main.cpp :

    void testDate (void)
    {
        Date date;
        cout << "Aujourd'hui nous sommes le : " 
             << date.getDay () << ' ' << date.getMonth () << ' ' << date.getYear ()
             << " et il est " << date.getHour () << "h " << date.getMinute () 
             << "mn et " <

Petit problème, le mois est le mois dernier et l'année est n'importe quoi. Voici ce que dit le man sur les attributs mis en cause dans le struct tm :

           struct tm {
               int tm_sec;    /* Seconds (0-60) */
               int tm_min;    /* Minutes (0-59) */
               int tm_hour;   /* Hours (0-23) */
               int tm_mday;   /* Day of the month (1-31) */
               int tm_mon;    /* Month (0-11) */
               int tm_year;   /* Year - 1900 */
               int tm_wday;   /* Day of the week (0-6, Sunday = 0) */
               int tm_yday;   /* Day in the year (0-365, 1 Jan = 0) */
               int tm_isdst;  /* Daylight saving time * /
           };

Corriger dans les 2 accesseurs concernés et tester à nouveau.