Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> (C++)матрица, класс для работы с матрицами 
:(
    Опции темы
Natalka
Дата 11.12.2006, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 7.12.2006
Где: Днепродзержинск

Репутация: нет
Всего: нет



Здравствуйте!
Может,кто поможет мне написать само объявление класса и конструктор по умолчанию для класса работы с матрицами:

#include "stdafx.h"
#include <ctime>
using namespace std;
class Matrica
{
    int **a;

а дальше как ?

Мне нужно создать самый простой класс для работы с мат
PM MAIL WWW   Вверх
zabivator
Дата 11.12.2006, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



Natalka, можно так:
Код

#include <vector>
class Matrix
{
public:
Matrix() {}
Matrix( unsigned x, unsigned y )
{
   m_value.resize(x);
  for ( unsigned i = 0; i < x; ++i )
  {
     m_value[i].resize(y);
     for ( unsigned k = 0; k < y; ++k )
        m_value[i][k] = 0;
  }
}
Matrix( const Matrix& matrix ) : m_value(matrix) {}
~Matrix() {}
private:
 std::vector< std::vector<int> > m_value;
};

используя stl огребешь меньше граблей с массивами
Если хочешь, могу щас полную реализацию накидать, при использовании стандартной библиотеки она элементарна.
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
Natalka
Дата 11.12.2006, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 7.12.2006
Где: Днепродзержинск

Репутация: нет
Всего: нет



vector
не надо, просто нужен самый простой класс для работы с матрицами 

Создать класс для работы с матрицами. Предусмотреть, как минимум, функции для сложения матриц, умножения матриц, транспонирования матриц, присваивания матриц друг другу, установка и получение произвольного элемента матрицы. Необходимо перегрузить соответствующие операторы
PM MAIL WWW   Вверх
zabivator
Дата 11.12.2006, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



Natalka, самый простой в реализации - с использованием stl( т.е. с использованием vector )
самый эффективный в реализации - с ручным управлением памятью/указателями.
Так тебе какой?

Это сообщение отредактировал(а) zabivator - 11.12.2006, 01:12
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
Natalka
Дата 11.12.2006, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 7.12.2006
Где: Днепродзержинск

Репутация: нет
Всего: нет



Вот именно с указателями мне и нужен


#include "stdafx.h"
#include <ctime>
using namespace std;
class Matrica
{
    int **a;


PM MAIL WWW   Вверх
zabivator
Дата 11.12.2006, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



Natalka, извини, но если ты хочешь освоить язык - напиши реализацию сама. Как получится что-то рабочее - кидай ее сюда, мы поправим, объясним "темные" места. А иначе ты язык не освоишь. Непонятны совсем базовые вещи - читай книжки. Все так учились. И я тоже. 
Если тебе просто нужно сделать задачку - уволь, благотворительностью не занимаюсь.

--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
Natalka
Дата 11.12.2006, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 7.12.2006
Где: Днепродзержинск

Репутация: нет
Всего: нет



Мне не нужна вся задача,а просто что-то с начальным вводом не получается,именно с указателями,а все остальное я могу сделать сама
PM MAIL WWW   Вверх
zabivator
Дата 11.12.2006, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



Natalka, в смысле, с конструкторами?
Код

class Matrix
{
public:
   Matrix( unsigned width = 0, unsigned height = 0 ) : m_width(width), m_height(height)
   {
       m_value = new int*[m_width];
       for ( unsigned i = 0; i < m_width; ++i )
       {
          m_value[i] = new int[height];
          for ( unsigned k = 0; k < m_height; ++k )
             a[i][k]=0;
       }
   }
   Matrix( const Matrix &matrix ) : m_width( matrix.m_width), m_height(matrix.m_height)
   {
       m_value = new int*[m_width];
       for ( unsigned i = 0; i < m_width; ++i )
       {
          m_value[i] = new int[height];
          for ( unsigned k = 0; k < m_height; ++k )
             a[i][k] = matrix.m_value[i][k];
       }
   }
   Matrix& operator=( const Matrix &matrix )
   {
       if ( this != &matrix )
       {
          for ( unsigned i = 0; i < m_width; i++ )
             delete [] m_value[i];
          delete [] m_value;
          m_width = matrix.m_width;
          m_height = matrix.m_height;
          m_value = new int*[m_width];
          for ( unsigned i = 0; i < m_width; ++i )
          {
             m_value[i] = new int[height];
             for ( unsigned k = 0; k < m_height; ++k )
                a[i][k] = matrix.m_value[i][k];
          }          
       }
       return *this;
   }
   ~Matrix()
   {
       for ( unsigned i = 0; i < m_width; i++ )
          delete [] m_value[i];
       delete [] m_value;       
   }
private:
   int ** m_value;
   unsigned m_width,m_height;
}


Это сообщение отредактировал(а) zabivator - 11.12.2006, 02:29
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
archimed7592
Дата 11.12.2006, 02:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Natalka, держи, разбирайся...
Код
#include <iostream>
#include <ostream>
#include <istream>

class M
{
    double *m_;
    int w_;
    int h_;
public:
    class V // вспомогательный класс
    {
        friend class M;
        V ();
        V (const V &rhs) : v_ (rhs.v_) {};
        V &operator = (const V &);

        V (double *v) : v_ (v) {};

        double *v_;
        public:
            ~V () {};
            double &operator [] (int index)
            {
                return v_ [index];
            };
    };
    M ()
    {
        //...
    };
    M (const M &rhs)
    {
        // конструирование копии матрицы rhs
        // ...
    };
    M &operator = (const M &rhs)
    {
        this->~M ();
        new (this) M (rhs);

        return *this;
    };
    M (int h, int w)
        : w_ (w), h_ (h), m_ (new double [w * h])
    {
        // ...
    };
    ~M ()
    {
        delete m_;
    };
    V operator [] (int index)
    {
        // получение произвольного эл-та
        return V (m_ + index * w_);
    };

    M &operator += (const M &rhs)
    {
        // сложение
        // ...

        return *this;
    };

    M operator + (const M &rhs)
    {
        M temp = *this;
        temp += rhs;

        return temp;
    };

    M &operator -= (const M &rhs)
    {
        // вычитание
        // ...

        return *this;
    };

    M operator - (const M &rhs)
    {
        M temp = *this;
        temp += rhs;

        return temp;
    };

    M &operator *= (const M &rhs)
    {
        // умножение матриц
        // ...

        return *this;
    };

    M operator * (const M &rhs)
    {
        M temp = *this;
        temp *= rhs;

        return temp;
    };

    M &operator *= (double rhs)
    {
        // умножение матрицы на число
        // ...

        return *this;
    };

    M operator * (double rhs)
    {
        M temp = *this;
        temp *= rhs;

        return temp;
    };

    M operator - ()
    {
        // умножение на -1

        return (*this) * double (-1);
    };

    M operator ~ ()
    {
        // пусть ~ будет транспонированием :)
        M temp /* ( ... ) */;
        
        // ...

        return temp;
    };

    // ну и конечно же
    friend std::ostream &operator << (std::ostream &stream, const M &rhs)
    {
        // ...

        return stream;
    };
    friend std::istream &operator >> (std::istream &stream, const M &rhs)
    {
        // ...

        return stream;
    };
};

int main()
{
    M m1 (3, 5);
    M m2 = m1;
    M m3;
    m3 = m2;
    M m4 = ~m2;
    M m5 = m3 + m1;
    M m6 = m4 * 2;
    M m7 = m5 * m6;
    double d = m1 [1][2];

    M m;
    std::cin >> m;
    // ...
    std::cout << m << std::endl;

    return 0;
}



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Natalka
Дата 11.12.2006, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 7.12.2006
Где: Днепродзержинск

Репутация: нет
Всего: нет



А , я просто упускала  в конструкторе
m_value = new int*[m_width];

Спасибо это мне было и нужно узнать,  извини,я же только учусь




PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0502 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.