Почему моя C-программа, которая должна выводить матрицу в степени n, выводит мою матрицу в степени 2 ^ n? - PullRequest
0 голосов
/ 14 октября 2018

Мой код должен принимать матрицу M и увеличивать ее до степени целого числа А. Однако, каким-то образом мой вывод всегда равен M ^ (2 ^ A).Например, если я хочу найти матрицу в 3-ей степени, я получу 8-ю степень.

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h>
  void multiply(int ** p, int pwr, int dim, int ** prod) {
    int m, i, j, k;
    /*if (n<pwr){*/
    int pos = 0;
    for (m = 0; m < pwr; m++) {
      for (i = 0; i < dim; i++) {
        for (j = 0; j < dim; j++) {
          for (k = 0; k < dim; k++) {
            pos += p[i][k] * p[k][j];
          }
          prod[i][j] = pos;
          pos = 0;
        }
      }
      for (i = 0; i < dim; i++) {
        for (j = 0; j < dim; j++) {
          p[i][j] = prod[i][j];
          prod[i][j] = 0;
        }
      }
    }
    /*n=n+1;
    multiply(prod, q, pwr, dim, prod);
    }*/
  }
int main(int argc, char * argv[]) {
  FILE * fp = fopen(argv[1], "r");
  int dim, pwr, i, j;
  fscanf(fp, "%d", & dim);
  int ** matrix;
  matrix = (int ** ) malloc(dim * sizeof(int * ));
  for (i = 0; i < dim; i++) {
    matrix[i] = (int * ) malloc(dim * sizeof(int));
  }
  int ** prod;
  prod = (int ** ) malloc(dim * sizeof(int * ));
  for (i = 0; i < dim; i++) {
    prod[i] = (int * ) malloc(dim * sizeof(int));
  }
  for (i = 0; i < dim; i++) {
    for (j = 0; j < dim; j++) {
      fscanf(fp, "%d", & matrix[i][j]);
    }
  }
  fscanf(fp, "%d", & pwr);
  if (pwr == 1) {
    for (i = 0; i < dim; i++) {
      for (j = 0; j < dim; j++) {
        printf("%d ", matrix[i][j]);
      }
      printf("\n");
    }
  } else if (pwr >= 2) {
    multiply(matrix, pwr, dim, prod);
    for (i = 0; i < dim; i++) {
      for (j = 0; j < dim; j++) {
        printf("%d ", matrix[i][j]);
      }
      printf("\n");
    }
  }
  return 0;
}

1 Ответ

0 голосов
/ 14 октября 2018

Вы умножаете свою матрицу на себя и затем сохраняете результат в исходной.Затем вы делаете это снова.

Так совершенно нормально, что он получает питание 8 раз.Вам нужна еще одна временная матрица, в которой вы сохраняете результат и сохраняете исходную матрицу для умножения вашего результата.

...