Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МВ_Прог_1курс_2n1часть.doc
Скачиваний:
11
Добавлен:
13.04.2015
Размер:
735.74 Кб
Скачать

5.7 Контрольний приклад

Файл «Tmatr.cpp»

/*

Написать класс "Двумерная матрица"

Необходимо создать класс «двумерный массив».

Интерфейс класса и его реализация должны быть в отдельных модулях: файлах *.h и *.cpp.

Кроме того каждый разрабатываемый основной класс должен реализовывать:

1. конструктор по умолчанию

2. деструктор

3. конструкторы с параметрами

4. конструктор копирования

5. перегруженную операцию присваивания

6. перегруженную операцию вывода в поток

7. метод загрузки данных из файла (в файле первые две цифры указывают на размерность матрицы)

8. метод сохранение данных в файл

Реализовать следующие методы:

1.заполнение данных случайным образом;

2.сортировку указанной строки матрицы.

*/

#include "stdafx.h"

#include "TmatrH.h"

int main()

{

Nmatr::Tmatr matr1, matr2(10,5);

matr1.Rand(5);

matr2.Rand(10);

std::cout<<"Ischodnie dannie:"<<std::endl;

std::cout<<"matr1 = \n"<<matr1<<std::endl;

std::cout<<"matr2 = \n"<<matr2<<std::endl;

std::cout<<"Sum1 = \n"<<matr1.Sum()<<std::endl;

std::cout<<"Sum2 = \n"<<matr2.Sum()<<std::endl;

//Продемонтрируем использование операции "<"

if(matr1<matr2) std::cout<<"matr1<matr2"<<std::endl;

else std::cout<<"matr1>=matr2"<<std::endl;

Nmatr::Tmatr matr3(matr2);

if(!(matr3<matr2)||(matr2<matr3)) std::cout<<"matr3==matr2"<<std::endl;

matr1=matr2;

std::cout<<"matr1 = \n"<<matr1<<std::endl;

Nmatr::Tmatr matr4;

matr4.LoadFromFile("TextMatr.txt");

std::cout<<"matr4 = \n"<<matr4<<std::endl;

matr4.SaveFromFile("TextMatrOut.txt");

//Сортировка указанной строки

matr4.SortStr(2);

std::cout<<"matr4 = \n"<<matr4<<std::endl;

return 0;

}

Файл «TmatrH.h»

#ifndef TmatrH

#define TmatrH

#include <iostream>

#include <fstream>

#include <time.h>

namespace Nmatr{

class Tmatr

{

int **matr;

int n,m;

public:

Tmatr();//конструктор по умолчанию

Tmatr(int,int);//конструктор с параметром

Tmatr(Tmatr &);//конструктор коппирования

~Tmatr();//деструктор

void Rand(int);//метод заполнения случайным образом от 0 до заданного параметра

int Sum();//метод суммирования элементов

bool operator<(Tmatr&);//перегрузка операции "<"

Tmatr& operator=(Tmatr&);//перегрузка операции "="

//перегрузка потоков

friend std::istream& operator>>(std::istream&,Tmatr&);

friend std::ostream& operator<<(std::ostream&,Tmatr&);

void LoadFromFile(char*);//Чтение из файла

void SaveFromFile(char*);//Запись в файла

void SortStr(int);//Сортировка указанной строки

};

//объявление в пространстве имен функций

std::istream& operator>>(std::istream&,Tmatr&);

std::ostream& operator<<(std::ostream&,Tmatr&);

}//end namespace Nmatr

#endif

Файл «Tmatr.cpp»

#include "stdafx.h"

#include "TmatrH.h"

Nmatr::Tmatr::Tmatr()

{ this->n=5;

this->m=5;

matr=new int*[n];

for(int i(0);i<n;i++)

matr[i]=new int[m];

}

Nmatr::Tmatr::Tmatr(int n, int m)

{

this->n=n;

this->m=m;

matr=new int*[n];

for(int i(0);i<n;i++)

matr[i]=new int[m];

}

Nmatr::Tmatr::Tmatr(Tmatr &obj)

{

this->n=obj.n;

this->m=obj.m;

matr=new int*[n];

for(int i(0);i<n;i++)

matr[i]=new int[m];

for(int i(0);i<n;i++)

for(int j(0);j<m;j++)

matr[i][j]=obj.matr[i][j];

};

Nmatr::Tmatr::~Tmatr()

{

for(int i(0);i<n;i++)

delete[]matr[i];

delete[]matr;

}

void Nmatr::Tmatr::Rand(int k)

{

srand(time(NULL));

for(int i(0);i<n;i++)

for(int j(0);j<m;j++)

matr[i][j]=rand()%k;

}

int Nmatr::Tmatr::Sum()

{

int S(0);

for(int i(0);i<n;i++)

for(int j(0);j<m;j++)

S+=matr[i][j];

return S;

}

bool Nmatr::Tmatr::operator<(Nmatr::Tmatr& obj)

{

int S1=this->Sum();

int S2=obj.Sum();

return (S1<S2);

}

Nmatr::Tmatr& Nmatr::Tmatr::operator=(Nmatr::Tmatr& obj)

{

if(this==&obj) return *this;

this->~Tmatr();

this->n=obj.n;

this->m=obj.m;

matr=new int*[n];

for(int i(0);i<n;i++)

matr[i]=new int[m];

for(int i(0);i<n;i++)

for(int j(0);j<m;j++)

matr[i][j]=obj.matr[i][j];

return *this;

}

std::istream& Nmatr::operator>>(std::istream& in,Nmatr::Tmatr& obj)

{

for(int i(0);i<obj.m;i++)

for(int j(0);j<obj.m;j++)

in>>obj.matr[i][j];

return in;

}

std::ostream& Nmatr::operator<<(std::ostream& out,Nmatr::Tmatr& obj)

{

for(int i(0);i<obj.n;out<<'\n',i++)

for(int j(0);j<obj.m;j++)

{

out.width(5);

out<<obj.matr[i][j];

}

out<<'\n';

return out;

}

void Nmatr::Tmatr::LoadFromFile(char* FilaName)//Чтение из файла

{

this->~Tmatr();

matr=new int*[n];

for(int i(0);i<n;i++)

matr[i]=new int[m];

std::ifstream in(FilaName);

in>>this->n;

in>>this->m;

for(int i(0);i<n;i++)

for(int j(0);j<m;j++)

in>>matr[i][j];

}

void Nmatr::Tmatr::SaveFromFile(char* FilaName)//Запись в файла

{ std::ofstream out(FilaName);

out<<this->n<<' ';

out<<this->m<<'\n';

for(int i(0);i<n;out<<'\n',i++)

for(int j(0);j<m;j++)

{

out.width(5);

out<<matr[i][j];

}

out<<'\n';

}

void Nmatr::Tmatr::SortStr(int k)//Сортировка указанной строки

{

if((k<0)||(k>=n))return;

for(int i(0);i<m;i++)

for(int j(0);j<m-1-i;j++)

if(matr[k][j]>matr[k][j+1])

{

int tmp=matr[k][j];

matr[k][j]=matr[k][j+1];

matr[k][j+1]=tmp;

}

}