Nowe posty

Autor Wątek: redukcja 4wym macierzy do 2wym  (Przeczytany 3515 razy)

Gosik

  • Gość
redukcja 4wym macierzy do 2wym
« dnia: 2013-05-27, 21:19:23 »
Dzien dobry,

tak jak w temacie chcialabym zredukowac tablice 4wym do 2 wym.

W tym celu napisalam 2 funkcje:

void redukcja (int m, int &iar1, int &iar2, double *tt, double *&TT)
{
        iar1 = 0;
        iar2 = 0;

        for (int i = 0; i < m; i++)
        for (int j = 0; j < m; j++){
                iar1 = iar1 + 1;
                        for (int k = 0; k < m; k++)
                        for (int l = 0; l < m; l++){
                                iar2 = iar2 + 1;
                                        TT[iar1*m + iar2] = tt[i*m*m*m + j*m*m + k*m + l];
                        }
        }
}
void wyswietl(int &iar1, int &iar2, double *TT)
{
        for (int i = 0; i < iar1; i++)
                for (int j = 0; j < iar2; j++){
                        cout<<"TT1["<            }
}
Tablica tt ma nastepujaca postac:
tt[0][0][0][0]=2
tt[0][0][0][1]=3
tt[0][0][1][0]=5
tt[0][0][1][1]=4
tt[0][1][0][0]=6
tt[0][1][0][1]=2
tt[0][1][1][0]=33
tt[0][1][1][1]=4
tt[1][0][0][0]=2
tt[1][0][0][1]=4
tt[1][0][1][0]=6
tt[1][0][1][1]=2
tt[1][1][0][0]=1
tt[1][1][0][1]=2
tt[1][1][1][0]=3
tt[1][1][1][1]=4
tt[0][0][0][0]=5
tt[0][0][0][1]=6
tt[0][0][1][0]=7
tt[0][0][1][1]=8
tt[0][1][0][0]=3
tt[0][1][0][1]=5
tt[0][1][1][0]=6
tt[0][1][1][1]=7
tt[1][0][0][0]=4
tt[1][0][0][1]=36
tt[1][0][1][0]=4
tt[1][0][1][1]=8
tt[1][1][0][0]=75
tt[1][1][0][1]=3
tt[1][1][1][0]=3
tt[1][1][1][1]=55
a otrzymuje tablice TT:
TT1[0][0]=0
TT1[0][1]=0
TT1[0][2]=0
TT1[0][3]=2
TT1[0][4]=3
TT1[0][5]=5
TT1[0][6]=4
TT1[0][7]=0
TT1[0][8]=0
TT1[0][9]=6
TT1[0][10]=2
TT1[0][11]=33
TT1[0][12]=4
TT1[0][13]=0
TT1[0][14]=0
TT1[0][15]=2
TT1[1][0]=3
TT1[1][1]=5
TT1[1][2]=4
TT1[1][3]=0
TT1[1][4]=0
TT1[1][5]=6
TT1[1][6]=2
TT1[1][7]=33
TT1[1][8]=4
TT1[1][9]=0
TT1[1][10]=0
TT1[1][11]=2
TT1[1][12]=4
TT1[1][13]=6
TT1[1][14]=2
TT1[1][15]=0
TT1[2][0]=0
TT1[2][1]=6
TT1[2][2]=2
TT1[2][3]=33
TT1[2][4]=4
TT1[2][5]=0
TT1[2][6]=0
TT1[2][7]=2
TT1[2][8]=4
TT1[2][9]=6
TT1[2][10]=2
TT1[2][11]=0
TT1[2][12]=0
TT1[2][13]=1
TT1[2][14]=2
TT1[2][15]=3
TT1[3][0]=4
TT1[3][1]=0
TT1[3][2]=0
TT1[3][3]=2
TT1[3][4]=4
TT1[3][5]=6
TT1[3][6]=2
TT1[3][7]=0
TT1[3][8]=0
TT1[3][9]=1
TT1[3][10]=2
TT1[3][11]=3
TT1[3][12]=4
TT1[3][13]=0
TT1[3][14]=0
TT1[3][15]=0
Cos jest nie tak, ale chwilowo nie mam pomyslu jak to poprawic.
Czy moge liczyc pomoc? :)

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3070
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
redukcja 4wym macierzy do 2wym
« Odpowiedź #1 dnia: 2013-05-28, 09:19:18 »
Co ma robić redukcja, bo bez tego ani rusz... Dodatkowo, wierszy w tt jest jakby za dużo - duplikują się indeksy a wartości już nie.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Gosik

  • Gość
redukcja 4wym macierzy do 2wym
« Odpowiedź #2 dnia: 2013-05-29, 16:40:57 »
Troche poprawilam kod, ale jeszcze nie otrzymuje zadawalajacego efektu:

void redukcja (int m, int &iar1, int &iar2, double *tt, double *&TT)
{
        iar1 = -1;

        for (int i = 0; i < m; i++){
        iar2 = -1;
        for (int j = 0; j < m; j++){
                iar1++;
                        for (int k = 0; k < m; k++){
                        for (int l = 0; l < m; l++){
                                iar2++;
                                        TT[iar1*m + iar2] = tt[i*m*m*m + j*m*m + k*m + l];
                        }
                        }
        }
        }
}
void wyswietl2(int &iar1, int &iar2, double *TT)
{
        for (int i = 0; i < iar1; i++)
                for (int j = 0; j < iar2; j++){
                        cout<<"TT1["<            }
przy zalozeniu, ze m = 2;
chcialabym otrzymac tablice[4][8];

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3070
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
redukcja 4wym macierzy do 2wym
« Odpowiedź #3 dnia: 2013-05-30, 18:23:12 »
Łomatko, dalej nie wiemy, jak ma działać redukcja. Ale
* tt[2][2][2][2] ma 16 elementów
* TT[4][8] ma 32 elementy

To raczej rozdmuchanie niż redukcja...
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Gosik

  • Gość
redukcja 4wym macierzy do 2wym
« Odpowiedź #4 dnia: 2013-05-31, 13:41:00 »
Oczywiscie, ze pomylilam rozmiar macierzy!!! TT rowniez miala mien 16 elementow.
Szczesliwie udalo mi sie rozwiazac ten problem.

Bardzo dziekuje za wskaprcie i uwagi. :)

Pozdrawiam!