Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Moltiplicazione tra matrici
Forum - C/C++ - Moltiplicazione tra matrici

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
drewnik99 (Normal User)
Pro


Messaggi: 69
Iscritto: 28/03/2008

Segnala al moderatore
Postato alle 11:04
Martedì, 06/11/2012
Cerco di moltiplicare in modo ricorsivo, 16 matrici quadrate 8 x 8 di tipo char.

Ecco il codice:
Codice sorgente - presumibilmente C++

  1. signed char matrices_64[16][8][8] = {};
  2. signed char matrices_result[16][8][8] = {};
  3. signed long long int tmp_matrix;
  4.    
  5.     for(BYTE M = 0; M < 16; M++)
  6.     {
  7.     for (BYTE x = 0; x < 8; x++)
  8.     {
  9.     for (BYTE y = 0; y < 8; y++)
  10.     {
  11.     tmp_matrix = matrices_64[M][x][y];
  12.     for (BYTE m = 0; m < 16; m++)
  13.     {
  14.     for (BYTE i = 0; i < 8; i++)
  15.     {
  16.         tmp_matrix *= matrices_64[(M + m + 1) % 16][i][y];
  17.     }
  18.     tmp_matrix %= 256;
  19.     }
  20.     matrices_result[M][x][y] = tmp_matrix;
  21.     }
  22.     }
  23.     }



Penso sia corretto, ma mi piacerebbe esserne davvero sicuro.

Ultima modifica effettuata da drewnik99 il 06/11/2012 alle 14:08
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:19
Martedì, 06/11/2012
In modo ricorsivo? Dove sta la ricorsione?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
drewnik99 (Normal User)
Pro


Messaggi: 69
Iscritto: 28/03/2008

Segnala al moderatore
Postato alle 11:23
Martedì, 06/11/2012
Non indico tutte le matrici, ma effettuo la moltiplicazione di due matrici e questo valore viene utilizzato dal ciclo successivo per la moltiplicazione delle prime due con la terza e così via.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:40
Martedì, 06/11/2012
Il concetto di ricorsione è un altro, non c'entra nulla con quanto dici.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
drewnik99 (Normal User)
Pro


Messaggi: 69
Iscritto: 28/03/2008

Segnala al moderatore
Postato alle 12:18
Martedì, 06/11/2012
Capisco, che cosa ne pensi del codice?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:43
Martedì, 06/11/2012
Mi sembra, a dir poco, confuso.

Prima di tutto, in questa linea

tmp_matrix = matrices_64[M][x];

c'è la variabile i che non si capisce da dove venga (e quindi non dovrebbe neanche compilare) ma, soprattutto, non ho capito quale algoritmo hai usato per moltiplicare le matrici.

Per "moltiplicare" matrici cosa intendi tu? Ad esempio, due matrici 3x3 come le moltiplichi?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
drewnik99 (Normal User)
Pro


Messaggi: 69
Iscritto: 28/03/2008

Segnala al moderatore
Postato alle 14:11
Martedì, 06/11/2012
Corretto.

Gli elementi di una matrice prodotto di due matrici sono uguali alla somme dei prodotti degli elementi appartenenti alla riga n della prima matrice per gli elementi appartenenti all colonna n della seconda matrice.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:45
Martedì, 06/11/2012
Testo quotato

Postato originariamente da drewnik99:
... uguali alla somme ...



E queste somme dove sono nel tuo codice ??

E a cosa serve questa operazione

tmp_matrix %= 256;

con il singolo valore degli elementi delle matrici ??



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
drewnik99 (Normal User)
Pro


Messaggi: 69
Iscritto: 28/03/2008

Segnala al moderatore
Postato alle 15:03
Martedì, 06/11/2012
Si, in effetti ho notato che moltiplico senza sommare.
Qualche sugggerimento per la correzione del codice?
Penso che sia anche possibile riuscire a non utilizzare una variabile d'appoggio, ma al momento non mi veniva in mente altro.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo