1. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

Матрицы

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

  1. Alston

    Alston Гость

    Репутация:
    0
    Нужна помощь
     

    Вложения:

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

    DarkKnight Well-Known Member

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

    Alston Гость

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

    DarkKnight Well-Known Member

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

    Alston Гость

    Репутация:
    0
    Чыстим С++ Builder 6.0
     
  6. DarkKnight

    DarkKnight Well-Known Member

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

    Alston Гость

    Репутация:
    0
  8. DarkKnight

    DarkKnight Well-Known Member

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

    Код:
    #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

    Репутация:
    0
    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Так попроще читать
    Код:
    #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

    Репутация:
    0
    Регистрация:
    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.467
  2. kobrin13
    Ответов:
    0
    Просмотров:
    1.170
  3. FCDK
    Ответов:
    0
    Просмотров:
    1.401
  4. PahaStar
    Ответов:
    0
    Просмотров:
    1.186
  5. Evgesha777
    Ответов:
    1
    Просмотров:
    1.503

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