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

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

Восстановить пароль Регистрация
 
ehanjaki
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 10
12.07.2012, 08:35     Составить описание класса, обеспечивающего представление матрицы произвольного размера #1
Составить описание класса, обеспечивающего представление матрицы произвольного размера с возможностью изменения числа строк и столбцов, вывода на экран подматрицы любого размера и всей матрицы.
вот код: описание класса есть, только нужно дописать int main! напишите пожалуйста вроде бы это совсем не сложно, но так я с программированием не связан то сам не могу(

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
115
#include<iostream>
using namespace std;
class Matrix // целочисленная матрица
{
private:
    int **a; // для хранения информации
    int w,h;// кол-вл строк и столбцов
public:
    Matrix(int H,int W); // конструктор с параметрами
    Matrix(); // пустой конструктор
    ~Matrix();// деструктор
    void SetXY(int Y,int X,int data); // для заполнения ячейки строки y и столбца x
    int GetXY(int Y,int X); // возвращает значение элемента строки y и столбца x
    void Show(); // вывод всей матрицы
    void Show(int Hbeg,int Wbeg,int Hend, int Wend);// вывод начиная со строки HBeg и заканчивая Hend, и столбца с WBeg до Wend
    void SetH(int H); // установка кол-ва строк
    void SetW(int W);// установка кол-ва столбцов
    int GetH() {return h;}
    int GetW() {return w;}
};
Matrix::Matrix()
{
    h=w=0;
}
Matrix::Matrix(int H,int W)
{
    h=H;
    w=W;
    a=new int*[H];// выделение памяти под строки
    for(int i=0;i<H;i++) 
        a[i]=new int[W];// выделение памяти под каждую строку
}
Matrix::~Matrix()
{
    for(int i=0;i<h;i++)
        delete [] a[i];
    delete [] a;
}
void Matrix::SetXY(int Y,int X,int data)
{
    if(Y<h &&Y>=0 && X<w && X>=0)
        a[Y][X]=data;
}
int Matrix::GetXY(int Y,int X)
{
    if (Y<h &&Y>=0 && X<w && X>=0)
        return a[Y][X];
    else 
        return -1;
}
void Matrix::Show()
{
    for(int i=0;i<h; i++, cout<<endl)
        for(int j=0;j<w;j++)
            cout<<a[i][j]<<" ";
}
void Matrix::Show(int Hbeg,int Hend,int Wbeg,int Wend)
{
    if(Hend<h &&Hbeg>=0 && Wend<w && Wbeg>=0)
    {
        for(int i=Hbeg;i<=Hend;i++,cout<<endl)
            for(int j=Wbeg;j<=Wend;j++)
                cout<<a[i][j]<<" ";
    }
}
void Matrix::SetH(int H)
{
    int **b;// новый участок памяти
    b=new int*[H];// выделение памяти под строки
    for(int i=0;i<H;i++) 
    {
        b[i]=new int[w];// выделение памяти под каждую строку
        for(int j=0;j<w;j++)
            b[i][j]=0; // сразу обнуляем строки
    }
 
    for(int i=0;i<H && i<h;i++)
        for(int j=0;j<w; j++)
            b[i][j]=a[i][j]; // копируем информацию
    // устанавливаем новое кол-во строк
 
     for(int i=0;i<h;i++)
        delete [] a[i]; // очистка памяти из под старой информации
    delete [] a;
    h=H; 
    a=b;
 
}
void Matrix::SetW(int W)
{
    int **b;
    b=new int*[h];// выделение памяти под строки
    for(int i=0;i<h;i++) 
    {
        b[i]=new int[W];// выделение памяти под каждую строку
        for(int j=0;j<W;j++)
            b[i][j]=0; // сразу обнуляем строки
    }
 
    for(int i=0;i<h;i++)
        for(int j=0;j<w &&j<W; j++)
            b[i][j]=a[i][j]; // копируем информацию
     
 
     for(int i=0;i<h;i++) // очистка памяти из под старой информации
        delete [] a[i];
    delete [] a;
    w=W; // устанавливаем новое кол-во столбцов
    a=b;
}
[B][B]int main()[/B][/B]
{
    
    return 0 ;
}
Добавлено через 15 часов 15 минут
помогите!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2012, 08:35     Составить описание класса, обеспечивающего представление матрицы произвольного размера
Посмотрите здесь:

Матрицы произвольного размера. C++
C++ Написать программу, которая позволяет осуществить ввод матрицы произвольного размера
C++ Составить описание класса, обеспечивающего представление матрицы произвольного размера
Класс, обеспечивающий представление матрицы произвольного размера C++
Создание класса: Линейные целочисленные массивы произвольного размера с сортировкой вставками C++
C++ Составить описание класса, обеспечивающего представление матрицы произвольного размера
Описать класс, обеспечивающий представление квадратной матрицы произвольного размера C++
Перемножить матрицы произвольного размера C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Дмитрий1988
3 / 3 / 1
Регистрация: 12.07.2012
Сообщений: 8
12.07.2012, 10:35     Составить описание класса, обеспечивающего представление матрицы произвольного размера #2
я сам только чала изучение С++, так что, если что - рад услышать поправки. Но, вроде, всё учёл.
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
int main()
{
    register int i,j;   //Переменные для циклов
    Matrix *MyMatrix = new Matrix(10,10);   //Твоя матрица
 
    for(i=0;i<10;i++)
        for(j=0;j<10;j++)
            MyMatrix->SetXY(i,j,(i>j)?1:0);     //Заполнение матрицы единицами ниже главной диагонали
 
    MyMatrix->Show();   //Вывод всей матрицы
 
    getchar();  //Ждём нажатия клавиши
 
    MyMatrix->Show(2,7,1,3);    //Вывод части матрицы 6 строк, 3 столбца, начиная с элемента 3,2
 
    getchar();
 
    MyMatrix->SetH(5);
    MyMatrix->SetW(15); //Изменяем матрицу на размеры 5x15
 
    for(i=0;i<5;i++)
        for(j=0;j<15;j++)
            MyMatrix->SetXY(i,j,rand()%10);     //Заполняем матрицу случайными значениями
 
    MyMatrix->Show();   //Вывод всей новой матрицы
 
    getchar();
 
    MyMatrix->Show(1,4,0,5);    //Вывод части матрицы 6 столбцов, 4 строки, начиная с элемента 2,1
 
    getchar();
 
    delete MyMatrix;    //Удаляем матрицу
 
return 0 ;
}
ehanjaki
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 10
12.07.2012, 11:29  [ТС]     Составить описание класса, обеспечивающего представление матрицы произвольного размера #3
спасибо! работает! а можно с этим классом сделать чтобы было меню и ввод вручную?
Дмитрий1988
3 / 3 / 1
Регистрация: 12.07.2012
Сообщений: 8
12.07.2012, 14:39     Составить описание класса, обеспечивающего представление матрицы произвольного размера #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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
int main()
{
    setlocale(LC_CTYPE, "");    //Для вывода кирилицы в консоли
 
 
    char m_key;
 
    register int i,j;   //Переменные для циклов
    Matrix *MyMatrix = new Matrix(10,10);   //Твоя матрица
 
    do
    {
        system("cls");  //Очистка экрана
        cout << "1. Установить размер матрицы." << endl;
        cout << "2. Заполнить матрицу случайными числами." << endl;
        cout << "3. Установить значение конкретного элемента матрицы." << endl;
        cout << "4. Вывести всю матрицу." << endl;
        cout << "5. Вывести часть матрицы." << endl;
        cout << "0. Выход." << endl;
        cin >> m_key;
        
        switch(m_key)
        {
        case '1':
            {
            cout << "Введите через пробел размеры матрицы \n(количество строк, количество столбцов)." << endl;
            int x,y;
            cin >> x >> y;
            MyMatrix->SetH(x);
            MyMatrix->SetW(y);
            cout << "Матрица имеет размеры " << x << " на " << y << endl;
            system("pause"); //ожидание нажатия клавиши
            break;
            }
        case '2':
            {
            for(i=0;i<MyMatrix->GetH();i++)
                for(j=0;j<MyMatrix->GetW();j++)
                    MyMatrix->SetXY(i,j,rand()%100);
            cout << "Матрица заполнена случайными числами." << endl;
            system("pause"); //ожидание нажатия клавиши
            break;
            }
        case '3':
            {
            cout << "Введите через пробел номер элемента \n(номер строки, номер столбца) и требуемое значение." << endl;
            int y,x,z;
            cin >> y >> x >> z;
            MyMatrix->SetXY(y-1,x-1,z);
            cout << "Элемент изменён." << endl;
            system("pause"); //ожидание нажатия клавиши
            break;
            }
        case '4':
            {
            MyMatrix->Show();
            system("pause"); //ожидание нажатия клавиши
            break;
            }
        case '5':
            {
            cout << "Введите через пробел номер начальной и конечной строки,\nа также номер начального и конечного столбца для вывода." << endl;
            int x1,y1,x2,y2;
            cin >> x1 >> y1 >> x2 >> y2;
            MyMatrix->Show(x1-1,y1-1,x2-1,y2-1);
            system("pause"); //ожидание нажатия клавиши
            break;
            }
        }
 
    }
    while(m_key!='0');  //Пока не выбран 0, продолжаем
 
    delete MyMatrix;    //Удаляем матрицу
 
    return 0 ;
}
ehanjaki
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 10
12.07.2012, 14:44  [ТС]     Составить описание класса, обеспечивающего представление матрицы произвольного размера #5
Огромнейшее вам спасибо!)) все работает))
Yandex
Объявления
12.07.2012, 14:44     Составить описание класса, обеспечивающего представление матрицы произвольного размера
Ответ Создать тему
Опции темы

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