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 :

Matrice deux dimensions


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Février 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : chercheur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2011
    Messages : 78
    Par défaut Matrice deux dimensions
    Bonjour à tous,

    Pourriez-vous, s'il vous plaît, me corriger le problème dans mon code ?!
    Je m'explique :
    J'ai une matrice à deux dimensions (ressources - périodes).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1	1	0	1	1	0	0	1	0	1	
    1	1	1	1	0	1	0	0	0	0	
    0	1	0	1	1	1	0	0	0	0
    La valeur 1 indique que la ressource r est présente à la période t. 0 sinon.
    Je souhaiterai stocker dans un tableau nommé
    Tab_Presence[r]
    la liste des périodes dont la ressource soit présente. Par exemple, la ressource 0 est présente aux périodes :
    [0, 1, 3, 4, 7, et 9]
    .

    Le code que j'ai réalisé m'affiche uniquement les numéros des dernières périodes pour chaque ressource et écrase le reste.

    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
    for(r=0; r<nr; r++) // nombre de ressources 
    	{
    		for(t=0; t<dm; t++) // nombre de periodes
    		{
    			if (matrice_presence[r][t]==1)
    			{
    				variable_presence = t;
    				Tab_Presence[r]=variable_presence;
    			}
    		}
    		cerr << "\n" ;
    	}
     
    	for(r=0; r<nr; r++) // nombre de ressources 
    	{
    		cerr << " " << Tab_Presence[r] << "\t";
    	}
    Le résultat trouvé :
    9 5 5
    Je vous remercie.

  2. #2
    Membre éprouvé

    Homme Profil pro
    autodidacte
    Inscrit en
    Mars 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : autodidacte

    Informations forums :
    Inscription : Mars 2011
    Messages : 95
    Par défaut
    Citation Envoyé par Student_Master Voir le message
    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
    for(r=0; r<nr; r++) // nombre de ressources 
    	{
    		for(t=0; t<dm; t++) // nombre de periodes
    		{
    			if (matrice_presence[r][t]==1)
    			{
    				variable_presence = t;
    				Tab_Presence[r]=variable_presence;
    			}
    		}
    		cerr << "\n" ;
    	}
     
    	for(r=0; r<nr; r++) // nombre de ressources 
    	{
    		cerr << " " << Tab_Presence[r] << "\t";
    	}
    Au sein de chaque boucle interne, la lvalue tab_presence[r] reste identique quel que soit t. r est donc invariant et tab_presence[r] est écrasée à chaque nouvelle affectation.

    Si tu cherches les ressources présentes à au moins un des moments :
    Initialise à 0 un tableau de dimension dm avant la boucle.
    et mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    			if (matrice_presence[r][t]==1)
    				Tab_Presence[t]=1;
    au cour des boucles imbriquées.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    faudrait voir à passer au vector, voire mieux dans ce cas : set
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Février 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : chercheur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2011
    Messages : 78
    Par défaut réponse
    Citation Envoyé par lautrec1 Voir le message
    Au sein de chaque boucle interne, la lvalue tab_presence[r] reste identique quel que soit t. r est donc invariant et tab_presence[r] est écrasée à chaque nouvelle affectation.

    Si tu cherches les ressources présentes à au moins un des moments :
    Initialise à 0 un tableau de dimension dm avant la boucle.
    et mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    			if (matrice_presence[r][t]==1)
    				Tab_Presence[t]=1;
    au cour des boucles imbriquées.
    Merci pour ta réponse. Je ne comprends pas pourquoi tu mets
    Tab_Presence[t]=1
    Ce que je cherche c'est d'avoir la liste des périodes de présence pour chaque infirmière. Si on prenant l'exemple donné ci-dessus, j'aurais le résultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Ressource 0 : [0,1,3,4,7,9]
    Ressource 1 : [0,1,2,3,5]
    Ressource 2 : [1,3,4,5]

  5. #5
    Membre éprouvé

    Homme Profil pro
    autodidacte
    Inscrit en
    Mars 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : autodidacte

    Informations forums :
    Inscription : Mars 2011
    Messages : 95
    Par défaut
    Citation Envoyé par Student_Master Voir le message
    Merci pour ta réponse. Je ne comprends pas pourquoi tu mets
    [/CODE]
    C'est pour pouvoir afficher les résultats en fonction de tab_presence. Comme ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (i=0;i<dm;i++)
          if (tab_presence[i]==1)
              cout<< i << '\t'
    C'est une technique comme une autre.

    Ah si tu veux la liste des t égaux à 1 pour chaque ressource R, que penses-tu de ceci (version sans vector)?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for (r=0,r<nr;r++)
       {
           i=0;
           for (t=0; t<dm; t++)
              if (matrice_presence[r][t]=1)
                   tab_presence[i++]=t;
           cout<< "ressource " << r << ":";
           for (k=0; k<i;k++)
              cout <<tab_presence[k] << '\t';
           cout<< endl;
       }
    Mais en effet, comme dit ci-dessus vaut mieux déclarer tab_presence en vector<int>, alors :
    - utilise tonvecteur.push_back(x), pour ajouter un élément x au vecteur
    - utilise tonvecteur.size() pour avoir le nombre d'éléments dans le vecteur
    - utilise tonvecteur[z] pour accéder au zième élément de tonvecteur

    Je n'ai jamais employé set<int> (vector où chaque valeur doit être unique), mais il doit être plus encore plus efficace.

    Bien à toi et bon courage.

    EDIT: précisions sur set<int>

  6. #6
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Février 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : chercheur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2011
    Messages : 78
    Par défaut Résolu
    Un grand merci Olivier.
    Le problème est maintenant résolu.

    Bonne journée.

  7. #7
    Membre confirmé
    Homme Profil pro
    chercheur
    Inscrit en
    Février 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : chercheur
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2011
    Messages : 78
    Par défaut Question ?
    J'ai une petite question après avoir résolu le problème.
    Quand je fais appel au fameux tableau Tab_Presence[r] pour l'utiliser d'une façon standard dans le reste du code étant donné qui contient les numéros de périodes pour chaque infirmière ne fonctionne pas quand je lis son contenu !
    Le résultat qu'on a trouvé est stocké dans un fichier texte. Je souhaiterai lire le contenu de ce tableau en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(r=0; r<nr; r++)
    {
    	fp >>  Tab_Presence[r];
    }
    Exp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4	6	7	8	9	
    0	2	4	5	6	8	9	
    0	1	3	4	6	7	8	9
    Le résultat de la lecture :
    Est ce que vous avez une idée pourquoi ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplir Matrice deux dimensions
    Par Student_Master dans le forum C++
    Réponses: 4
    Dernier message: 07/12/2014, 11h31
  2. Lecture d'une matrice à deux dimensions
    Par nizar_triki dans le forum C
    Réponses: 1
    Dernier message: 05/04/2012, 09h50
  3. Tri matrice à deux dimensions
    Par ensi2007 dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 22/10/2009, 11h36
  4. Réponses: 2
    Dernier message: 29/04/2008, 15h12
  5. [TP] Matrice à deux dimensions
    Par bongo parfait dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 18/03/2007, 22h20

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