Добавил:
t.me Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 семестр / Примеры. Матрица, дружественные и перегрузка-1.docx
Скачиваний:
2
Добавлен:
16.07.2023
Размер:
204.5 Кб
Скачать

Перегрузка операций

  1. Пояснения

Для решения ЛР6 потребуется созданные ранее классы complex и vect, немного модернизированные. Часть материала к лабораторной давалась на лекциях №5-6, там достаточно подробно все описано.

  1. Постановка задачи

  1. Общая задача. Даны два массива Х, У (элементы класса vect). Массивы состоят из комплексных чисел. Подсчитать есть ли равные элементы на соответствующих местах, то есть есть ли xi=yi?, сколько их. Использовать перегрузку == в классе complex

  2. Создать в main массив mas комплексных чисел и решить в main следующую задачу, использовать при решении перегрузку операций в классе complex, необходимую для решения поставленной задачи (номер варианта по списку в журнале).

В примере приведена немного измененная задача. Ищем в массиве mas (типа class vect) количество пар равных чисел, а затем создаем новый массив mas1, в котором убраны все повторения, и массив повторных элементов mas2.

! Реализаций решения данной задачи может быть несколько. Выбирайте ту, что вам понятнее. Соблюдайте все условия задачи!

Обратите внимание на использование различных методов вывода массивов комплексных чисел.

  1. Тестовые примеры

1.

В массиве несколько повторяющихся чисел.

2.

В массиве нет повторных чисел

  1. Метод

//Теперь вы сами сможете написать согласно коду программы

  1. Программа

/*

Для корректной работы программы используем конструктор по умолчанию и метод set_c задания значения комплексного числа.

*/

#include <iostream>

#include <iomanip>

#include <conio.h>

#include <ctime>

using namespace std;

class vect;

class complex{

double re, im;

public:

// complex() {re=0; im=0;}

// complex(int r=1, int i=0) {re=r; im=i;}

void set_c(double Re=0, double Im=0)

{

re=Re; im=Im;

}

double get_c_re() { return re;}

double get_c_im() { return im;}

void print();

bool operator== (complex b)

{

return (re==b.re && im==b.im);

}

};

class vect

{

complex *base;

int size;

public:

vect(int n=1) { size=n; base=new complex[size];}

~vect() {delete [] base;}

void fill_vect();

void print();

void print_table();

int get_size() {return size;}

int& set_size() {return size;}

complex get_elem(int i) {return base[i];}

complex& set_elem(int i) {return base[i];}

};

//заполняем массив комплексных чисел

void vect::fill_vect()

{

srand(time(0));

double re, im;

int t;

cout<<"Choose vector filling: 1 - random; 2 - hand\n";

do { cin>>t;} while (t!=1&&t!=2);

cout<<"Input "<<size<<" complex values (<re>+<im>i)\n";

for (int i=0;i<size;i++)

{

if (t==1) {re=rand()%7-3;im=rand()%7-3;}

else cin>>re>>im;

base[i].set_c(re,im);

}

}

void complex::print()

{

cout<<re;

if (im >=0) cout<<"+";

cout<<im<<"i";

}

void vect::print()

{

for (int i=0;i<size;i++)

{

base[i].print();

cout<<" ";

}

}

void vect::print_table()

{

cout<<endl<<setw(5)<<"re: ";

for (int i=0;i<size;i++)

cout<<setw(3)<<base[i].get_c_re()<<" ";

cout<<endl<<setw(5)<<"im: ";

for (int i=0;i<size;i++)

cout<<setw(3)<<base[i].get_c_im()<<" ";

cout<<endl;

}

//главная

int main(void)

{

int i,j, n;

cout<<"Input size of massiv ";

do { cin>>n;} while (n<2);

vect mas(n);

mas.fill_vect();

mas.print();

mas.print_table();

//считаем количество равных элементов в массиве

int k=0;

for (i=0;i<mas.get_size()-1;i++)

for (j=i+1;j<mas.get_size();j++)

if (mas.get_elem(i)==mas.get_elem(j)) k++;

cout<<"Количество пар равных элементов "<<k<<endl;

if (k==0)

{

cout<<"В массиве нет повторяющихся чисел";

return 0;

}

//создаем массив без повторений

vect mas1(n);

complex *mas2=new complex[n];

bool f;

mas1.set_elem(0)=mas.get_elem(0);

int n1=1, n2=0;

for (i=1;i<mas.get_size();i++)

{

f=0;//новый элемент

for (j=n1; j>=0;j--)

if (mas.get_elem(i)==mas1.get_elem(j))

f=1; //элемент повторный

if (!f)

{

// cout<<endl<<"New elem ";

// mas.get_elem(i).print();

mas1.set_elem(n1)=mas.get_elem(i);

n1++;

}

else

{

mas2[n2]=mas.get_elem(i);

n2++;

}

}

mas1.set_size()=n1;

cout<<"Массив без повторов: ";

mas1.print();

cout<<endl<<"Массив повторов: ";

for (i=0;i<n2;i++)

{

mas2[i].print();

cout<<" ";

}

return 0;

}

17