[C++]Réduction zone de travail dans une matrice

Réduction zone de travail dans une matrice [C++] - C++ - Programmation

Marsh Posté le 27-10-2003 à 20:09:48    

[débutant inside]
Vala, suppose que j'ai
Fonction, une fonction effectuant certaines opérations sur une matrice carrée V[n][n]
 
une fonction main qui crée une matrice carrée A[j][j]
 
main fait appel à Fonction
 
seulement, on voudrait que Fonction ne travaille pas sur la matrice A
mais sur la matrice B, qui serait la matrice A dont on aurait retiré la première colonne et la dernière ligne (donc on réduit la dimension de 1)
et cela sans passer par une matrice intermédiaire
 
comment faire?
(jsuppose qu'il faut jouer avec des pointeurs mais je ne connais pas assez le liens matrices-pointeurs)
 
Exemple
Fonction est la fonction qui calcule la Trace de la matrice (somme des éléments diagonaux, pour ceux qui l'ont oublié (j'entends déja les airs de nostalgies :D)
 
on voudrait calculer la somme de toutes les diagonales d'une matrice A (diagonale commençant en haut à gauche, et terminant en bas à droite)
donc on se dit, ohoh, on a déja la fonction nous donnant la trace
alors pourquoi ne pas "réduire" la matrice qu'on enverra à la fonction au fur et à mesure dans une chtite boucle for?
Ainsi, en un appel de Fonction (pour la diagonale principale de A), une boucle for (pour les diagonales "supérieures" et parallèle à la diagonale principale) contenant l'appel à Fonction, et une boucle for (pour les diagonales "inférieures" et parallèle à la diagonale principale) contenant l'appel à la Fonction
 
on aura toutes les sommes des diagonales parallèles


---------------
Je viens d'apprendre que les ventes de voitures ont encore baissé de 7% en France. Y'en a marre de ces pirates qui téléchargent les voitures sur internet ! (antp était prems et est admin) - "Le travail est l'opium du peuple et je ne veux pas mourir dr
Reply

Marsh Posté le 27-10-2003 à 20:09:48   

Reply

Marsh Posté le 27-10-2003 à 22:39:51    

euh... à partir de l'ex g pu rien compris mais bon...
 
dans ta Fonction, tu fais:
for(int i = 0; i<n; i++)
{
 for(int j = 0; j<n; j++)
 {
  B[i][j] = V[i+1][j+1];
 }
}
 
ps: comme tu es en c++ ,je pense que dans ton cas un valarray aurait été mieux...
 
++

Reply

Marsh Posté le 28-10-2003 à 09:17:53    

un Blitz array serait meme de bon [:aloy]

Reply

Marsh Posté le 28-10-2003 à 16:44:39    

Riot a écrit :

euh... à partir de l'ex g pu rien compris mais bon...
 
dans ta Fonction, tu fais:
for(int i = 0; i<n; i++)
{
 for(int j = 0; j<n; j++)
 {
  B[i][j] = V[i+1][j+1];
 }
}
 
 

euh oui mais non
le but est justement de ne pas passer par une matrice intermédiaire
 
donc on a une matrice A
et on veut que la fonction ne travaille que sur une partie de cette matrice en considérant que cette partie est une matrice à part entière
et le tout, sans utiliser de matrice intermédiaire
autrement c trop facile


---------------
Je viens d'apprendre que les ventes de voitures ont encore baissé de 7% en France. Y'en a marre de ces pirates qui téléchargent les voitures sur internet ! (antp était prems et est admin) - "Le travail est l'opium du peuple et je ne veux pas mourir dr
Reply

Marsh Posté le 28-10-2003 à 17:00:00    

bah pourquoi tu commences pas tes indices à A[1][1] et tu fais un parcours de 1 à N au lieu de 0 à N ???

Reply

Marsh Posté le 28-10-2003 à 18:10:44    

ben pcq ce que je voudrais c'est par exemple avoir une sous matrice commençant en (si n est la dimension, donc colonnes et lignes de 0 à n-1)
A[0][1]
et finissant en A[n-2][n-1]
et calculer la trace de cette sous matrice
or la fonction trace se décrit simplement en
 
somme de A[i][i]
 
et déja on voit que A[0][1] n'a pas vraiment une tête de A[i][i]


---------------
Je viens d'apprendre que les ventes de voitures ont encore baissé de 7% en France. Y'en a marre de ces pirates qui téléchargent les voitures sur internet ! (antp était prems et est admin) - "Le travail est l'opium du peuple et je ne veux pas mourir dr
Reply

Marsh Posté le 29-10-2003 à 01:28:59    

Si tu pars de l'indice i0,j0 et tu t'arretes a n,m
trace=A[i0][j0];
while((i0++ <= n) && (j0++ <= m)) trace+=A[i0][j0];
ca irait?


Message édité par Dag elg le 29-10-2003 à 01:38:29
Reply

Marsh Posté le 12-11-2003 à 10:28:10    

erf! g vu ça hier dans mon bouquin...
il faut utiliser un gslice pour récuperer ta sous matrice.
 
++

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed