Написать класс Множество – наследник класса Матрица (множество понимается в привычном cмысле – неупорядоченный набор уникальных элементов известной мощности).
В классе реализовать следующие методы:
- конструкторы (по умолчанию, с параметрами, копирования);
- деструктор;
- ввод с клавиатуры, вывод на экран (в виде методов класса и при помощи перегруженных операций потокового ввода и вывода).
Перегрузить следующие операции:
+,+=(добавление элемента в множество);+,+=(объединение двух множеств);–(удаление элемента);–(разность множеств);=(присвоение);==(сравнение по элементам).
Операции: +, += (добавление элемента в множество) реализовать как виртуальные функции.
По сути — это класс, описывающий трехмерные массивы или множества. Объект данного класса — множество, которое содержит size матриц. В классе перегружены различные операции для сложения добавления элементов множества и многое другое.
Посмотрите заголовочный файл many.h класса Many. В интерфейсном файле класса можно увидеть, что объявлены две дружественные функции класса, строки 8 — 9. По сути это даже не функции, это перегруженные операции ввода/вывода. Это значит, что объекты класса можно выводить на экран, привычным для нас способом — строка 20 в Файле с функцией main(). Тоже самое относится и к операции ввода — строка 25. В классе есть три конструктора:
- конструктор по умолчанию;
- конструктор с параметрами (для создания объекта передаются параметры);
- конструктор копии (нужен для создания нового объекта, аналогичного копируемому).
Кроме конструктора, есть деструктор и много методов, работа которых описана в коде.
#ifndef MANY_H
#define MANY_H
#include "matrix.h"
class Many : /*virtual*/ public Matrix
{
friend ostream &operator<< (ostream &, const Many &); // перегруженный оператор вывода
friend istream &operator>> (istream &, Many &); // перегруженный оператор ввода
private:
Matrix *ptr; // указатель на массив объектов Matrix
int size; // количество элементов множества
public:
Many(); // конструктор по умолчанию
Many(int, int, int); // конструктор с параметрами
Many(Many &); // конструктор копии
~Many(); // десструктор класса Many
Matrix &operator[] (int ); // перегруженная операция взятия индекса
int getSizeMany() const; // возвратить количество объектов типа Matrix
int getSizeRow() const
{
return ptr->getSizeMat();
}
int getSizeCol() const
{
return ptr->getPtr()->getSize();
}
void getMany(); // вывод множества
void setMany(); // заполнение множества
const Many &operator= (const Many &); // оператор присваивания
bool operator== (const Many &right) const;// оператор сравнения
Many &operator- (/*const int & */); // оператор удаления элемента множества по номеру
Many operator- (const Many &right);
Many operator+ (const Many &right); // объединение двух множеств
Many operator+= (const Many &right); // объединение двух множеств
virtual Many operator+ (const Matrix &right); // добавление элемента в множество
virtual Many &operator+= (const Matrix &right); // добавление элемента в множество
};
#endif // MANY_H
Исполняемый файл many.cpp класса Many.
#include "many.h"
#include <iostream>
using std::cout; // пространство имен std для cout
using std::cin; // пространство имен std для cin
#include <iomanip> // для манипулятора setw
using std::setw; // пространство имен std для setw
#include <cstdlib>
Many::Many() // конструктор по умолчанию
{
size = 10; // по умолчанию размер множества = 10 объектам типа Matrix
ptr = new Matrix [size]; // выделить место в памяти для множества
for (int ix = 0; ix < size; ix++) // обнуляем множество
for (int jx = 0; jx < getSizeMat(); jx++)
for (int zx = 0; zx < getPtr()->getSize(); zx++)
ptr[ix][jx][zx] = 0;
}
Many::Many(int manySize, int matrixSize, int arraySize) // конструктор с параметрами
{
size = (manySize > 0 ? manySize : 10); // количество матриц
ptr = new Matrix [size]; // выделить место в памяти для множества
for (int ix = 0; ix < size; ix++) // перераспределяем выделенную память
ptr[ix].setSize(matrixSize > 0 ? matrixSize : 10, arraySize > 0 ? arraySize : 10); // количество столбцов
//cout << size << " " << ptr->getSize() << " " << ptr->getPtr()->getSize() << std::endl;
for (int ix = 0; ix < size; ix++) // обнуляем множество
for (int jx = 0; jx < ptr->getSizeMat(); jx++)
for (int zx = 0; zx < ptr->getPtr()->getSize(); zx++)
ptr[ix][jx][zx] = 0;
// cout << size << " " << ptr->getSize() << " " << ptr->getPtr()->getSize() << std::endl;
}
Many::Many(Many &manyToCopy ) // конструктор копии
:size(manyToCopy.size) // инициализатор размера множества
{
// cout << size << " " << manyToCopy.getSize() << " " << manyToCopy.getPtr()->getSize() << std::endl;
ptr = new Matrix [size]; // выделить место в памяти для матрицы
for (int ix = 0; ix < size; ix++) // перераспределяем выделенную память
ptr[ix].setSize(manyToCopy.getSizeRow(), manyToCopy.getSizeCol()); // количество строк и столбцов
for (int ix = 0; ix < size; ix++) // обнуляем множество
for (int jx = 0; jx < ptr->getSizeMat(); jx++)
for (int zx = 0; zx < ptr->getPtr()->getSize(); zx++)
ptr[ix][jx][zx] = manyToCopy[ix][jx][zx];// заполняем множество
}
Many::~Many() // десструктор класса Many
{
delete [] ptr; // освободить память, удалив матрицу
}
// перегруженный оператор вывода для класса Matrix (вывод элементов массива на экран)
ostream &operator<< (ostream &output, const Many &obj)
{
if (obj.getSizeMany() == 0)
cout << "Множество пустое!\n";
for (int ix = 0; ix < obj.getSizeMany(); ix++)
{
for (int jx = 0; jx < obj.getSizeRow(); jx++)
{
for (int zx = 0; zx < obj.getSizeCol(); zx++)
{
output << setw(5) // под каждое число выделяется 5 позиций
<< obj.ptr[ix][jx][zx];
}
cout << std::endl;
}
cout << std::endl << "----------------------------------------------------------------------\n";
}
output << std::endl; // перенос маркера на новую строку
return output; // позволяет множественный вывод, типа cout << x << y << z << ...
}
// перегруженный оператор ввода, для заполнения матрицы с клавиатуры
istream &operator>> (istream & input, Many &obj)
{
for (int ix = 0; ix < obj.size; ix++)
for (int jx = 0; jx < obj.getSizeRow(); jx++)
for (int zx = 0; zx < obj.getSizeCol(); zx++)
input >> obj.ptr[ix][jx][zx]; // заполняем множество
return input; // позволяет множественный ввод, типа cin >> x >> y >> z >> ...
}
// перегруженный оператор взятия индекса
Matrix &Many::operator[] (int subscript)
{
if(subscript < 0 || subscript >= size)
{
std::cerr << "\n Ошибка индекса2: " << subscript << std::endl;
exit(1); // завершить работу программы, неправильный индекс
}
return ptr[subscript]; // возврат ссылки на элемент массива
}
int Many::getSizeMany() const // возвратить количество элементов множества
{
return size;
}
void Many::getMany() // вывод массива
{
for (int ix = 0; ix < getSizeMany(); ix++)
{
for (int jx = 0; jx < getSizeRow(); jx++)
{
for (int zx = 0; zx < getSizeCol(); zx++)
{
cout << setw(5) // под каждое число выделяется 5 позиций
<< ptr[ix][jx][zx];
}
cout << std::endl;
}
cout << std::endl << "----------------------------------------------------------------------\n";
}
cout << std::endl; // новая строка
}
void Many::setMany() // заполнение массива
{
for (int ix = 0; ix < getSizeMany(); ix++)
for (int jx = 0; jx < getSizeRow(); jx++)
for (int zx = 0; zx < getSizeCol(); zx++)
cin >> ptr[ix][jx][zx]; // ввод элементов множества с клавиатуры
}
const Many &Many::operator= (const Many &right) // оператор присваивания
{
if (&right != this) // чтобы не выполнялось самоприсваивание
{
if (size != right.getSizeMany() ||
getSizeRow() != right.getSizeRow() || getSizeCol() != right.getSizeCol())
{
delete [] ptr; // освободить пространство
size = right.getSizeMany(); // установить нужный размер множества
ptr = new Matrix [size]; // выделить память под копируемое множество
for (int ix = 0; ix < size; ix++) // перераспределяем выделенную память
ptr[ix].setSize(right.getSizeRow(), right.getSizeCol());
}
for (int ix = 0; ix < size; ix++)
for (int jx = 0; jx < ptr->getSizeMat(); jx++)
for (int zx = 0; zx < ptr->getPtr()->getSize(); zx++)
ptr[ix][jx][zx] = right.ptr[ix][jx][zx]; // скопировать массив
}
return *this; // разрешает множественное присваивание, например x = t = e
}
bool Many::operator== (const Many &right) const// оператор сравнения
{
if (size != right.getSizeMany() ||
getSizeRow() != right.getSizeRow() || getSizeCol() != right.getSizeCol())
return false; // матрицы с разным количеством элементов
for (int ix = 0; ix < size; ix++)
for (int jx = 0; jx < ptr->getSizeMat(); jx++)
for (int zx = 0; zx < ptr->getPtr()->getSize(); zx++)
if (ptr[ix][jx][zx] != right.ptr[ix][jx][zx])
return false; // матрицы не равны
return true; // матрицы равны
}
Many &Many::operator- (void) // оператор удаления элемента по номеру
{
Many temp(*this); // временно сохраняем текущее множество
delete [] ptr; // удаляем старое множество
size -= 1; // изменяем текущий размер
ptr = new Matrix [size]; // выделить место в памяти для множества
for (int ix = 0; ix < size; ix++) // перераспределяем выделенную память
ptr[ix].setSize(temp.getSizeRow(), temp.getSizeCol()); // количество строк и столбцов
for (int ix = 0; ix < size; ix++)
{
for (int jx = 0; jx < temp.getSizeRow(); jx++)
for (int zx = 0; zx < temp.getSizeCol(); zx++)
ptr[ix][jx][zx] = temp[ix][jx][zx];// заполняем множество
} //конец for
return *this;
}
Many Many::operator- (const Many &right) // разница двух множеств
{
if (size != right.getSizeMany() ||
getSizeRow() != right.getSizeRow() || getSizeCol() != right.getSizeCol())
{
cout << "Множества разного размера!\n";
exit(1); // завершить работу программы
}
Many result(*this);
for (int ix = 0; ix < result.getSizeMany(); ix++)
for (int jx = 0; jx < result.getSizeRow(); jx++)
for (int zx = 0; zx < result.getSizeCol(); zx++)
result.ptr[ix][jx][zx] = ptr[ix][jx][zx] - right.ptr[ix][jx][zx];
return result; // вернуть сумму
}
Many Many::operator+ (const Many &right) // объединение двух множеств
{
if (getSizeRow() != right.getSizeRow() || getSizeCol() != right.getSizeCol())
{
cout << "Множества разного размера!\n";
exit(1); // завершить работу программы
}
int num = size + right.getSizeMany(); // количество элементов нового множества
Many result(num, right.getSizeRow(), right.getSizeCol() );
for (int ix = 0; ix < getSizeMany(); ix++)
for (int jx = 0; jx < getSizeRow(); jx++)
for (int zx = 0; zx < getSizeCol(); zx++)
result.ptr[ix][jx][zx] = ptr[ix][jx][zx];
int ctr = 0;
for (int ix = getSizeMany(); ix < result.getSizeMany(); ix++)
{
for (int jx = 0; jx < result.getSizeRow(); jx++)
for (int zx = 0; zx < result.getSizeCol(); zx++)
result.ptr[ix][jx][zx] = right.ptr[ctr][jx][zx];
ctr++;
}
return result; // вернуть объединенные множества
}
Many Many::operator+= (const Many &right) // объединение двух множеств
{
if (getSizeRow() != right.getSizeRow() || getSizeCol() != right.getSizeCol())
{
cout << "Множества разного размера!\n";
exit(1); // завершить работу программы
}
Many temp(*this);
delete [] ptr;
size += right.getSizeMany(); // количество элементов нового множества
ptr = new Matrix [size];
for (int ix = 0; ix < size; ix++) // перераспределяем выделенную память
ptr[ix].setSize(temp.getSizeRow(), temp.getSizeCol()); // количество строк и столбцов
for (int ix = 0; ix < temp.getSizeMany(); ix++)
for (int jx = 0; jx < temp.getSizeRow(); jx++)
for (int zx = 0; zx < temp.getSizeCol(); zx++)
ptr[ix][jx][zx] = temp.ptr[ix][jx][zx];
int ctr = 0;
for (int ix = temp.getSizeMany(); ix < temp.getSizeMany(); ix++)
{
for (int jx = 0; jx < temp.getSizeRow(); jx++)
for (int zx = 0; zx < temp.getSizeCol(); zx++)
ptr[ix][jx][zx] = right.ptr[ctr][jx][zx];
ctr++;
}
return *this; // вернуть объединенные множества
}
Many Many::operator+ (const Matrix &right) // добавление элемента в множество
{
if (getSizeRow() != right.getSizeMat() || getSizeCol() != right.getPtr()->getSize())
{
cout << "Множества разного размера!\n";
exit(1); // завершить работу программы
}
// int num = size + right.getSizeMany(); // количество элементов нового множества
Many result(size + 1, right.getSizeMat(), right.getPtr()->getSize() );
for (int ix = 0; ix < result.getSizeMany() - 1; ix++)
for (int jx = 0; jx < result.getSizeRow(); jx++)
for (int zx = 0; zx < result.getSizeCol(); zx++)
result.ptr[ix][jx][zx] = ptr[ix][jx][zx];
for (int jx = 0; jx < result.getSizeRow(); jx++)
for (int zx = 0; zx < result.getSizeCol(); zx++)
result.ptr[result.getSizeMany() - 1][jx][zx] = right.getPtr()[jx][zx];
return result; // вернуть объединенные множества
}
Many &Many::operator+= (const Matrix &right) // добавление элемента в множество
{
if (getSizeRow() != right.getSizeMat() || getSizeCol() != right.getPtr()->getSize())
{
cout << "Множества разного размера!\n";
exit(1); // завершить работу программы
}
Many temp(*this);
delete [] ptr;
size += 1; // количество элементов нового множества
ptr = new Matrix [size];
for (int ix = 0; ix < size; ix++) // перераспределяем выделенную память
ptr[ix].setSize(temp.getSizeRow(), temp.getSizeCol()); // количество строк и столбцов
for (int ix = 0; ix < temp.getSizeMany(); ix++)
for (int jx = 0; jx < temp.getSizeRow(); jx++)
for (int zx = 0; zx < temp.getSizeCol(); zx++)
ptr[ix][jx][zx] = temp.ptr[ix][jx][zx];
for (int jx = 0; jx < getSizeRow(); jx++)
for (int zx = 0; zx < getSizeCol(); zx++)
ptr[getSizeMany() - 1][jx][zx] = right.getPtr()[jx][zx];
return *this; // вернуть объединенные множества
}
Файл с функцией main(). В этом файле я постарался протестировать все возможности класса Many.
#include <iostream>
using namespace std;
#include "many.h"
#include <cstdlib>
int main()
{
srand(time(NULL));
Many tg1(4, 3, 4); // конструктор с параметрами
// заполнение множества
for (int ix = 0; ix < tg1.getSizeMany(); ix++)
for (int jx = 0; jx < tg1.getSizeRow(); jx++)
for (int zx = 0; zx < tg1.getSizeCol(); zx++)
tg1[ix][jx][zx] = rand() % 100;
cout << "перегруженный оператор вывода:\n" << tg1; // перегруженный оператор вывода
Many tg2(tg1); // конструктор копирования
cout << "Конструктор копирования Many tg2(tg1);:\n" << tg2;
// cin >> tg2; // перегруженный оператор ввода
cout << "Вывод множества с помощщью метода класса Many\n";
tg2.getMany(); // вывод множества с помощщью метода класса Many
// tg2.setMany(); // заполнение множества с помощщью метода класса Many
// cout << tg2;
Many tg3 = tg2; // перегруженный оператор присваивания (коснтруктор по умолчанию)
cout << "Перегруженный оператор присваивания Many tg3 = tg2;\n"<< tg3;
if (tg3 == tg2)
cout << "Множества tg3 и tg2 равны!\n";
cout << "Удаление всех элементов множества tg2\n" << -(-(-(-tg2))); // перегруженный оператор минус (удаление последнего элемента множества)
cout << "Разность множеств (tg3 - tg3)\n" << (tg3 - tg3); // перегруженная операция минус (разность множеств)
cout << "Объединение множеств: (tg3 + tg1)\n" << (tg3 + tg1) ; // перегруженная операция плюс (объединение множеств)
tg1 +=tg3;
cout << "Объединение множеств tg1 +=tg3;:\n" << tg1;
Matrix mt1(3,4);
// заполнение матрицы mt1
for (int ix = 0; ix < mt1.getSizeMat(); ix++)
for (int jx = 0; jx < mt1.getPtr()->getSize(); jx++)
mt1[ix][jx] = 1; // единичная матрица
cout << "tg1 + mt1\n" << (tg1 + mt1); // добавление элемента типа Matrix к множеству типа Many
(tg1+=mt1)+=mt1; // перегрузка оператора сложение-присвоение
cout << "Добавление элемента типа Matrix к множеству типа Many:\n" << tg1;
return 0;
}
Комментарии
Влад Мамай
Скиньте свой ID вк.
Arthur
Здравствуйте. Пишите здесь или мне в вк.
Arthur
#ifndef MASSIV3_H #define MASSIV3_H #include<iostream> using namespace std; #include "massiv2.h" class Massiv3:public Massiv2 { private: Massiv2* mass3; int mass_size3; public: Massiv3(); //конструктор без параметров Massiv3(int d, int m, int n); //конструктор с тремя параметрами Massiv3(Massiv3& cop); //консруктор копирования ~Massiv3(); //деструктор void setMass3(); //ввод элементов массива void setSize(int , int , int ); //создание массива по заданным размерам void getMass3(); //показать массив int getSizeS1(); //вернуть первый размер массива int getSizeS2(); //вернуть второй размер массива int getSizeS3(); //вернуть третий размер массива Massiv3 operator+(Massiv3& ); Massiv3& operator+=(Massiv3& ); Massiv3& operator+=(Massiv2& ); Massiv3 operator+(Massiv2& ); Massiv3& operator=(const Massiv3& ); Massiv3 operator-(Massiv3& ); Massiv3& operator-(int ); bool operator==(Massiv3& ); Massiv2 operator[](int m); friend ostream& operator<<(ostream& , Massiv3& ); friend istream& operator>>(istream& , Massiv3& ); }; #endif // MASSIV3_HArthur
#include "massiv3.h" #include<iostream> #include<cstdlib> #include<iomanip> using namespace std; Massiv3::Massiv3() //конструктор без параметров { mass3 = NULL; mass_size3 = 0; } //----------------------------------------------------- Massiv3::Massiv3(int d, int m, int n) //конструктор с тремя параметрами { mass_size3 = d; mass3 = new Massiv2[d]; for(int x = 0; x<mass_size3; x++) mass3[x] = Massiv2(m, n); } //--------------------------------------------------------- Massiv3::Massiv3(Massiv3& cop) //консруктор копирования { mass_size3 = cop.mass_size3; mass3 = cop.mass3; } //------------------------------------------------------ Massiv3::~Massiv3() //деструктор { delete[]mass3; } //------------------------------------------------------ void Massiv3::setSize(int d, int m, int n) //создание массива по заданным размерам { mass_size3 = d; mass3 = new Massiv2[d]; for(int x = 0; x<mass_size3; x++) mass3[x].setSize(m, n); } //------------------------------------------------------ void Massiv3::setMass3() //ввод элементов массива { for(int x = 0; x<mass_size3; x++) mass3[x].setMass2(); } //---------------------------------------------------- void Massiv3::getMass3() { for(int x= 0; x<mass_size3; x++) { mass3[x].getMass2(); cout<<"\n\n"; } } //----------------------------------------------------------------- int Massiv3::getSizeS1() { return mass_size3; } //---------------------------------------------------------------- int Massiv3::getSizeS2() { return (mass3 ->getSizeStr()); } //-------------------------------------------------------------- int Massiv3::getSizeS3() { return (mass3 ->getSizeStl()); } //---------------------------------------------------------------------- Massiv3 Massiv3::operator+(Massiv3& ms) { if(mass_size3 == ms.mass_size3) { Massiv3 rezult( mass_size3, mass3->getSizeStr(), mass3->getSizeStl() ); for(int x = 0; x<mass_size3; x++) rezult.mass3[x] = mass3[x] + ms.mass3[x]; return rezult; } else cout<<"\nМатрицы имеют разные размеры!\n"; exit(1); } //----------------------------------------------------------------- Massiv3& Massiv3::operator+=(Massiv3& ms) { if(mass_size3 == ms.mass_size3) { for(int x = 0; x<mass_size3; x++) mass3[x] += ms.mass3[x]; return *this; } else cout<<"\nМатрицы имеют разные размеры!\n"; exit(1); } //----------------------------------------------------------------- Massiv3& Massiv3::operator+=(Massiv2& ms)//перегрузка оператора+= { if(ms.getSizeStr() == getSizeS2() && ms.getSizeStl() == getSizeS3()) { Massiv3 temp(*this); //создание временного массива delete []mass3; mass_size3 = temp.mass_size3+1; mass3 = new Massiv2[mass_size3]; for(int x = 0; x<mass_size3-1; x++) mass3[x] = temp.mass3[x]; mass3[mass_size3-1] = ms; return *this; } else cout<<"\nМатрицы имеют разные размеры!\n"; exit(1); } //------------------------------------------------------------- Massiv3 Massiv3::operator+(Massiv2& ms)//перегрузка оператора+ { if(ms.getSizeStr() == getSizeS2() && ms.getSizeStl() == getSizeS3()) { Massiv3 rezult(mass_size3+1, ms.getSizeStr(), ms.getSizeStl() ); for(int x = 0; x<mass_size3; x++) rezult.mass3[x] = mass3[x]; rezult.mass3[mass_size3] = ms; return rezult; } else cout<<"\nМатрицы имеют разные размеры!\n"; exit(1); } //------------------------------------------------------------------- Massiv3& Massiv3::operator=(const Massiv3& ms) //перегрузка оператора = { if(this == &ms) return *this; if(mass3) delete[]mass3; mass3 = ms.mass3; mass_size3 = ms.mass_size3; return *this; } //--------------------------------------------------------------- Massiv3 Massiv3::operator-(Massiv3& ms) { if(mass_size3 == ms.mass_size3) { Massiv3 rezult( mass_size3, mass3->getSizeStr(), mass3->getSizeStl() ); for(int x = 0; x<mass_size3; x++) rezult.mass3[x] = mass3[x] - ms.mass3[x]; return rezult; } else cout<<"\nМатрицы имеют разные размеры!\n"; exit(1); } //------------------------------------------------------------- Massiv3& Massiv3::operator-(int n)//удаление элемента массива { if(n >=0 && n<mass_size3) { Massiv3 temp(*this); delete[]mass3; mass_size3 = temp.mass_size3 - 1; mass3 = new Massiv2[mass_size3]; for(int x = 0, y = 0; x<mass_size3; y++ ) if(y != n) { mass3[x] = temp.mass3[y]; x++; } return *this; } return *this; } //------------------------------------------------------------- bool Massiv3::operator==(Massiv3& ms) { if(mass_size3 != ms.mass_size3) return false; for(int x = 0; x<mass_size3; x++) if(!(mass3[x] == ms.mass3[x])) return false; return true; } //------------------------------------------------------------- Massiv2 Massiv3::operator[](int m) { if(m<0 || m>=mass_size3) exit(1); return mass3[m]; } //------------------------------------------------------------- ostream& operator<<(ostream& s, Massiv3& ms) { for(int x = 0; x<ms.mass_size3; x++) s<<ms.mass3[x]<<"\n\n"; return s; } //--------------------------------------------------------------- istream& operator>>(istream& s, Massiv3& ms) { for(int x = 0; x<ms.mass_size3; x++) s>>ms.mass3[x]; return s; }Arthur
#include<iostream> #include<iomanip> #include<cstdlib> #include<ctime> #include"massiv3.h" using namespace std; const int MAX = 20; //максимальная длина массива void setRand(Massiv3& mas); void setRand(Massiv2& mas); int main() { setlocale(LC_CTYPE,"rus"); cin.unsetf(ios::skipws); //не игнорировать разделители int d, m, n; //стороны матрицы cout<<"Введите размеры матрицы"<<endl; while(true) { cout<<"\nВведите 1-е измерение матрицы(1-20): "; cin>>d; if(cin.good() && (d<1 || d>MAX)) { cout<<"\nНедопустимый размер матрицы.\n"; cin.sync(); continue; } if(cin.good()) { cin.sync(); break; } cout<<"\nНеправильный ввод данных"<<endl; cin.clear(); cin.sync(); } while(true) { cout<<"\nВведите 2-е измерение матрицы(1-20): "; cin>>m; if(cin.good() && (m<1 || m>MAX)) { cout<<"\nНедопустимый размер матрицы.\n"; cin.sync(); continue; } if(cin.good()) { cin.sync(); break; } cout<<"\nНеправильный ввод данных"<<endl; cin.clear(); cin.sync(); } while(true) { cout<<"\nВведите 3-е измерение матрицы(1-20): "; cin>>n; if(cin.good() && (n<1 || n>MAX)) { cout<<"\nНедопустимый размер матрицы.\n"; cin.sync(); continue; } if(cin.good()) { cin.sync(); break; } cout<<"\nНеправильный ввод данных"<<endl; cin.clear(); cin.sync(); } Massiv3 massiv; massiv.setSize(d, m, n); setRand(massiv); cout<<"\nМатрица:\n\n"<<massiv; char menu; Massiv3 rezult; while(true) { if(massiv.getSizeS1() == 0) massiv.setSize(d, m ,n); cin.sync(); cout<<"\nВыберите действие:" <<"\n1 - сложение матриц"// присвоение <<"\n2 - инкреминировать матрицу" <<"\n3 - добавить элемент в матрицу" <<"\n4 - объеденить элемент с матрицей" <<"\n5 - найти разность матриц" <<"\n6 - удалить элемент" <<"\n7 - сравнить по элементам" <<"\n0 - Выход" <<"\n>> "; cin>>menu; cin.sync(); switch(menu) { case '1': { Massiv3 massiv2(massiv.getSizeS1(), massiv.getSizeS2(), massiv.getSizeS3()); //формирование второго массива setRand(massiv2); //заполнение массива cout<<"\nВторая матрица:\n\n"<<massiv2; rezult = massiv + massiv2; cout<<"Результат сложения матриц:\n\n"<<rezult; break; } case '2': { Massiv3 massiv2(massiv.getSizeS1(), massiv.getSizeS2(), massiv.getSizeS3()); //использование конструктора с двумя параметроми setRand(massiv2); cout<<"\nВторая матрица:\n\n"<<massiv2; massiv += massiv2; cout<<"Результат инкреминирования матрицы:\n\n"<<massiv; break; } case '3': { if(massiv.getSizeS1()>=MAX) { cout<<"\nПревышен допустимый размер массива"; break; } Massiv2 massiv2( massiv.getSizeS2(), massiv.getSizeS3()); setRand(massiv2); massiv += massiv2; cout<<"\nМатрица с добавленным элементом\n\n"<<massiv; break; } case '4': { Massiv2 massiv2( massiv.getSizeS2(), massiv.getSizeS3()); setRand(massiv2); rezult = massiv + massiv2; cout<<"\nРезультат объединения матрицы с новым элементом\n\n"<<rezult; break; } case '5': { Massiv3 massiv2(massiv.getSizeS1(), massiv.getSizeS2(), massiv.getSizeS3()); //использование конструктора с одним параметром setRand(massiv2); cout<<"\nВторая матрица:\n\n"<<massiv2; rezult = massiv - massiv2; cout<<"Результат вычитания матриц:\n\n"<<rezult; break; } case '6': { int n; while(true) { cout<<"\nВведите номер элемента который хотите удалить(0 - "<<massiv.getSizeS1()-1<<"):"; cin>>n; if(cin.good() && (n>=0 && n<massiv.getSizeS1()) ) break; cout<<"\nНедопустимый ввод\n"; cin.clear(); cin.sync(); } cout<<"\nМатрица с удаленным элементом:\n\n"<<( massiv-n ); break; } case '7': { Massiv3 massiv2(massiv.getSizeS1(), massiv.getSizeS2(), massiv.getSizeS3()); cout<<"\nВведите вторую матрицу для сравнения:\n"; cin>>massiv2; cout<<massiv2; if(massiv == massiv2) cout<<"\nМатрицы равны"<<endl; else cout<<"\nМатрицы не равны"<<endl; break; } case '0': { return 0; } default: cout<<"Недопустимый ввод!"; } } return 0; } void setRand(Massiv3& mas) { srand( time(0) ); for(int x = 0; x<mas.getSizeS1(); x++) for(int y = 0; y<mas.getSizeS2(); y++) for(int z = 0; z<mas.getSizeS3(); z++) mas[x][y][z] = rand()%100; } void setRand(Massiv2& mas) { srand( time(0) ); for(int x = 0; x<mas.getSizeStr(); x++) for(int y = 0; y<mas.getSizeStl(); y++) mas[x][y] = rand()%100; }Влад Мамай
Влад Мамай
Доброго дня! Как можно с вами связаться на счет этой программы? Нужна помощь.
Arthur
Здравствуйте. Пишите здесь или мне в вк.