Форум программистов, компьютерный форум CyberForum.ru

Класс, обеспечивающий представление матрицы произвольного размера - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
warspirit
3 / 3 / 0
Регистрация: 30.03.2011
Сообщений: 61
16.10.2012, 18:56     Класс, обеспечивающий представление матрицы произвольного размера #1
помогите,
Составить описание класса, обеспечивающего представление матрицы произвольного размера с возможностью изменения числа строк и столбцов, вывода на экран подматрицы любого размера и всей матрицы.
Написать программу, демонстрирующую работу с этим классом.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2012, 18:56     Класс, обеспечивающий представление матрицы произвольного размера
Посмотрите здесь:

Матрицы произвольного размера. C++
C++ Написать программу, которая позволяет осуществить ввод матрицы произвольного размера
[C++] класс для работы с целочисленной матрицей произвольного размера C++
C++ Составить описание класса, обеспечивающего представление матрицы произвольного размера
Написать класс , объектами которого являются матрицы размера 3 х 3 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
16.10.2012, 19:05     Класс, обеспечивающий представление матрицы произвольного размера #2
Ну вперёд писать класс row с перегрузкой [] для удобства и класс column состоящий из массива/списка или чего вам нравиться обхектов row
warspirit
3 / 3 / 0
Регистрация: 30.03.2011
Сообщений: 61
16.10.2012, 19:52  [ТС]     Класс, обеспечивающий представление матрицы произвольного размера #3
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
87
88
89
90
91
92
93
// ConsoleApplication5.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include<math.h>
#include <stdlib.h>            // для функций работы с числами
#include <stdio.h>             // для printf
 
 
using namespace std;
 
class matrix
    {
    private:
        int rows;
        int cols;
        int **intdata;
    public:
        matrix(int row=1, int col=1); // конструктор
        // ~matrix(void); // деструктор
        int getat(int row, int col); // получить
        void setat(int col, int row, int data); //записать
        void display();
        void fill();
    };
 
matrix::matrix(int row, int col)
    {
        rows=row;
        cols=col;
        return;
    };
 
int matrix::getat(int row, int col)
    {
    if (row < 0 || row > rows)
        row=0;
    if (col < 0 || col > cols)
        col=0;
    return intdata[row][col]; 
    };
 
void matrix::setat(int row, int col,int data)
{
    if (row < 0 || row > rows)
        row=0;
    if (col < 0 || col > cols)
        col=0;
    intdata[row][col]=data;
};
 
void matrix::fill()
{
    for (int j=0;j<rows;j++)
    {
        for (int i=0;i<cols;i++)
        {
            intdata[j][i]=(int)rand();
        };
    }
    return;
}
 
 
void matrix::display()
{
    printf("\n Matrix \n");
    for (int j=0;j<rows;j++){
        printf("Row:%i>", j);        // нумеруем каждый ряд
        for (int i=0;i<cols;i++){
            printf("%5.0f ",intdata[j][i]); // печатаем колонки
        }
       
    }
    return;
}
 
 
void main()
{
    // спросим сколько колонок и строк
    int row,col;
    cout << "\nRow ?:" ;
    cin >> row ;
    cout << "\nCol ?:" ;
    cin >> col ;
 
 
    matrix Matrix(row,col);    // создадим нашу матрицу
    Matrix.fill();                               // заполним значениями
    Matrix.display();                        // и покажем результаты
}
описание класса матрицы, заполнение и вывод
в чем тут ошибка ?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
16.10.2012, 20:08     Класс, обеспечивающий представление матрицы произвольного размера #4
1) Точки с запятой после функций
2) Нет выделения памяти под массив
3) Нет деструктора, уничтожающего объект.
4) Нет функций для изменения размера матрицы
5) Нет функции для вывода подматрицы (display выводит всю матрицу)
warspirit
3 / 3 / 0
Регистрация: 30.03.2011
Сообщений: 61
16.10.2012, 20:28  [ТС]     Класс, обеспечивающий представление матрицы произвольного размера #5
Цитата Сообщение от Croessmah Посмотреть сообщение
2) Нет выделения памяти под массив
3) Нет деструктора, уничтожающего объект.
не могли бы вы код написать ?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
16.10.2012, 20:45     Класс, обеспечивающий представление матрицы произвольного размера #6
В секцию private класса matrix допишите объявление функции
C++
1
void CreateMatrix();
В конструкторе, желательно, проверить корректность аргументов row и col
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
matrix::matrix(int row, int col)
    {
        rows=row;
        cols=col;
          CreateMatrix();
        return;
    }
matrix::~matrix(){
    for (int i=0; i<this->rows;i++)
        delete [] this->intdata[i];
    delete [] this->intdata;
}
 
bool matrix::CreateMatrix(){
    if (!(this->rows>0 && this->cols>0)) 
        return false;
    this->intdata=new int* [this->rows];
    for(int i=0; i<this->rows;i++)
        this->intdata[i]=new int [this->cols];
    return true;
}
warspirit
3 / 3 / 0
Регистрация: 30.03.2011
Сообщений: 61
16.10.2012, 22:08  [ТС]     Класс, обеспечивающий представление матрицы произвольного размера #7
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// ConsoleApplication5.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include<math.h>
#include <stdlib.h>            // для функций работы с числами
#include <stdio.h>             // для printf
 
 
using namespace std;
 
