Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
1 / 1 / 0
Регистрация: 27.10.2011
Сообщений: 10
1

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

12.07.2012, 08:35. Показов 4964. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Составить описание класса, обеспечивающего представление матрицы произвольного размера с возможностью изменения числа строк и столбцов, вывода на экран подматрицы любого размера и всей матрицы.
вот код: описание класса есть, только нужно дописать 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 минут
помогите!
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2012, 08:35
Ответы с готовыми решениями:

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

Составить описание класса, обеспечивающего представление матрицы произвольного размера
вариант1 Условие задачи: Составить описание класса, обеспечивающего представление матрицы...

Класс: Составить описание класса, обеспечивающего представление матрицы произвольного размера...
помогите пожалуйста написать программу, только чтобы она была как можно проще очень срочно ...

Составить описание объекта, обеспечивающего размещение матрицы произвольного размера с возможностью изменения
Помогите пожалуйста. Не понимаю в чем ошибка программы??? Вот задание. Составить описание...

4
5 / 5 / 1
Регистрация: 12.07.2012
Сообщений: 13
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 ;
}
1
1 / 1 / 0
Регистрация: 27.10.2011
Сообщений: 10
12.07.2012, 11:29  [ТС] 3
спасибо! работает! а можно с этим классом сделать чтобы было меню и ввод вручную?
0
5 / 5 / 1
Регистрация: 12.07.2012
Сообщений: 13
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 ;
}
1
1 / 1 / 0
Регистрация: 27.10.2011
Сообщений: 10
12.07.2012, 14:44  [ТС] 5
Огромнейшее вам спасибо!)) все работает))
0
12.07.2012, 14:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.07.2012, 14:44
Помогаю со студенческими работами здесь

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

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

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

Создание класса: Линейные целочисленные массивы произвольного размера с сортировкой вставками
Дана задача: Создать Класс: Линейные целочисленные массивы произвольного размера с сортировкой...


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

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