class mas
{
int n;
int *mm;
public:
mas(int n); //конструктор
~mas(); //деструктор
void vvod(int n); //ввод чисел в массив
};
mas::mas(int n)
{
mm=new int[n];
}
mas::~mas()
{
delete []mm;
}
void mas::vvod(int n)
{
for(int i=0;i<n;i++) {cin>>mm;}
}
Вот нахождение одинаковых цифр в 2-х массивах, где m1-первый массив, m2-второй,m3-массив в который добавляются точки.
void mas::per(int n1,int n2, int *m1, int *m2, int *m3)
{ int f;
for(int i=0;i<n1;i++){
for(int j=0;j<n2;j++)
{ if(m1==m2[j]) {m3[f]==m2[j];f++;} }
}
}
int main()
{
int k1,k2;
cout<<"vvedite kolichestvo elementov v massive 1\n";
cin>>k1;
cout<<"vvedite kolichestvo elementov v massive 2\n";
cin>>k2;
mas obj1(k1);
mas obj2(k1);
cout<<"vvedite dannie v massiv 1\n";
obj1.vvod(k1);
cout<<"vvedite dannie v massiv 2\n";
obj2.vvod(k2);
getch();
}
(c++)Массив с помощью классов и объектов
Код:
Вопрос следующий:
Получается массив 1 хранится в obj1, массив 2 в obj2. Каким образом передать содержимое этих обьектов в функцию per?
Тоесть меня интересует как вызывать функцию per из main и как собственно в функции per использовать заранее введенные 2 массива.
Код:
void mas::per(int n1,int n2, int *m1, int *m2, int *m3)
{ int f;
for(int i=0;i<n1;i++){
for(int j=0;j<n2;j++)
{ if(m1==m2[j]) {m3[f]==m2[j];f++;} }
}
}
{ int f;
for(int i=0;i<n1;i++){
for(int j=0;j<n2;j++)
{ if(m1==m2[j]) {m3[f]==m2[j];f++;} }
}
}
лучше делать так:
Код:
void mas::per(mas m2)
{
for(int i=0;i<n;i++){
for(int j=0;j<m2.n2;j++){
if(mm==m2.mm[j])
..................
..............
}
}
}
{
for(int i=0;i<n;i++){
for(int j=0;j<m2.n2;j++){
if(mm==m2.mm[j])
..................
..............
}
}
}
В главной функции вызываешь ее
Код:
obj1.per(obj2);
или наоборот...
obj2.per(obj1);
или наоборот...
obj2.per(obj1);
Понятна? :)
Код:
void mas::per(mas *obj, int *m3)
{
for (int i = 0;(i < n)&&(i < obj->n); i++)
{
if (mm == obj->mm)
m3 = 1;
else
m3 = 0;
}
}
{
for (int i = 0;(i < n)&&(i < obj->n); i++)
{
if (mm == obj->mm)
m3 = 1;
else
m3 = 0;
}
}
В main надо создать массив для результата m3, размерность которого будет равна меньшему n из двух объектов.
PS Немного ступил. Я бы даже не указатель на объект в этом случае передал, а константную ссылку. Переписывать не буду :)
Код:
#include "iostream.h"
#include "conio.h"
class MyArray
{
int Size;
int *Array;
public:
MyArray(int iSize);
MyArray(const MyArray& Object);
~MyArray();
int GetSize(){ return Size;}
int Get(int Index);
void Set(int Index, int Value);
MyArray Equiv(const MyArray& Object);
friend istream& operator >> (istream& in, MyArray& Object);
friend ostream& operator << (ostream& out, const MyArray& Object);
};
//---------------------------------------------------------------------------
MyArray::MyArray(int iSize)
{
Size = iSize;
Array = new int [Size];
}
//---------------------------------------------------------------------------
MyArray::MyArray(const MyArray& Object)
{
Size = Object.Size;
Array = new int [Size];
for (int i = 0; i < Size; i++)
{
Array = Object.Array;
}
}
//---------------------------------------------------------------------------
MyArray::~MyArray()
{
delete[] Array;
}
//---------------------------------------------------------------------------
int MyArray::Get(int Index)
{
if (Index >= Size)
{
// обработка ошибки
return 0;
}
return Array[Index];
}
//---------------------------------------------------------------------------
void MyArray::Set(int Index, int Value)
{
if (Index >= Size)
{
//обработка ошибки
return;
}
Array[Index] = Value;
}
//---------------------------------------------------------------------------
MyArray MyArray::Equiv(const MyArray& Object)
{
bool *Massiv = new bool [Size];
for (int i = 0; i < Size; i++) Massiv = false;
int iLength = 0;
for (int i = 0; i < Size; i++)
{
for (int j = 0; j < Object.Size; j++)
{
if (Array == Object.Array[j])
{
iLength++;
Massiv = true;
break;
}
}
}
// исключить повторяющиеся числа (если надо)
for (int i = 0; i < Size; i++)
{
if (!Massiv) continue;
for (int j = 0; j < Size; j++)
{
if (Array == Array[j] && i != j)
{
Massiv[j] = false;
iLength--;
}
}
}
MyArray Result(iLength);
int Index = 0;
for (int i = 0; i < Size; i++)
{
if (Massiv) Result.Set(Index++, Array);
}
return Result;
}
//---------------------------------------------------------------------------
istream& operator >> (istream& in, MyArray& Object)
{
for (int i = 0; i < Object.GetSize(); i++)
{
int Value = 0;
in >> Value;
Object.Set(i, Value);
}
return in;
}
//---------------------------------------------------------------------------
ostream& operator << (ostream& out, const MyArray& Object)
{
for (int i = 0; i < Object.GetSize(); i++)
{
out << Object.Get(i) << " ";
}
return out;
}
//---------------------------------------------------------------------------
int main()
{
MyArray ar1(3), ar2(4);
cout << "Input array 1:" << endl;
cin >> ar1;
cout << "Input array 2:" << endl;
cin >> ar2;
cout << "Equivalence values: " << endl << ar1.Equiv(ar2);
getch();
return 0;
}
#include "conio.h"
class MyArray
{
int Size;
int *Array;
public:
MyArray(int iSize);
MyArray(const MyArray& Object);
~MyArray();
int GetSize(){ return Size;}
int Get(int Index);
void Set(int Index, int Value);
MyArray Equiv(const MyArray& Object);
friend istream& operator >> (istream& in, MyArray& Object);
friend ostream& operator << (ostream& out, const MyArray& Object);
};
//---------------------------------------------------------------------------
MyArray::MyArray(int iSize)
{
Size = iSize;
Array = new int [Size];
}
//---------------------------------------------------------------------------
MyArray::MyArray(const MyArray& Object)
{
Size = Object.Size;
Array = new int [Size];
for (int i = 0; i < Size; i++)
{
Array = Object.Array;
}
}
//---------------------------------------------------------------------------
MyArray::~MyArray()
{
delete[] Array;
}
//---------------------------------------------------------------------------
int MyArray::Get(int Index)
{
if (Index >= Size)
{
// обработка ошибки
return 0;
}
return Array[Index];
}
//---------------------------------------------------------------------------
void MyArray::Set(int Index, int Value)
{
if (Index >= Size)
{
//обработка ошибки
return;
}
Array[Index] = Value;
}
//---------------------------------------------------------------------------
MyArray MyArray::Equiv(const MyArray& Object)
{
bool *Massiv = new bool [Size];
for (int i = 0; i < Size; i++) Massiv = false;
int iLength = 0;
for (int i = 0; i < Size; i++)
{
for (int j = 0; j < Object.Size; j++)
{
if (Array == Object.Array[j])
{
iLength++;
Massiv = true;
break;
}
}
}
// исключить повторяющиеся числа (если надо)
for (int i = 0; i < Size; i++)
{
if (!Massiv) continue;
for (int j = 0; j < Size; j++)
{
if (Array == Array[j] && i != j)
{
Massiv[j] = false;
iLength--;
}
}
}
MyArray Result(iLength);
int Index = 0;
for (int i = 0; i < Size; i++)
{
if (Massiv) Result.Set(Index++, Array);
}
return Result;
}
//---------------------------------------------------------------------------
istream& operator >> (istream& in, MyArray& Object)
{
for (int i = 0; i < Object.GetSize(); i++)
{
int Value = 0;
in >> Value;
Object.Set(i, Value);
}
return in;
}
//---------------------------------------------------------------------------
ostream& operator << (ostream& out, const MyArray& Object)
{
for (int i = 0; i < Object.GetSize(); i++)
{
out << Object.Get(i) << " ";
}
return out;
}
//---------------------------------------------------------------------------
int main()
{
MyArray ar1(3), ar2(4);
cout << "Input array 1:" << endl;
cin >> ar1;
cout << "Input array 2:" << endl;
cin >> ar2;
cout << "Equivalence values: " << endl << ar1.Equiv(ar2);
getch();
return 0;
}