Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
ehanjaki
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 10
#1

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

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

Составить описание класса, обеспечивающего представление матрицы произвольного размера с возможностью изменения числа строк и столбцов, вывода на экран подматрицы любого размера и всей матрицы.
вот код: описание класса есть, только нужно дописать 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 минут
помогите!
http://www.cyberforum.ru/cpp-beginners/thread619408.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2012, 08:35
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Составить описание класса, обеспечивающего представление матрицы произвольного размера (C++):

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

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

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

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

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

4
Дмитрий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 ;
}
0
ehanjaki
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 10
12.07.2012, 11:29  [ТС] #3
спасибо! работает! а можно с этим классом сделать чтобы было меню и ввод вручную?
0
Дмитрий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 ;
}
0
ehanjaki
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 10
12.07.2012, 14:44  [ТС] #5
Огромнейшее вам спасибо!)) все работает))
0
12.07.2012, 14:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2012, 14:44
Привет! Вот еще темы с решениями:

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

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

Транспонирование матрицы произвольного размера
Здравствуйте! В университете начали изучать подпрограммы, пока не могу толком...

Перемножить матрицы произвольного размера
#include &lt;iostream&gt; using std::cin; using std::cout; using std::endl; ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru