b11 = allocate_real_matrix(newTam, -1); b12 = allocate_real_matrix(newTam, -1); b21 = allocate_real_matrix(newTam, -1); b22 = allocate_real_matrix(newTam, -1);
c11 = allocate_real_matrix(newTam, -1); c12 = allocate_real_matrix(newTam, -1); c21 = allocate_real_matrix(newTam, -1); c22 = allocate_real_matrix(newTam, -1);
p1 = allocate_real_matrix(newTam, -1); p2 = allocate_real_matrix(newTam, -1); p3 = allocate_real_matrix(newTam, -1); p4 = allocate_real_matrix(newTam, -1); p5 = allocate_real_matrix(newTam, -1); p6 = allocate_real_matrix(newTam, -1); p7 = allocate_real_matrix(newTam, -1);
double **aResult = allocate_real_matrix(newTam, -1); double **bResult = allocate_real_matrix(newTam, -1);
int i, j;
//dzielenie macierzy na cztery podmacierze: for (i = 0; i < newTam; i++) { for (j = 0; j < newTam; j++) { a11[i][j] = a[i][j]; a12[i][j] = a[i][j + newTam]; a21[i][j] = a[i + newTam][j]; a22[i][j] = a[i + newTam][j + newTam];
b11[i][j] = b[i][j]; b12[i][j] = b[i][j + newTam]; b21[i][j] = b[i + newTam][j]; b22[i][j] = b[i + newTam][j + newTam];
//obliczanie macierzy od M1 do M7:
sum(a11, a22, aResult, newTam); // a11 + a22 sum(b11, b22, bResult, newTam); // b11 + b22 strassen(aResult, bResult, p1, newTam); // p1 = (a11+a22) * (b11+b22)