Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2012, 14:02   #1
ehanjaki
 
Регистрация: 05.07.2012
Сообщений: 6
Восклицание доработать программу

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

Код:
#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;
}
int main()
{



return 0 ;
}

Последний раз редактировалось Serge_Bliznykov; 12.07.2012 в 15:08.
ehanjaki вне форума Ответить с цитированием
Старый 12.07.2012, 14:37   #2
ehanjaki
 
Регистрация: 05.07.2012
Сообщений: 6
По умолчанию

Код:
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 ;
}
вот он сам int main, только когда запускаешь выдает уже готовую матрицу! сделайте пожалуйста ручной ввод(меню)




___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 12.07.2012 в 15:07.
ehanjaki вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
доработать программу konispat Паскаль, Turbo Pascal, PascalABC.NET 1 25.12.2011 20:16
Доработать программу на С++ sol1tary Фриланс 3 20.07.2011 10:15
Доработать программу за $ lutdan Фриланс 3 09.05.2011 17:32
Доработать программу stepanov_ivan Помощь студентам 1 03.01.2011 15:08
Доработать программу drama2rg Помощь студентам 2 29.03.2010 19:22