O
am speicher sparendsten und dabei konfortabelsten wär wahrscheinlich sowas:
struct Values{
float _11,
_21,_22,
_31,_32,_33,
_41,_42,_43,_44;//alle werte des arrays schön übersichtlich
}
struct TriangularMatrix {
union{
Values values;
float array_values[10];
}
}
so, nun kann man entweder die Values direkt ansprechen, man hat ja eine schöne struktur, oder man versucht, das 1d array auf ein 2d array abzubilden.
zum abbilden auf ein 2d array gibts mehrere möglichkeiten, für den fall hier würde sich denk ich mal das hier empfehlen:
//funktion zum auswählen des array elements
int get_element(int zeile,int element_nr=0){
if(zeile>0){
int i;
if(element_nr>0){
i=zeile;
}
else
{
i=spalte;
}
return i+get_element(--zeile);
}
return 0;
}
erklärung: jede spalte hat genausoviele elemente wie die position in der sie sich befindet.
also zeile 4 hat 4 elemente,zeile 3 3elemente usw.
dh wenn jemand das element 4/4 haben will muss er
4+3+2+1 rechnen um seine endgültige position zu bekommen, da 4/4 ja das letzte element ist.
wenn aber nun 4/1 gesucht wird, muss man 1+3+2+1 rechnen, und die funktion oben macht nicht anderes, bzw rekursiv.
es wird von der gewählten zeile nach unten immer die elementanzahl draufadiert.
wenn du willst kannst du noch ne funktion einbauen, ob die gewählte elementnr <= der zeilennr ist, aber das ist deine sache