IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

probl�me variable d'un bloc a un autre


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 7
    Par d�faut probl�me variable d'un bloc a un autre
    Bonsoir,

    Apprenant dans le cadre scolaire le C++, je dois r�soudre des exos assez basique afin de se familiariser avec le langage (c'est pour cela qu'il n y a pas de classe dans le code qui suit).

    L'excercice consiste � cr�er un tableau "dynamique" de structure et � l'incr�menter � l'aide de new et delete [].

    Dans ce contexte ci, il faut g�rer un tableau de structure de pi�ce.

    l'utilisateur ajoute des pi�ces jusqu'� cliquer sur 2 dans le choix pr�liminaire (continuer ou non).

    J'ai d�ja r�aliser l'excercice avec passage par une fonction mais j'ai essay� de le refaire par une mani�re "s�quentielle et proc�durale"...mais ca foire un peu

    Pour info,je travaille sous code::blocks

    Voici donc le code:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    #include<iostream>
    
    using std::cout;
    using std::cin;
    using std::endl;
    
    struct piece{
    
        char nom[30];
        char code[12];
        char description[120];
        int stock;
    };
    
    int main(int argc, char * argv[])
    {
    
        piece *unePiece =new piece[1], *tpiece=NULL;
        int reponse=1,num_piece=0;
        bool continuer=true;
        while(continuer)
        {
    
            cout << "Voulez-vous inseser une piece? [1 --> oui] [2 --> non]:";
    
            cin >> reponse;
            if(reponse==2)
            {
    
                delete[] unePiece;
                continuer=false;
    
            }
            else
            {
                num_piece++; //on ajoute une piece
                tpiece=new piece[num_piece]; //on cr�e un tableau temporaire avec le nombre de pi�ce incr�ment�
    
                for(int i=0;i<num_piece-1 ;i++) //Si il y a une seule piece, ne rentre pas
                {
                    tpiece[i]=unePiece[i]; // copie les deux tableaux
                }
                delete [] unePiece;
    
                cout << "Nom de la piece : "<<endl;
                cin >> tpiece[num_piece-1].nom; // rajoute le nom dans le dernier maillon du tableau
                cout<<tpiece[0].nom;
                cout<<endl<<num_piece-1<<endl;// rajoute le nom dans le dernier maillon du tableau
                 // efface le tableau obsolete
                unePiece=tpiece; // repasse la main au tableau principal
                cout<<endl<<"unePiece[0]"<<unePiece[0].nom<<endl;
    
            }
    
    
        }
    /*le passage du while au reste de la fonction main provoque la "perte" du premier maillon du tableau de structure piece*/
    
        cout<<endl;
        cout<<"Piece [0] : "<<unePiece[0].nom<<endl;
        for(int i=0;i<num_piece;i++)
        {
            cout<<"------------------------------"<<endl;
            cout<<"Piece num "<< i+1 << " :"<<endl;
            cout<<"Nom : "<< unePiece[i].nom<<endl;
        }
        delete []unePiece;
    return 0;
    }
    Le probl�me est signal� dans les balise commentaire /* -->*/
    Si je n'ai pas �t� assez clair, je r�pondrai � toute vos questions

    D'avance Merci :p

  2. #2
    Membre �clair�
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    37
    D�tails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2006
    Messages : 37
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    piece *unePiece =new piece[1], *tpiece=NULL;
    int reponse=1,num_piece=0;
    Il faut �viter de d�clarer plusieurs variables � la fois ; surtout quand elles sont sans rapport.

    Tu cr�es un tableau de taille 1 et tu indiques une taille de z�ro ; tu te pr�pares des probl�mes.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    delete[] unePiece;
    continuer=false;
    Tu � delete � une Piece mais tu va l'utilser apr�s !

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    num_piece++; //on ajoute une piece
    tpiece=new piece[num_piece]; //on crée un tableau temporaire avec le nombre de pièce incrémenté
     
     for(int i=0;i<num_piece-1 ;i++) //Si il y a une seule piece, ne rentre pas
     {
          tpiece[i]=unePiece[i]; // copie les deux tableaux
     }
     delete [] unePiece;
     
    cout << "Nom de la piece : "<<endl;
    cin >> tpiece[num_piece-1].nom; // rajoute le nom dans le dernier maillon du tableau
    cout<<tpiece[0].nom;
    cout<<endl<<num_piece-1<<endl;// rajoute le nom dans le dernier maillon du tableau
    // efface le tableau obsolete
    unePiece=tpiece; // repasse la main au tableau principal
    cout<<endl<<"unePiece[0]"<<unePiece[0].nom<<endl;
    Il faut essayer de travailler de mani�re transactionelle :
    1. cr�er tpiece et l'initialiser
    2. mettre � jour unePiece et num_piece

    Ex�cute ta boucle for � la main, tu m'en diras des nouvelles. Ai-je remarqu� que num_piece est initialis� � 0 ?

    Que vienne faire les tpiece[0] et unePiece[0] ?

    Encore !


    Choisis une convention et suis l� : tpiece, unePiece et num_piece


    Une version � corrig�e � :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
     
    int
    main() {
     
      piece * unePiece(0);
      int numPiece(0);
     
      bool continuer=true;
      while(continuer) {
     
        int reponse(0);
        cout << "Voulez-vous inserer une piece? [1 --> oui] [autre --> non]:";
        cin >> reponse;
        if(reponse == 1) {
     
          // Copie de unePiece.
          piece * tPiece(new piece[numPiece+1]);
          for(int i(0); i != numPiece; ++i) {
     
            tPiece[i]= unePiece[i];
          }
     
          // Mise à jour de tPiece.
          cout << "Nom de la piece : " << endl;
          cin >> tPiece[numPiece].nom;
     
          // Code, description, ...
     
          // Switch unePiece et tPiece.
          delete [] unePiece;
          unePiece= tPiece;
          ++numPiece;
     
        } else {
     
          continuer=false;
        }
      }
     
      cout << "------------------------------" << endl;
      if(unePiece != 0) {
     
        for(int i(0); i != numPiece; ++i) {
     
          cout << "Piece num "<< i << " :" << endl;
          cout << "\tNom : "<< unePiece[i].nom << endl;
        }
     
      } else {
     
        cout << "Pas de piece" << endl;
      }
     
      delete []unePiece;
     
      return 0;
    }

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 7
    Par d�faut
    Un grand Merci . Aucune excuse pour ce genre de d�marche

  4. #4
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Petite note � part : ton code n'est pas exception-safe.
    Mais bon on s'en fout probablement de toutes fa�ons, vu que tout le code est dans main.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 7
    Par d�faut
    En fait c'�tait plus un bidouillage qu'autre chose
    Je m'�tais pas pench� sur la sortie du while...

  6. #6
    Membre �clair�
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    37
    D�tails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2006
    Messages : 37
    Par d�faut
    Citation Envoy� par michael urbain
    je dois r�soudre des exos assez basique
    Citation Envoy� par loufoque
    Petite note � part : ton code n'est pas exception-safe.
    Est-ce que l'execption-safety est un crit�re basique ?

    Note : j'ai indiqu� -- sans justification -- � Michael de penser transactionnel, je te laisse ajouter le try/catch

Discussions similaires

  1. probl�me concernant le passage des variable d'une page web � une autre
    Par aefmaaradji dans le forum D�veloppement Web avec .NET
    R�ponses: 1
    Dernier message: 13/08/2010, 19h27
  2. R�ponses: 4
    Dernier message: 29/06/2010, 11h45
  3. R�ponses: 8
    Dernier message: 28/10/2009, 19h08
  4. Probl�me d'affichage d'un navigateur � l'autre !
    Par [Morgan] dans le forum Mise en page CSS
    R�ponses: 6
    Dernier message: 10/12/2004, 11h21
  5. probl�me variable extern
    Par HeKaz dans le forum C
    R�ponses: 14
    Dernier message: 08/01/2003, 01h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo