Матрицы

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

  1. Alston

    Alston Гость

    Нужна помощь
     

    Вложения:

    • c.jpg
      c.jpg
      Размер файла:
      15,1 КБ
      Просмотров:
      41
    • c.jpg
      c.jpg
      Размер файла:
      15,1 КБ
      Просмотров:
      42
  2. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    А сделать то что нужно??? :)))))
    Задание бы хоть напечатал ;))))
     
  3. Alston

    Alston Гость

    С клавиатури задание матрицы A[n][n] B[n][n]. Вычеслить С.
     
  4. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    А чем пользоваться можно? Чистым C, или C и Stl?
     
  5. Alston

    Alston Гость

    Чыстим С++ Builder 6.0
     
  6. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Ок... Alston... Щас синий в хламину... Завтра напишу обязательньо....
    Так что зайти через часов 12-15 все будет... Обещаю... Если конечно кто-нить другой не навояет....
     
  7. Alston

    Alston Гость

  8. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Ну вот так как то это будет выглядить..
    Коментировать особо времени не было, если что не понятно будет пиши....
    Ну и реализацию функций-членов_класса писал прямо в классе, немного плохо читаемо

    Код (C++):
    #include <iostream>
    using namespace std;

    class TMatrix //Класс Матрица (квадратная)
    {
    public:
    int Size; //размер матрицы
    int **Value; //Значения матрицы


    TMatrix (int n,int def = 0) //Конструктор n- размер, def - значение всех элементов по умолчанию
    {
    Size = n;
    Value = new int*[n];
    for (int i = 0; i<n;i++)
    {
    Value[i] = new int[n];
    for (int j=0; j<n; j++)
    {
    Value[i][j]=def;
    }
    }
    }

    TMatrix Transp() //Функция транспонирования матрицы
    {
    TMatrix Temp(this->Size);
    Temp = *this;
    for (int i = 0; i < Size; i++)
    {
    for (int j=0; j < Size; j++)
    {
    Temp.Value[j][i] = this->Value[i][j];
    }
    }
    return Temp;
    }
    friend ostream& operator << (ostream& out, const TMatrix &Matrix) //Дружественная перегруженная функция ostream, для вывода на экран
    {
    for (int i=0; i<Matrix.Size; i++)
    {
    for (int j=0; j<Matrix.Size; j++)
    {
    out<<Matrix.Value[i][j];
    out<<'\t';
    }
    out<<endl;
    }
    return out;
    }

    friend istream& operator >> (istream& in, const TMatrix &Matrix) //Дружественная перегруженная функция istream, для ввода с клавиатуры
    {
    cout<<"Input Matrix["<<Matrix.Size<<","<<Matrix.Size<<"] :"<<endl;
    for (int i=0; i<Matrix.Size; i++)
    {
    for (int j=0; j<Matrix.Size; j++)
    {
    cout<<"Matrix["<<i<<","<<j<<"] = ";
    in>>Matrix.Value[i][j];
    }

    }
    return in;
    }

    TMatrix& operator = (TMatrix& A) //Перегруженный оператор присваивания
    {
    for (int i = 0; i < this->Size; i++)
    {
    delete[] this->Value[i];
    }
    delete[] this->Value;

    this->Value = new int*[A.Size];
    for (int i =0; i<A.Size; i++)
    {
    this->Value[i] = new int[A.Size];
    for (int j=0; j<A.Size; j++)
    {
    this->Value[i][j] = A.Value[i][j];
    }
    }
    this->Size = A.Size;

    return *this;
    }


    friend TMatrix& operator * (int A, TMatrix& B) //Перегруженный оператор произведения (int)*(TMatrix)
    {
    for (int i=0; i < B.Size; i++)
    {
    for (int j=0; j < B.Size; j++)
    {
    B.Value[i][j] = B.Value[i][j] * A;
    }
    }

    return B;
    }

    friend TMatrix& operator * (TMatrix& B, int A) //Перегруженный оператор произведения (TMatrix) * (int)
    {
    return A*B;
    }

    TMatrix& operator * (TMatrix& A) //Перегруженный оператор произведения двух матриц
    {
    TMatrix *Error = new TMatrix(0);
    if (A.Size != this->Size)
    {
    cout<<"Error! Size not eq";
    return *Error;
    }

    TMatrix *Result = new TMatrix(this->Size);

    for (int i =0; i < this->Size; i++)
    {
    for (int j=0; j < this->Size; j++)
    {
    int Sum = 0;
    for (int z = 0; z < this ->Size; z++)
    {
    Sum += this->Value[i][z] * A.Value[z][j];
    }

    Result->Value[i][j] = Sum;
    }
    }

    return *Result;
    }

    TMatrix& operator - (TMatrix& A) //Перегруженный оператор разности матриц
    {
    TMatrix *Error = new TMatrix(0);
    if (A.Size != this->Size)
    {
    cout<<"Error! Size not eq";
    return *Error;
    }

    TMatrix *Result = new TMatrix(this->Size);

    for (int i =0; i < this->Size; i++)
    {
    for (int j=0; j < this->Size; j++)
    {          
    Result->Value[i][j] = this->Value[i][j] - A.Value[i][j];
    }
    }

    return *Result;
    }

    TMatrix Sqr(void)
    {
    return (*this * *this);
    }


    };


    void main (void)
    {
    int SizeMatrix;
    cout<<"Input Size Matrix = ";
    cin>>SizeMatrix;

    TMatrix A(SizeMatrix);
    cout<<endl<<"Input A: ";
    cin>>A;

    TMatrix B(SizeMatrix);
    cout<<endl<<"Input B: ";
    cin>>B;

    //А вот реализация твоего примера
    TMatrix C(SizeMatrix);
    C = (A.Transp()*B - 3*B.Sqr())*B;
    cout<<C;

    }
     
  9. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Так попроще читать
    Код (C++):
    #include <iostream>
    using namespace std;

    class TMatrix //Класс Матрица (квадратная)
    {
    private:
    int Size; //размер матрицы
    int **Value; //Значения матрицы

    public:
    TMatrix (int n,int def = 0) //Конструктор n- размер, def - значение всех элементов по умолчанию
    {
    Size = n;
    Value = new int*[n];
    for (int i = 0; i<n;i++)
    {
    Value[i] = new int[n];
    for (int j=0; j<n; j++)
    {
    Value[i][j]=def;
    }
    }
    }

    TMatrix Transp(void); //Прототип Функции транспанирования матрицы
    friend ostream& operator << (ostream&,const TMatrix&);
    friend istream& operator >> (istream&,const TMatrix&);

    TMatrix& operator = (TMatrix&); //Перегруженный оператор присваивания
    TMatrix& operator * (TMatrix&); //Перегруженный оператор произведения двух матриц
    TMatrix& operator - (TMatrix&); //Перегруженный оператор разности матриц
    TMatrix& operator + (TMatrix&); //Перегруженный оператор суммы матриц


    friend TMatrix& operator * (int, TMatrix&); //Перегруженный оператор произведения (int)*(TMatrix)
    friend TMatrix& operator * (TMatrix&, int); //Перегруженный оператор произведения (TMatrix) * (int)

    TMatrix Sqr(void); //Функция возведения в квадрат матрицы
    int GetSize(void); //Функция получения размера матрицы

    };

    //Функция транспанирования матрицы
    TMatrix TMatrix::Transp(void)
    {
    TMatrix Temp(this->Size);
    Temp = *this;
    for (int i = 0; i < Size; i++)
    {
    for (int j=0; j < Size; j++)
    {
    Temp.Value[j][i] = this->Value[i][j];
    }
    }
    return Temp;
    }

    //Перезагруженый оператор потокового вывода
    ostream& operator << (ostream& out, const TMatrix &Matrix) //Дружественная перегруженная функция ostream, для вывода на экран
    {
    for (int i=0; i<Matrix.Size; i++)
    {
    for (int j=0; j<Matrix.Size; j++)
    {
    out<<Matrix.Value[i][j];
    out<<'\t';
    }
    out<<endl;
    }
    return out;
    }

    //Перезагруженый оператор потокового ввода
    istream& operator >> (istream& in, const TMatrix &Matrix) //Дружественная перегруженная функция istream, для ввода с клавиатуры
    {
    cout<<"Input Matrix["<<Matrix.Size<<","<<Matrix.Size<<"] :"<<endl;
    for (int i=0; i<Matrix.Size; i++)
    {
    for (int j=0; j<Matrix.Size; j++)
    {
    cout<<"Matrix["<<i<<","<<j<<"] = ";
    in>>Matrix.Value[i][j];
    }  
    }
    return in;
    }

    //Перезагруженый оператор присваивания Матрица = Матрица
    TMatrix& TMatrix::operator = (TMatrix& A) //Перегруженный оператор присваивания
    {
    for (int i = 0; i < this->Size; i++)
    {
    delete[] this->Value[i];
    }
    delete[] this->Value;
    this->Value = new int*[A.Size];
    for (int i =0; i<A.Size; i++)
    {
    this->Value[i] = new int[A.Size];
    for (int j=0; j<A.Size; j++)
    {
    this->Value[i][j] = A.Value[i][j];
    }
    }
    this->Size = A.Size;
    return *this;
    }

    //Перегруженный оператор произведения (int)*(TMatrix)
    TMatrix& operator * (int A, TMatrix& B)
    {
    for (int i=0; i < B.Size; i++)
    {
    for (int j=0; j < B.Size; j++)
    {
    B.Value[i][j] = B.Value[i][j] * A;
    }
    }
    return B;
    }

    //Перегруженный оператор произведения (TMatrix) * (int)
    TMatrix& operator * (TMatrix& B, int A)
    {
    return A*B;
    }

    //Перегруженный оператор произведения двух матриц
    TMatrix& TMatrix::operator * (TMatrix& A) //Перегруженный оператор произведения двух матриц
    {
    TMatrix *Error = new TMatrix(0);
    if (A.Size != this->Size)
    {
    cout<<"Error! Size not eq";
    return *Error;
    }

    TMatrix *Result = new TMatrix(this->Size);
    for (int i =0; i < this->Size; i++)
    {
    for (int j=0; j < this->Size; j++)
    {
    int Sum = 0;
    for (int z = 0; z < this ->Size; z++)
    {
    Sum += this->Value[i][z] * A.Value[z][j];
    }
    Result->Value[i][j] = Sum;
    }
    }
    return *Result;
    }

    //Перегруженный оператор разности матриц
    TMatrix& TMatrix::operator - (TMatrix& A) //Перегруженный оператор разности матриц
    {
    TMatrix *Error = new TMatrix(0);
    if (A.Size != this->Size)
    {
    cout<<"Error! Size not eq";
    return *Error;
    }

    TMatrix *Result = new TMatrix(this->Size);

    for (int i =0; i < this->Size; i++)
    {
    for (int j=0; j < this->Size; j++)
    {          
    Result->Value[i][j] = this->Value[i][j] - A.Value[i][j];
    }
    }
    return *Result;
    }

    //Перегруженный оператор суммы матриц
    TMatrix& TMatrix::operator + (TMatrix& A) //Перегруженный оператор суммы матриц
    {
    TMatrix *Error = new TMatrix(0);
    if (A.Size != this->Size)
    {
    cout<<"Error! Size not eq";
    return *Error;
    }

    TMatrix *Result = new TMatrix(this->Size);

    for (int i =0; i < this->Size; i++)
    {
    for (int j=0; j < this->Size; j++)
    {          
    Result->Value[i][j] = this->Value[i][j] + A.Value[i][j];
    }
    }
    return *Result;
    }

    //Функция возведения в квадрат матрицы
    TMatrix TMatrix::Sqr(void) //Функция квадрата матрицы
    {
    return (*this * *this);
    }

    //Функция получения размера квадратной матрицы
    int TMatrix::GetSize(void)
    {
    return this->Size;
    }


    //Главная функция программы
    void main (void)
    {
    int SizeMatrix; //Переменная размера матриц с которыми будем работать
    cout<<"Input Size Matrix = ";
    cin>>SizeMatrix; //Введем эту переменную

    TMatrix A(SizeMatrix); //Создадим объект-класса
    cout<<endl<<"Input A: ";
    cin>>A; //Заполним его с клавиатуры

    TMatrix B(SizeMatrix); //Создадим еще один объект-класса
    cout<<endl<<"Input B: ";
    cin>>B; //Так же заполним

    //А вот реализация твоего примера
    TMatrix C(SizeMatrix); //Создадим третий объект-класса в который и поместим результат
    C = (A.Transp()*B - 3*B.Sqr())*B;
    cout<<C; //Выведим результат в консоль

    }
     
  10. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Если будешь использовать оконный вариант...
    Например матрицу заполнять в TGrid
    то добавишь в класс функцию примерно такую
    int& TMatrix::SetValue(int i, int j)
    {
    return this->Value[j];
    }
    и можешь заполнять тогда элементы так
    TMatrix A(5);
    A.SetValue(1,2) = StrToInt(StringGrid1->Cells[1][2]);
     
Загрузка...
Похожие Темы - Матрицы
  1. Dantes95
    Ответов:
    0
    Просмотров:
    1.014
  2. kobrin13
    Ответов:
    0
    Просмотров:
    1.033
  3. FCDK
    Ответов:
    0
    Просмотров:
    1.264
  4. PahaStar
    Ответов:
    0
    Просмотров:
    1.077
  5. Evgesha777
    Ответов:
    1
    Просмотров:
    1.399

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