Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

(c++)Массив с помощью классов и объектов

17K
24 сентября 2008 года
JKJ
32 / / 20.10.2007
Вообщем с помощью классов и объектов ввести 2 массива и найти общие цифры этих массивов. Вот собсно код ввода этих массивов.
Код:
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();
}


Вопрос следующий:
Получается массив 1 хранится в obj1, массив 2 в obj2. Каким образом передать содержимое этих обьектов в функцию per?
Тоесть меня интересует как вызывать функцию per из main и как собственно в функции per использовать заранее введенные 2 массива.
4.8K
24 сентября 2008 года
anty
89 / / 29.10.2006
эт функция как то не правильно написана...
 
Код:
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++;} }
  }

}

лучше делать так:
 
Код:
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])
          ..................
             ..............
   }
  }
}

В главной функции вызываешь ее
 
Код:
obj1.per(obj2);
или наоборот...
obj2.per(obj1);

Понятна? :)
87
24 сентября 2008 года
Kogrom
2.7K / / 02.02.2008
Дополню то, что сказал anty. Я бы сделал примерно так:

 
Код:
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;
    }
}

В main надо создать массив для результата m3, размерность которого будет равна меньшему n из двух объектов.

PS Немного ступил. Я бы даже не указатель на объект в этом случае передал, а константную ссылку. Переписывать не буду :)
535
25 сентября 2008 года
Нездешний
537 / / 17.01.2008
Код:
#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;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог