salut
en c++ pour allouer un tableau il faut faire ça
mais quelqu'un m'expliquer comment faire pour allouer dynamiquement un tableau triangulaire dans un petit exempleCode:int *tab = new int[n];
Version imprimable
salut
en c++ pour allouer un tableau il faut faire ça
mais quelqu'un m'expliquer comment faire pour allouer dynamiquement un tableau triangulaire dans un petit exempleCode:int *tab = new int[n];
comme
crée un tableau bidimensionnel triangulaire ou les nombres d'éléments
varie d'une rangé à autre c.à.d pour rangé 0 on a un seul élément
et de façon générale la rangé i on a (i+1) éléments
OK, je viens de comprendre ce que tu veux faire.
Non, ce n'est pas possible, tu es obligé de faire un tableau carré (ou rectangulaire) et d'ignorer certaines cases.
Ou alors, c'est plus économe en mémoire mais un peu plus délicat en calcul, tu fait un tableau à une dimension (une ligne) mais par contre, c'est à toi de bien gérer les indices.
merci
mais dire comment faire et quoi ecrire
Ton tableau triangulaire aura n(n+1)/2 éléments (n étant la base du triangle), pour l'allouer tu feras donc
La façon dont tu accèderas tes éléments dépend de la facon dont tu stockes tes données (triangulaire supérieure ou inférieure), mais si tu as un triangle comme caCode:
1
2
3
4
5
6 double *tab=new double[n*(n+1)/2]; ou vector<double> tab(n*n+1)/2);
*
**
***
****
etc...
alors l'élément de coordonnée tab(i,j) (i<=j, les indices comptés de zéro), est en position (i(i+1)/2+j) (taille du triangle qui le précède plus position dans la ligne).
Tu peux donc définir une fonction du type
Pour faire mieux, tu pourrais aussi définir ta matrice diagonale comme une classe, et redéfinir son opérateur []... (en faisant que tab[i] renvoie un pointeur sur le premier élément de chaque ligne)Code:
1
2
3 double elem(int i,int j { return tab[i*(i+1)/2+j]; }
Francois
merci mais quand je definie le nombre de rangés à 5
comment faireCode:#define Rangees 5
Là, je ne vois pas...
Francois
Tu ne peux pas définir un triangle seulement avec sa base, il faut aussi la hauteur.
Ou la hauteur et le "pas".
Comme l'a expliqué François : la base suffit. La hauteur = base et le nombre d'élément est de n*(n+1)/2 (en fait, la somme de 1 à hauteur).
Et bien, en appliquant ce que t'a indiqué François. Tu as tous les éléments. Que ne comprends-tu pas ?
Hum, oui. Suis-je bête, le triangle est isocèle rectangle...