- •Методичні вказівки
- •1 Директивипрепроцесора. Багатомодульне програмування
- •1.1 Мета роботи
- •1.2 Вказівки щодо організації самостійної роботи студентів
- •1.3 Порядок виконання роботи
- •1.4 Контрольні запитання та завдання
- •1.5 Завдання
- •1.6 Варіанти завдань
- •1.7 Контрольний приклад
- •2.1 Мета роботи
- •2.2 Вказівки щодо організації самостійної роботи студентів
- •2.3 Порядок виконання роботи
- •2.4 Контрольні запитання та завдання
- •2.5 Завдання
- •2.6 Варіанти завдань
- •2.7 Контрольний приклад
- •3 Файлові потоки мови с
- •3.1 Мета роботи
- •3.2 Вказівки щодо організації самостійної роботи студентів
- •Ввод и вывод символов
- •Ввод и вывод строк
- •Ввод и вывод записей
- •Управление указателем файла
- •Состояние потока
- •Форматированный вывод
- •Форматированный ввод
- •Другие функции форматного ввода и вывода
- •Примеры
- •3.3 Порядок виконання роботи
- •3.4 Контрольні запитання та завдання
- •3.5 Завдання
- •3.6 Варіанти завдань
- •3.7 Контрольний приклад
- •4 Перегрузка операцій
- •4.1 Мета роботи
- •4.2 Вказівки щодо організації самостійної роботи студентів
- •4.3 Порядок виконання роботи
- •5.1 Мета роботи
- •5.2 Вказівки щодо організації самостійної роботи студентів Классы и объекты
- •Инкапсуляция
- •Конструктор
- •Деструктор
- •Указатели на объекты
- •Операции new и delete
- •5.3 Порядок виконання роботи
- •5.4 Контрольні запитання та завдання
- •5.5 Завдання
- •5.6 Варіанти завдань
- •5.7 Контрольний приклад
- •6 Наслідування, поліморфізм, інкапсуляция
- •6.1 Мета роботи
- •6.2 Вказівки щодо організації самостійної роботи студентів
- •Наследование
- •Уровни доступа
- •Виртуальные функции
- •Механизм работы виртуальных функций
- •Полиморфизм
- •Множественное наследование
- •6.3 Порядок виконання роботи
- •6.4 Контрольні запитання та завдання
- •6.5 Завдання
- •6.6 Варіанти завдань
- •6.7 Контрольний приклад
- •Рекомендована література
- •61166 Харків, просп. Леніна, 14.
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;
}
}