Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/30: Рейтинг темы: голосов - 30, средняя оценка - 4.53
ЧакЭ одобряЭ
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
1

Описать класс "Матрица"

22.09.2010, 17:56. Показов 5885. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
я как бэ в поиске нашел но мне бы хотелось узнать обязательно ли матрица должна быть динамической и можно написать метод для ввода и вывода матрицы?
а то я пытался сделать но чего-то работает неверно...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2010, 17:56
Ответы с готовыми решениями:

Описать класс Матрица
Только начинаю разбираться с ООП, помогите, пожалуйста, написать программу с классом Матрица,...

Описать класс Матрица
Описать класс Матрица. Перегрузить операцию сложения для класса и операцию вывода.

Описать класс Матрица
Описать класс Матрица. C++

описать класс вещественная матрица
задание описать класс вещественная матрицаи работу с ним. класс должен реализировать след.операций...

Описать класс, реализующий тип данных «вещественная матрица»
Уважаемые гении программирования)) Помогите, пожалуйста написать программу на С++ (VS 2008)....

19
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
22.09.2010, 17:58 2
Ну ё-моё, пытался-не пытался... Код покажите, будем ошибки искать.
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.09.2010, 17:58 3
Цитата Сообщение от Artishok Посмотреть сообщение
узнать обязательно ли матрица должна быть динамической и можно написать метод для ввода и вывода матрицы?
Это надо узнавать у того, кто задавал задание.
0
ЧакЭ одобряЭ
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
22.09.2010, 18:08  [ТС] 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream.h>
#include <stdlib.h>
 
class matrix
{
     private:
     int rx, ry, matx[][];
     public:
     void matr();
     matrix(int x,int y);
     ~matrix();
     void sum();
     void prel();
};
 
matrix::matrix(int x,int y)
{
    rx=x;
    ry=y;
    for(int i=0;i<rx;i++)
     for(int j=0;j<ry;j++)
       cin>>matx[i][j];
}
 
void matrix::matr()
{
    for(int i=0;i<rx;i++)
    {
     for(int j=0;i<ry;j++)
      std::cout<<matx[i][j]<<" ";
     std::cout<<endl;
    }
}
 
void matrix::sum()
{
     int summ=0;
    for(int i=0;i<rx;i++)
     for(int j=0;j<ry;j++)
      summ+=matx[i][j];
     std::cout<<summ;
}
 
void matrix::prel()
{
    int prell=1;
    for(int i=0;i<rx;i++)
     for(int j=0;j<ry;j++)
      prell*=matx[i][j];
    std::cout<<prell;
}
 
matrix::~matrix(){};
       
main()
{
    matrix c(4,3);
    c.matr();
    c.sum();
    c.prel();
    return 0;
}
не надо сильно ругать.по книжке с классами знакомился
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.09.2010, 18:13 5
Artishok, в таком случае нужно либо делать двумерный массив статическим, либо выделять под него память динамически (что подразумевает объявление деструктора, который будет высвобождать выделенную память).
Я бы делал по-другому - описал бы класс столбца (или строки) и строил класс матрицы как массив столбцов (или строк)
1
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
22.09.2010, 18:14 6
А я бы просто забабахал динамически и всё...
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.09.2010, 18:19 7
Цитата Сообщение от silent_1991 Посмотреть сообщение
А я бы просто забабахал динамически и всё...
одна из причин, по которой я бы сначал определил класс строки - это возможность определить операторы индексации так, чтобы доступ к элементу матрицы происходил так:
C++
1
std::cout << matrix[i][j];
- т.е. так же, как и к встроенным массивам. Ну и еще потому, что для класса строк можно определить вспомогательные функции, которые будет активно использовать класс матрицы - так удобнее, ИМХО.
1
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
22.09.2010, 18:27 8
Логично.
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.09.2010, 18:27 9
Artishok, какой-то скудный функционал у класса получается - сумма, произведение всех элементов матрицы. Реализуйте хотя бы сложение и умножение матриц, а в идеале - построение обратной матрицы и нахождение определителя.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
22.09.2010, 18:28 10
А это разве не лаба по ООП?
0
ЧакЭ одобряЭ
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
22.09.2010, 18:29  [ТС] 11
вообще-то я сам сидел на лекции по Си и решал.
лабы по ооп начнутся только на 3-м курсе а я на втором.
веселье начнется в след.семестре когда ассемблер начнем проходить....
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
22.09.2010, 18:30 12
Artishok,
А вас разве кто-то обвиняет в плагиате? Я просто предположил, что есть чёткое задание, в котором и оговаривается функционал класса.
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.09.2010, 18:35 13
Artishok, а попробуй для начала описать класс числового массива, чтобы он поддерживал изменение размера, реализовывал сумму/разность массивов (одинаковых размеров, естественно), умножение/деление на число, скалярное произведение, индексацию с проверкой на выход за пределы массива, ну и всякие другие полезности. Будет тебе тренировка. А потом можно и к матрицам переходить.
P.S. А класс матрицы можно будет построить на основе класса-массива. Так что ты одним выстрелом убиваешь двух зайцев
0
ЧакЭ одобряЭ
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
22.09.2010, 18:36  [ТС] 14
Цитата Сообщение от silent_1991 Посмотреть сообщение
Artishok,
А вас разве кто-то обвиняет в плагиате? Я просто предположил, что есть чёткое задание, в котором и оговаривается функционал класса.
я про плагиат ничего не сказал
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
22.09.2010, 18:37 15
Меня смутила фраза "я сам сидел и решал..." Читая её, можно подумать, что решал это я и теперь застал вас врасплох... Но хватит оффтопа.
0
ЧакЭ одобряЭ
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
22.09.2010, 18:55  [ТС] 16
ну вот типо класс массива одномерного.вводит и выводит.какие неточности здесь?(остальные методы я реализую попозже.)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream.h>
#include <stdlib.h>
 
