diable007
Messages postés21Date d'inscriptiondimanche 3 avril 2005StatutMembreDernière intervention12 mai 2008
-
7 oct. 2007 à 03:08
BunoCS
Messages postés15475Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention23 avril 2024
-
8 oct. 2007 à 14:08
bonjour,
j'ai besoin de copier une matrice dans une autre
exemple copier cette matrice d'ordre 2
11
10
dans une matrice d'ordre 4
donc copier 4 fois cette matrice puisque la nouvelle matrice contient 4 lignes et 4 colonnes donc ma nouvelle matrice:
11 11
10 10
11 11
10 10
sachant que j'ai la fonction suivante pour construire une matrice et j'utilise pas de pointeur
Matrice(unsigned int nl, unsigned int nc)
{
n = nl;
m = nc;
lignes = new ligne[n]; // allocations
for (unsigned int i=0; i<n; i++)
{
lignes[i] = new double[m];
for(unsigned int j=0; j<m; j ++)
lignes[i][j] = 0; //initialisation à '0'
}
}
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 7 oct. 2007 à 20:47
En boucle aucun appel d'alloc n'est performant, surtout si on peut s'en passer.
TON CODE:
lignes = new ligne[n]; // allocations
for(unsigned int i=0; i<n; i++) {
lignes[i] = new double[m];
for(unsigned int j=0; j<m; j ++) lignes[i][j] = 0;
}
Donc le but est d'obtenir un tableau de:
n * m * sizeof(double)
S'obtient idem en 1 seule alloc:
doubles *lignes = (double*) malloc(n * m * sizeof(double));
Les temps d'accès aux éléms seront ensuite nettement meilleurs, aucun besoin de déréférencer des adresses, on y pointe dirrct.
Il y aura aussi 1 seule désalloc, tout benef.
ciao...
BruNews, MVP VC++
Vous n’avez pas trouvé la réponse que vous recherchez ?
BunoCS
Messages postés15475Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention23 avril 2024103 8 oct. 2007 à 11:06
Salut,
Encore des problèmes avec tes matrices?
C'est quoi le souci? Tu as une matrice 2x2 et tu veux en faire une 4x4 en recopiant les valeurs?
Si tu sais construire une 2x2, tu répètes le processus en décalant les indices de boucles...
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
BunoCS
Messages postés15475Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention23 avril 2024103 8 oct. 2007 à 14:08
???
Loin de moi l'idée de t'insulter, rassures-toi! Si tu l'as pris comme tel, je te prie de m'excuser...
Qu'entends-tu par "copiage"?
Tu peux avoir une fonction de ce type (pas du tout testé, plutôt du pseudo-code sur lequel s'appuyer):
Matrice::copie(int HauteurSousMatrice, int LargeurSousMatrice, Matrice & sousMatrice, int NbCopie)
{
// Allocation de la matrice
// Hauteur = HauteurSousMatrice*NbCopie
// Largeur = LargeurSousMatrice*NbCopie
// Remplissage
for (int i=0; i<NbCopie, i++)
{
// Copie de la sous matrice "à la bonne place"
// indexLargeur de départ: i*LargeurSousMatrice
// indexHauteur de départ: i*HauteurSousMatrice
for (int x=0; x<LargeurSousMatrice; x++)
for (int y=0; y<HauteurSousMatrice; y++)
this->matrice[i*LargeurSousMatrice+x][i*HauteurSousMatrice+y]=sousMatrice[x][y];
}
}
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...