class matrix
    {
    private:
        int rows;
        int cols;
        int **intdata;
        
        bool creatematrix();
    public:
        matrix(int row=1, int col=1); // конструктор
         ~matrix(void); // деструктор
        int getat(int row, int col); // получить
        void setat(int col, int row, int data); //записать
        void display();
        void fill();
    };
 
matrix::matrix(int row, int col)
    {
        rows=row;
        cols=col;
        creatematrix();
        return;
    };
 
matrix::~matrix()
    {
        for (int i=0;i<this->rows;i++)
            delete[] this->intdata[i];
        delete[] this->intdata;
    };
bool matrix::creatematrix()
{
  if (!(this->rows>0 && this->cols>0)) 
        return false;
    this->intdata=new int* [this->rows];
    for(int i=0; i<this->rows;i++)
        this->intdata[i]=new int [this->cols];
    return true;
};
    
 
int matrix::getat(int row, int col)
    {
    if (row < 0 || row > rows)
        row=0;
    if (col < 0 || col > cols)
        col=0;
    return intdata[row][col]; 
    };
 
void matrix::setat(int row, int col,int data)
{
    if (row < 0 || row > rows)
        row=0;
    if (col < 0 || col > cols)
        col=0;
    intdata[row][col]=data;
}; 
 
void matrix::fill()
{
    for (int j=0;j<rows;j++)
    {
        for (int i=0;i<cols;i++)
        {
            intdata[j][i]=(int)rand();
        };
    }
    getch();
        return;
};
 
 
void matrix::display()
{
    printf("\n Matrix \n");
    for (int j=0;j<rows;j++){
        printf("Row:%i>", j);        // нумеруем каждый ряд
        for (int i=0;i<cols;i++){
            printf("%5.0f ",intdata[j][i]); // печатаем колонки
        }
       
    }
    return;
};
 
 
void main()
{
    // спросим сколько колонок и строк
    int row,col;
    cout << "\nRow ?:" ;
    cin >> row ;
    cout << "\nCol ?:" ;
    cin >> col ;
 
 
    matrix Matrix1(row,col);    // создадим нашу матрицу
    Matrix1.fill();                               // заполним значениями
    Matrix1.display();                        // и покажем результаты
}
выводит "0" постоянно

Добавлено через 25 минут
Нашел сам ошибку - "printf("%5.0f ",intdata[j][i]); "
"%5.0f"
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
16.10.2012, 22:17     Класс, обеспечивающий представление матрицы произвольного размера #8
Функцию fill() лучше вызвать в конструкторе класса, после creatematrix()

Условие в функциях getat и setat нужно поменять так:
C++
1
2
3
4
    if (row < 0 || row >= rows)
        row=0;
    if (col < 0 || col >= cols)
        col=0;
warspirit
3 / 3 / 0
Регистрация: 30.03.2011
Сообщений: 61
16.10.2012, 22:21  [ТС]     Класс, обеспечивающий представление матрицы произвольного размера #9
а как лучше реализовать " вывода на экран подматрицы любого размера " ?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
16.10.2012, 22:33     Класс, обеспечивающий представление матрицы произвольного размера #10
можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void matrix::display(int x,int y, int x1, int y1)
{
    if (x<0 || y< 0 || x1<0 || y1<0 || x>=cols || x1>=cols || y>=rows || y1>=rows){
    printf("\n Matrix \n");
    for (int j=0;j<rows;j++){
        printf("Row:%i>", j);        // нумеруем каждый ряд
        for (int i=0;i<cols;i++){
            printf("%8.0f ",(float)intdata[j][i]); // печатаем колонки
        }
       printf("\n");
    }
    }else{
    printf("\n Matrix (%d,%d)-(%d,%d)\n",x,y,x1,y1);
    for (int j=y;j<y1;j++){
        printf("Row:%i>", j);        // нумеруем каждый ряд
        for (int i=x;i<x1;i++){
            printf("%8.0f ",(float)intdata[j][i]); // печатаем колонки
        }
       printf("\n");
    }
    }
    return;
};
объявление переделать на
C++
1
void display(int x=-1,int y=-1,int x1=-1,int y1=-1);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2012, 22:59     Класс, обеспечивающий представление матрицы произвольного размера
Еще ссылки по теме:

C++ Описать класс, обеспечивающий представление матрицы
C++ Составить описание класса, обеспечивающего представление матрицы произвольного размера
C++ Создать класс CMatrix, описывающий объект – действительные матрицы заданного размера

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

Или воспользуйтесь поиском по форуму:
warspirit
3 / 3 / 0
Регистрация: 30.03.2011
Сообщений: 61
16.10.2012, 22:59  [ТС]     Класс, обеспечивающий представление матрицы произвольного размера #11
спасибо ,Вам,разобрался
Yandex
Объявления
16.10.2012, 22:59     Класс, обеспечивающий представление матрицы произвольного размера
Ответ Создать тему
Опции темы

Текущее время: 02:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru