//grupowanie wyników w jedną macierz: for (i = 0; i < newTam ; i++) { for (j = 0 ; j < newTam ; j++) { c[i][j] = c11[i][j]; c[i][j + newTam] = c12[i][j]; c[i + newTam][j] = c21[i][j]; c[i + newTam][j + newTam] = c22[i][j];
//dealokacja pamięci: a11 = free_real_matrix(a11, newTam); a12 = free_real_matrix(a12, newTam); a21 = free_real_matrix(a21, newTam); a22 = free_real_matrix(a22, newTam);
b11 = free_real_matrix(b11, newTam); b12 = free_real_matrix(b12, newTam); b21 = free_real_matrix(b21, newTam); b22 = free_real_matrix(b22, newTam);
c11 = free_real_matrix(c11, newTam); c12 = free_real_matrix(c12, newTam); c21 = free_real_matrix(c21, newTam); c22 = free_real_matrix(c22, newTam);
p1 = free_real_matrix(p1, newTam); p2 = free_real_matrix(p2, newTam); p3 = free_real_matrix(p3, newTam); p4 = free_real_matrix(p4, newTam); p5 = free_real_matrix(p5, newTam); p6 = free_real_matrix(p6, newTam); p7 = free_real_matrix(p7, newTam); aResult = free_real_matrix(aResult, newTam); bResult = free_real_matrix(bResult, newTam); } //koniec przypadku else
} //koniec funkcji Strassen
/*------------------------------------------------------------------------------*/ //funkcja sumująca dwie macierze void sum(double **a, double **b, double **result, int tam) {
int i, j;