Witam. Jestem początkującym programistą. Bardzo początkującym. :)
Za zadanie mam napisać program z potęgowaniem macierzy.
Niby coś starałem się napisać i myślałem, że ma to ręce i nogi, ale niestety mam nieprawidłowe wyniki.
Może ktoś zerknąć?
#include <iostream>
using namespace std;
int main()
{
int n, p, y;
cout << "To program do potegowania macierzy!\n\nPodaj wymiar macierzy kwadratowej(maksymalnie 5): " << endl;
cin >> n;
double macierz[5][5];
for (int j = 0; j < n ; j++)
for (int i = 0; i < n ; i ++)
{
cout << "Podaj wartosc liczby zapisanej w " << j+1 << "wierszu i " << i+1 << "kolumnie." << endl;
cin >> macierz[j][i];
}
cout << "Oto podana macierz:" << endl;
for (int j = 0; j < n ; j++)
{
for (int i = 0; i < n ; i ++)
{
cout << macierz[j][i] <<"\t\t" ;
}
cout << endl;
}
cout << "Ktora potege tej macierzy chcesz wyznaczyc?" << endl;
cin >> p;
double potega1[5][5];
double potega2[5][5];
double s;
for (int j = 0; j < n ; j++)
{
for (int i = 0; i < n ; i ++)
{
for (int k = 0; k<n; k++) s += macierz[j][k] * macierz[k][i];
potega1[j][i] = s;
}
}
s=0;
y=2;
while (y <= p)
{
if (y%2==0)
{
for (int j = 0; j < n ; j++)
{
for (int i = 0; i < n ; i ++)
{
for (int k = 0; k<n; k++) s += potega1[j][k] * macierz[k][i];
potega2[j][i] = s;
}
}
s=0;
}
else
{
for (int j = 0; j < n ; j++)
{
for (int i = 0; i < n ; i ++)
{
for (int k = 0; k<n; k++) s += potega2[j][k] * macierz[k][i];
potega1[j][i] = s;
}
}
s=0;
}
y++;
}
cout << "\n\nOto wynik potegowania:" << endl;
if (y%2==0)
{
for (int j = 0; j < n ; j++)
{
for (int i = 0; i < n ; i ++)
{
cout << potega2[j][i]<<"\t\t" ;
}
cout << endl;
}
}
else
{
for (int j = 0; j < n ; j++)
{
for (int i = 0; i < n ; i ++)
{
cout << potega1[j][i]<<"\t\t" ;
}
cout << endl;
}
}
return 0;
}
Wiem, że ten kod to pewnie dla większości sieczka, ale tak do tego potęgowania umiałem tylko podejść.
edit: zmieniłem kod o 22:59.