//-------- matrix.cpp ---------


#pragma hdrstop
#include <condefs.h>
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <conio.h>

//---------------------------------------------------------------------------
#pragma argsused
void MultiplyMatrix();

int ROWS;
int M1[40][40];
int M2[40][40];

int main()
{
    fstream fin("matrix.txt", ios::in);
    char input;
    fin.get(input);
    ROWS = 0;
    while(input != '\n')
    {
        ROWS++;
        fin.get(input);
    }
    fin.seekg(0);

    fin.get(input);
    for(int Row=0; !fin.eof(); Row++)
    {
        for(int Col=0; !fin.eof(); Col++)
        {
            M1[Row][Col] = atoi(&input);
            M2[Row][Col] = atoi(&input);
            //cout << input << " ";
            fin.get(input);
            if(input=='\n')
                break;
        }
        cout << endl;
        fin.get(input);
    }

    int power;
    cout << "Raise matrix to what power? ";
    cin >> power;

    for(int i=1; i<power; i++)
        MultiplyMatrix();

    for(int i=0; i<ROWS; i++)     //ouput matrix to screen
    {
        for(int j=0; j<ROWS; j++)
        {
            cout << M2[i][j] << " ";
        }
        cout << endl;
    }
    getch();
    return 0;
}

void MultiplyMatrix()
{
    int C[40][40];
    for(int i= 0; i <ROWS; i++)
    {
        for(int j = 0; j < ROWS; j++)
        {
            C[i][j] = 0;
            for(int k = 0; k < ROWS; k++)
                C[i][j] = C[i][j] + M1[i][k] * M2[k][j];  //Mulitiply M1 & M2
        }
    }

    //Copy C matrix to M2
    for(int i=0; i<ROWS; i++)
    {
        for(int j=0; j<ROWS; j++)
            M2[i][j] = C[i][j];
    }
}