Probleme de matrice

Résolu
diable007 Messages postés 21 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 12 mai 2008 - 30 sept. 2007 à 17:30
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 - 1 oct. 2007 à 13:20
bonjour, voila mon code:

#include
#include <vector>
#include
using namespace std;

void main()
{ int i,j;

    vector<vector > mathad2(2,vector(2));
    vector<vector > mathad4(4,vector(4));

            for(i=0;i<2;i++)
            for(j=0;j<2;j++)
                mathad2[i][j]=1;

                mathad2[1][1]=-1;

                for(i=0;i<2;i++)
                {for(j=0;j<2;j++)
                {cout<<mathad2[i][j];}
                cout<<endl;}

  for ( iter_ii=mathad4.begin() ; iter_ii!=mathad4.end(); iter_ii++ )
  {
      for ( iter_ii_2=mathad2.begin() ; iter_ii_2!=mathad2.end(); iter_ii_2++ )
      {
         copy(mathad2.begin(),mathad2.begin()+2,mathad4.begin());
         copy(mathad2.begin(),mathad2.begin()+2,mathad4.begin()+2);

      }

    }

        for(i=0;i<4;i++)
                {for(j=0;j<4;j++)
                {cout<<" "<<mathad4[i][j];}
                cout<<endl;}

}

le resultat est mathad4:
1 1 0 0
1-1 0 0
1 1 0 0
1-1 0 0

sachant que mathad2 contient
1  1
1 -1
alors je veux ce matrice résultat:
1 1 1  1
1-1 1 -1
1 1 1  1
1-1 1 -1

en d'autre termes répéter 4 fois la matrice mathad2
 svp aidez moi c'est trés urgents,merci bien pour votre aide

6 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
1 oct. 2007 à 13:20
  assert((mathad4.size() % mathad2.size()) == 0);
  unsigned int lCounter = 0;

  for ( vector<vector >::iterator iter_ii=mathad4.begin() ; iter_ii!=mathad4.end(); iter_ii += mathad2.size())
  {
        lCounter = 0;
       
          for ( vector<vector >::iterator iter_ii_2=mathad2.begin() ; iter_ii_2!=mathad2.end(); iter_ii_2++ , ++lCounter)
          {
             copy(iter_ii_2->begin(),iter_ii_2->begin()+2,(iter_ii+lCounter)->begin());
             copy(iter_ii_2->begin(),iter_ii_2->begin()+2,(iter_ii+lCounter)->begin()+2);
          }
    }
3
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
30 sept. 2007 à 17:42
Très étrange façon de gérer des matrices, mais pourquoi pas. J'imagine que c'est un exercice.

Une chose me choque: dans ta boucle, rien ne dépend des itérateurs:

  for ( iter_ii=mathad4.begin() ; iter_ii!=mathad4.end(); iter_ii++ )
  {
      for ( iter_ii_2=mathad2.begin() ; iter_ii_2!=mathad2.end(); iter_ii_2++ )
      {
         copy(iter_ii_2->begin(),iter_ii_2->begin()+2, iter_ii->begin());
         copy(iter_ii_2->begin(),iter_ii_2->begin()+2, iter_ii->begin()+2);
      }
    }

Mais bon je le repete, utiliser des vectors pour une classe matrice c'est anti performant et lourd à programmer.
0
diable007 Messages postés 21 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 12 mai 2008
30 sept. 2007 à 18:56
merci ça marche
mais est ce que vous pouvez m'expliquer  -> veut dire quoi ?
et est ce que ces 4 lignes sont moins performants qu'une classe matrice?
merci beaucoup
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
30 sept. 2007 à 23:48
Habituellement, "->" est utilisé lorsqu'à gauche de ce signe, tu as un pointeur sur une structure. Ici ce n'est pas le cas, "-> "est un opérateur défini par les itérateurs de la classe vector. Ca retourne un pointeur sur l'élément de ton conteneur:

iter_ii.operator ->()->begin();

Seulement comme c'est un opérateur, on écrit habituellement: (rigoureusement équivalent)
iter_ii->begin();

que l'on peut aussi écrire grâce a l'opérateur *.

(*iter_ii).begin();
<=>
iter_ii.operator * ().begin();

Pour créer une matrice, utiliser des vectors n'est pas très adapté. Autant manipuler un bête tableau que tu insères dans une classe. Tu trouveras surement plein d'exemple sur ce site.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
diable007 Messages postés 21 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 12 mai 2008
1 oct. 2007 à 02:10
monsieur, votre solution m'as donner la matrice suivante
1 -1 1 -1
1 -1 1 -1
1 -1 1 -1
1 -1 1 -1
alors que je veux cette matrice
1  1  1  1
1 -1 1 -1
1  1  1  1
1 -1 1 -1
en d'autre terme  répéter 4 fois la matrice mathad2  suivante:   1  1           
                                                                                             1 -1

svp, pouvez vous rectifier la solution?
merci beaucoup
0
diable007 Messages postés 21 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 12 mai 2008
1 oct. 2007 à 11:55
svp aidez moi
0
Rejoignez-nous