C++ Как Возвести Матрицу В Степень N ?

Тема в разделе "Общие вопросы по С и С++", создана пользователем proef, 13 окт 2013.

  1. proef

    proef New Member

    Регистрация:
    13 окт 2013
    Сообщения:
    1
    Симпатии:
    0
    так работает только первые три значения
    вот код полностью
    Код (C++):
    // ConsoleApplication68.cpp: определяет точку входа для консольного приложения.
    //


    #include "stdafx.h"
    #include <iostream>
    #include <locale.h>
    #include <math.h>

    class Matrix
    {protected:
    float **InitMatrix;
    int ISizeOfMatrix;
    int JSizeOfMatrix;
    public:
    /*ввод*/  friend std::istream &operator>>(std::istream &Stream,Matrix &a)  
    {
    for (int NumberI = 0;NumberI<a.ISizeOfMatrix;NumberI++){
    for (int NumberJ = 0;NumberJ<a.JSizeOfMatrix;NumberJ++){
    std::cout<<"["<<NumberI<<"]"<<"["<<NumberJ<<"] = ";
    Stream>>a.InitMatrix[NumberI][NumberJ];
    }


    }
    std::cout<<"______________________________"<<std::endl;
    return Stream;

    }
    /*вывод*/ friend std::ostream &operator<<(std::ostream &Stream,Matrix &a)
    {
    for (int NumberI = 0;NumberI<a.ISizeOfMatrix;NumberI++)
    {
    for (int NumberJ = 0;NumberJ<a.JSizeOfMatrix;NumberJ++)
    {
    std::cout<<"["<<NumberI<<"]"<<"["<<NumberJ<<"] = ";
    Stream<<a.InitMatrix[NumberI][NumberJ];
    }
    Stream<<std::endl;

    }
    Stream<<"______________________________"<<std::endl;
    return Stream;
    }
    /*конструктор*/                           Matrix(int SizeI ,int SizeJ)
    {    
    ISizeOfMatrix = SizeI;
    JSizeOfMatrix = SizeJ;
    InitMatrix = new float*[ISizeOfMatrix];
    for (int Number = 0;Number<ISizeOfMatrix;Number++)
    {
    InitMatrix[Number] = new float[JSizeOfMatrix];
    }
    }
    /*деструктор*/                                                 ~Matrix()
    {
    delete[] this->InitMatrix;
    }
    /*+*/                                Matrix& operator+(Matrix &Element)
    {
    std::cout<<"сложение"<<std::endl;

    if((this->ISizeOfMatrix != Element.ISizeOfMatrix) ||(this->JSizeOfMatrix != Element.JSizeOfMatrix)){
    std::cout << "Different sizes" << std::endl;
    return *this;}else {

    for (int NumberI = 0;NumberI<this->ISizeOfMatrix; NumberI++){
    for (int NumberJ = 0;NumberJ<this->JSizeOfMatrix;NumberJ++){
    this->InitMatrix[NumberI][NumberJ] += Element.InitMatrix[NumberI][NumberJ];
    }
    }
    return *this;
    }

    }
    /*возведение в степень*/                    Matrix & operator()(int Degree)
    { std::cout<<"возведение в степень"<<std::endl;
    if (this->ISizeOfMatrix !=this->JSizeOfMatrix){ std::cout<<"матрица не квадратная"<<std::endl;return *this;}
    else
    { int I,J,K; float e = 0.0;
    //for (int CurrDegr = 0;CurrDegr<Degree;CurrDegr++){
    for ( I = 0;I<ISizeOfMatrix;I++)
    {e = 0.0;
    for ( J = 0;J<ISizeOfMatrix;J++){
    e = 0.0;
    for ( K= 0;K<ISizeOfMatrix;K++)
    e += InitMatrix[J][K]*InitMatrix[K][J];





    InitMatrix[I][J] = e;
    }



    }
    return *this;
    }
    }
    /*приравнивание*/                    Matrix& operator=(Matrix &Element)
    {
    for (int NumberI = 0;NumberI<this->ISizeOfMatrix;NumberI++){
    for (int NumberJ = 0;NumberJ<this->JSizeOfMatrix;NumberJ++)
    {InitMatrix[NumberI][NumberJ] = Element.InitMatrix[NumberI][NumberJ];}}
    return *this;}
    /*обращение по индексу*/          float &operator()(int SizeI,int SizeJ){ return this->InitMatrix[SizeI][SizeJ];}
    };

    int main(int argCount , char** arguments)
    {
    setlocale(2,"rus");
    Matrix a(3,3);
    std::cout<<"матрица A"<<std::endl;
    std::cin>>a;
    std::cout<<a;
    Matrix b(3,3);
    std::cout<<"Матрица В"<<std::endl;
    std::cin>>b;
    std::cout<<"a(1,0)+b(1,0) =";
    float q = a(1,0)+b(1,0); std::cout<<q<<std::endl;
    a(2);
    std::cout<<a;
    std::cout<<a+b;

    system("pause");
    return 0;
    }
     
Загрузка...

Поделиться этой страницей