class array
{
    private:
    int razm,arr[];
    public:
     void vivod();
     void vvod();
     ~array();
     array(int x);
};
 
array::array(int x)
{
  razm=x;
};
 
void array::vvod()
{
    for(int i=0;i<razm;i++)
     cin>>arr[i];
};
 
void array::vivod()
{
    for(int i=0;i<razm;i++)
     cout<<arr[i]<<" ";
};
array::~array() {};
 
main()
{
    array b(5);
    b.vvod();
    b.vivod();
}
Добавлено через 3 минуты
Цитата Сообщение от Nameless One Посмотреть сообщение
. А класс матрицы можно будет построить на основе класса-массива. Так что ты одним выстрелом убиваешь двух зайцев
то есть сделать класс матрицы как производный от класса массива?
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.09.2010, 18:58 17
Цитата Сообщение от Artishok Посмотреть сообщение
то есть сделать класс матрицы как производный от класса массива?
неа, класс матрицы будет хранить массив array
0
ЧакЭ одобряЭ
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
22.09.2010, 19:02  [ТС] 18
это как?
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.09.2010, 19:16 19
Цитата Сообщение от Artishok Посмотреть сообщение
ну вот типо класс массива одномерного.вводит и выводит.какие неточности здесь?(остальные методы я реализую попозже.)
Совет про выделение/удаление памяти для массива ты, видимо, проигнорировал. Повторюсь, память для массива нужно динамически выделиять в конструкторе и освобождать в деструкторе. Вот примерный "каркас" класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include <stdexcept>
 
class arr
{
    
public:
    
    arr(size_t cnt = 0);
    arr(const arr& rhs);
    arr(const int* iarr, size_t size);
    ~arr();
    
    const int* iarray() const;
    size_t size() const;
    int& operator [] (size_t index);
    const int& operator [] (size_t index) const;
    
private:
    
    size_t  m_nSize;
    int*    m_pArr;
};
 
arr::arr(size_t cnt)
    : m_nSize(cnt)
{
    m_pArr = new int[m_nSize];
    for(size_t i = 0; i < m_nSize; ++i)
        m_pArr[i] = 0;
}
 
arr::arr(const arr& rhs)
    : m_nSize(rhs.m_nSize)
{
    m_pArr = new int[m_nSize];
    for(size_t i = 0; i < m_nSize; ++i)
        m_pArr[i] = rhs.m_pArr[i];
}
 
arr::arr(const int* iarr, size_t size)
    : m_nSize(size)
{
    m_pArr = new int[m_nSize];
    for(size_t i = 0; i < m_nSize; ++i)
        m_pArr[i] = iarr[i];
}
 
arr::~arr()
{
    delete[] m_pArr;
}
 
const int* arr::iarray() const
{
    return m_pArr;
}
 
size_t arr::size() const
{
    return m_nSize;
}
 
int& arr::operator [] (size_t index)
{
    if(index >= m_nSize)
        throw std::out_of_range("The specified index is out of range");
    return m_pArr[index];
}
 
const int& arr::operator [] (size_t index) const
{
    if(index >= m_nSize)
        throw std::out_of_range("The specified index is out of range");
    return m_pArr[index];
}
 
int main()
{
    int iarray[] = {1, 2, 3, 4};
    arr a1(iarray, 4);
    std::cout << "size = " << a1.size() << std::endl;
    for(size_t i = 0; i < a1.size(); ++i)
        std::cout << i << ". " << a1[i] << std::endl;
    return 0;
}
Цитата Сообщение от Artishok Посмотреть сообщение
это как?
Допустим, у нас уже есть класс arr с необходимой функциональностью. Вот как мы будем его использовать для класса матрицы:
C++
1
2
3
4
5
6
7
class matrix
{
//...
private:
size_t m_nSize;
arr*   m_pMatrix;
};
P.S. И нужно сделать, чтобы класс массива хранил не int, а double
1
ЧакЭ одобряЭ
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
22.09.2010, 19:46  [ТС] 20
понятно.
пойду корректировать свою прогу опираясь на вашу
0
22.09.2010, 19:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2010, 19:46
Помогаю со студенческими работами здесь

Описать класс «матрица». Добавить метод, вычисляющий определитель матрицы
Описать класс «матрица». Добавить метод, вычисляющий определитель матрицы, чтение из файла и...

Описать класс, реализующий тип данных «вещественная матрица» и работу с ними
Доброго времени суток, необходима помощь в написании программы. Описать класс, реализующий тип...

Классы (Описать класс, реализующий тип данных «вещественная матрица» и работу с ними)
само задание звучит так:Описать класс, реализующий тип данных «вещественная матрица» и работу с...

Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты.
Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты.

Разработать класс Tableware (посуда) и производный класс Dish (тарелка). Описать атрибуты
Разработать класс Tableware (посуда) и производный класс Dish (тарелка). Описать атрибуты.

Создать класс «Ученик» с полями: ФИО, класс, пол. Описать дружественную функцию,для вывода учеников 6 класса,п
Создать класс «Ученик» с полями: ФИО, класс, пол. Описать дружественную функцию для вывода...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru