Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C] ООП + массивы, [C] ООП + массивы 
V
    Опции темы
deadlegolas
Дата 28.3.2009, 03:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 19.4.2008

Репутация: нет
Всего: нет



Цитата

Есть 2 массива одинаковой размерности, нужно найти среди их елементов найбольший елемент и вывести имя массива,в котором этот елемент.


Как реализовать без ооп я понимаю,но как с елементами ооп? не понимаю..
буду благодарен за обьяснение\пример..
PM MAIL   Вверх
t_gran
Дата 28.3.2009, 07:08 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

Репутация: 33
Всего: 37



В принципе не очень понятно, изобретать свои костыли или использовать STL. smile

Своими ручками:
Код

#include <iostream>

using namespace std;

class Array
{
   private:
      int *arr;
      int size;
   
   public:
      Array (int size);
      ~Array ();
      void Print ();
      int GetSize () {return size;};
      int operator [] (int index);
};

class Alg
{
   public:
      static int Comparison (Array &arr1, Array &arr2);
};
//----------------------------------------------//
Array::Array (int theSize)
{
   size= theSize;
   arr= new int [size];
   for (int i= 0; i < size; ++i)
      arr[i]= rand() % 89 + 10;
}
//----------------------------------------------//
Array::~Array ()
{
   delete arr;
}
//----------------------------------------------//
void Array::Print ()
{
   for (int i= 0; i < size; ++i)
      cout << arr[i] << " ";
  cout << endl;
}
//----------------------------------------------//
int Array::operator [] (int index)
{
   if (index < 0 || index > size-1)
      return -1;
   return arr[index];
}
//----------------------------------------------//
int Alg::Comparison (Array &arr1, Array &arr2)
{
   int max1= 0, max2= 0, i;
   for (i= 0; i < arr1.GetSize(); ++i)
      if (max1 < arr1[i])
         max1= arr1[i];
   for (i= 0; i < arr2.GetSize(); ++i)
      if (max2 < arr2[i])
         max2= arr2[i];   
   return max1 == max2 ? 0 : max1 > max2 ? -1 : 1;
}
//----------------------------------------------//
int main (int argc, char **argv)
{
   srand (time(NULL));
   Array arr1 (10), arr2(10);
   arr1.Print ();
   arr2.Print ();
   switch (Alg::Comparison(arr1,arr2))
   {
      case 0:
         cout << "Null" << endl;
      break;
      case -1:
         cout << "First" << endl;
      break;
      case 1:
         cout << "Last" << endl;
      break;
   }
   return 0;
}


С помощью STL:
Код

#include <iostream>
#include <iterator>
#include <vector>

using namespace std;

#define _SIZE_ 10

int main (int argc, char **argv)
{
   srand (time(NULL));
   vector <int> arr1, arr2;
   for (int i= 0; i < _SIZE_; ++i)
   {
      arr1.push_back (rand()%89+10);
      arr2.push_back (rand()%89+10);
   }
   copy (arr1.begin(), arr1.end(), ostream_iterator<int>(std::cout, " "));
   cout << endl;
   copy (arr2.begin(), arr2.end(), ostream_iterator<int>(std::cout, " "));
   cout << endl;
   int max1= *max_element (arr1.begin(),arr1.end());
   int max2= *max_element (arr2.begin(),arr2.end());
   if (max1 > max2)
      cout << "First" << endl;
   else if (max1 < max2)
      cout << "Last" << endl;
   else
      cout << "Null" << endl;
   return 0;
}


Немного кривовато, но я думаю пойдёт.


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
deadlegolas
Дата 28.3.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 19.4.2008

Репутация: нет
Всего: нет



Спасибо,да, мне нужно создавать костыли))
но не очень понятно что делает тильда перед Array...  `Array?
И что делает функция 
Код

int Array::operator []

За код спасибо)
PM MAIL   Вверх
zim22
Дата 28.3.2009, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



deadlegolas, тильда - это деструктор.
а функция - это оператор обращения по индексу ко значению элемента.


--------------------
PM MAIL   Вверх
deadlegolas
Дата 28.3.2009, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 19.4.2008

Репутация: нет
Всего: нет



>а функция - это оператор обращения по индексу ко значению элемента. 
а почему не можно обращаться просто arr2[i] ? почему надо использовать этот оператор обращения по индексу?
PM MAIL   Вверх
zim22
Дата 28.3.2009, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



deadlegolas, потому что [] - это операция. такая же как AddTwoValue(int i)
только имя покороче. Для встроенных типов данных эти операции определены. А для пользовательских классов - нужно ручками. Если она нужна конечно.


--------------------
PM MAIL   Вверх
deadlegolas
Дата 28.3.2009, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 19.4.2008

Репутация: нет
Всего: нет



тоесть таким способом можно задавать любым символам любые функции?О_О
круто)
а как ,например, сделать пример где поднести в степень число с помощью символа "*" ? Это ведь реализуемо? не покажите на примере, пожалуйста?
PM MAIL   Вверх
zim22
Дата 28.3.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



deadlegolas, почитайте про перегрузку операторов. там всё написано.


--------------------
PM MAIL   Вверх
deadlegolas
Дата 28.3.2009, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 19.4.2008

Репутация: нет
Всего: нет



А вот такой вот вопрос, по задачке этой же:
Реально ли вывести само имя массива (которое в коде,переменнуая) ? как это можна реализовать?
PM MAIL   Вверх
deadlegolas
Дата 28.3.2009, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 19.4.2008

Репутация: нет
Всего: нет



А вот такой вот вопрос, по задачке этой же:
Реально ли вывести само имя массива (которое в коде,переменнуая) ? как это можна реализовать?
PM MAIL   Вверх
zim22
Дата 28.3.2009, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



deadlegolas, в конструкторе назначайте массиву имя. потом с помощью функции-члена отображайте его.


--------------------
PM MAIL   Вверх
deadlegolas
Дата 28.3.2009, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 19.4.2008

Репутация: нет
Всего: нет



zim22, но это ведь будет не отображение имени переменной? а просто присваемого имени.
PM MAIL   Вверх
deadlegolas
Дата 28.3.2009, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 19.4.2008

Репутация: нет
Всего: нет



Код

#define prin(name) cout <<#name

int a=2
prin(a);



Уже разобрался, вот так реализовал.
всем спасибо. задача решена)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0807 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.