void power(int a[][21], int n, int d) {
int e[21][21], k, i, j, l;
if (d == 1) {
for (i = 1; i <= n; i++) {
for (j = 1; j <= n; j++)
cout << a[i][j] << " ";
cout << endl;
}
} else {
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
e[i][j] = 0;
for (l = 1; l < d; l++)
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
for (k = 1; k <= n; k++)
e[i][j] = e[i][j] + (a[i][k] * a[k][j]);
for (i = 1; i <= n; i++) {
for (j = 1; j <= n; j++)
cout << e[i][j] << " ";
cout << endl;
}
}
}
Я пытаюсь построить функцию, которая вычисляет мощность матрицы. Программа работает для 1-го и 2-го уровней матрицы, но если я хочу рассчитать 3-ю степень, функция вернет неправильные значения. Я думаю, проблема заключается в сохранении предыдущих результатов, но я не могу понять, как это исправить.Матричное умножение - C++
_ "но я не могу понять, как это исправить" _ Легко. Вы используете отладчик, переходите через свой код по строкам и проверяете, как изменяются значения. Если вы обнаружили место, где значения меняются неожиданным образом, вы поймали источник своей логической ошибки. Разве это не чудесно? –
Почему вы перебираете индекс 1 в каждом цикле? – LogicStuff
Для полномочий после 2 вы по-прежнему используете только значения из 'a', а не также включаете результаты из' e'. Следуйте советам @ πάνταῥεῖ по отладке; это требует, чтобы вы знали, как ожидается изменение значений, поэтому вы должны начать с разработки (на бумаге), как вы ожидаете, что вычисление будет продолжено. Скорее всего, это упражнение покажет, как ваш код не использует предыдущие результаты (как вы говорите). –