PBYetml / PRJ1_CPP_SLO2_23_24

Resultat des étudiants suite au projet de POBJ C++
0 stars 2 forks source link

MPT - source - ConversionBCD.cpp -> bug / amélioration / remarque #12

Open PBYetml opened 6 months ago

PBYetml commented 6 months ago

Constructeur Simple & surchargé

Méthode CalculerNbrDigit...

Méthode RecupererNbDigitEntier

Méthode ConversionBinaire

Melissaperret commented 6 months ago

Constructeur Simple & surchargé 1) un seul constructeur (ou il est surchargé) comme ceci, le constructeur normal aurait dû être ainsi :

ConversionBCD::ConversionBCD() : ConversionNumerique() //Constructeur par défaut appelant le constructeur de la class parent
{
}

2) Dans le constructeur surchargé, j'aurai dû procéder ainsi :

ConversionBCD::ConversionBCD(e_codageBinaire choixCodage, float valUser)
{
    if (choixCodage == BCD)
    {
        CalculerNbrDigitEntier(valUser);

        //-- création d'un tableau dynamique via pointeur --// 
        m_ptTbDigitEntier = new char[m_nbrDigitMaxValEntier];

        RecupererDigitEntier(valUser);
        ConversionBinaire();
    }
}

3) Non les constructeurs n'ont pas de paramètres de sortie c'est justement cela qui les différenties des méthodes.

4) Sans paramètre de sortie déjà et dans notre cas comme ceci : ConversionBCD::ConversionBCD(e_codageBinaire choixCodage, float valUser)

5) La déclaration correcte est celle-ci : if (choixCodage == BCD)
si on met un seul = cela signifie qu'on assigne la valeur à choixCodage, ce qui serait faux ans le cas d'un if.

6) Le tableau dynamique se déclare comme ceci : m_ptTbDigitEntier = new char[m_nbrDigitMaxValEntier];

7) Absolument pas !, voici la version corrigée : ConversionBinaire(); 8) Aucune, lors de mon entrainement, j'avais essayer de faire une fonction de conversion binaire et j'avais cette ligne dedans, en copiant mon code, j'ai également copié cette ligne en oubliant de la retirer (oups)

Méthode CalculerNbrDigit... 1) j'aurai dû faire cela :

void ConversionBCD::CalculerNbrDigitEntier(float valUser) 
{
    //-- déclaration de variables --// 
    char compteurBoucle = 0;
    int valEntiere = (int)valUser;

    while (valEntiere != 0)
    {
        valEntiere /= 10;   //valEntiere = valEntiere/10;
        compteurBoucle++;
    }

    m_nbrDigitMaxValEntier = compteurBoucle; //m_nbrDigitMaxValEntier contient le nombre de chiffre que l'utilisateur rentre
}

Méthode RecupererNbDigitEntier 1) Comme ceci : void ConversionBCD::RecupererDigitEntier(float valUser)

2) Dans le cas ou j'aurai gardé mon code, j'aurai dû réutiliser la variable valUser et lui assigner quelque chose. Cependant en refaisant le code, je me suis rendue compte que c'était pas la meilleure méthode, j'ai donc modifié comme suit ma méthode :

void ConversionBCD::RecupererDigitEntier(float valUser)
{
    //-- déclaration variable --// 
    int diviseur;
    int chiffre;
    int indexChiffre;

    //-- itération pour remplire le tableau de digit --//
    for (indexChiffre = 0; indexChiffre < m_nbrDigitMaxValEntier; indexChiffre++)
    {
        diviseur = pow(10, (m_nbrDigitMaxValEntier - (indexChiffre + 1)));
        chiffre = valUser / diviseur;
        m_ptTbDigitEntier[indexChiffre] = chiffre;
        valUser = valUser - (chiffre * diviseur);
    }
}

ou l'on peut voir que la MAJ de la variable valUser est faite après plusieurs étapes :)

3) Cette méthode est utilisée pour vérifier si le caractère transmis est un chiffre ou non. Le paramètre à lui "associer" est un caractère.

4) 5) 6) 7) voir point 2 ou j'ai mis la fonction entière :)

Méthode ConversionBinaire 1) Comme ceci void ConversionBCD::ConversionBinaire()

2)Franchement, j'ai fait n'importe quoi, car j'avais mal compris la donnée.. il n'y a pas de paramètre d'entrée... et non ce ne pourrait pas être compilable. La bonne façon de faire ma méthode est comme mentionné au point 1 (juste au dessus).

3) Comme suit : m_ptTbBinaire = new std::string[m_nbrDigitMaxValEntier]; il doit être de type string

4) Avec ma ligne je ne sais pas. Cependant en refaisant le code, j'ai procédé de la manière suivante :


    for (int i = 0; i < m_nbrDigitMaxValEntier; i++)
    {
        int chiffre = m_ptTbDigitEntier[i];

        while (chiffre != 0)
        {
            int bit = chiffre % 2;
            m_ptTbBinaire[i] = m_ptTbBinaire[i] + std::to_string(bit);
            chiffre = chiffre / 2;
        }

    }

Je vais vous envoyer un pull request avec la correction de mon code, je l'ai testé et il est fonctionnel.