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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> pass объект и return объект, задача из книги. 
:(
    Опции темы
Zakary
Дата 5.4.2009, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



задача: необходимо создать массив от нуля до 100 [101]. разрешить юзеру ввести числа от одного до 100. те числа X которые он введет должны быть помечены в массиве как 1. a[x]=1; все остальные - 0. эт легко..

это надо делать с помощью класса.  для теста надо создать два объекта для этого класса, и сделать функцию unionofsets. эта функция будет сравнивать значения в двух массивах, и если в одном или обоих массивах единицы, он записывает 1 в новый массив. если в обоих нули - ноль. это сделать легко.

это мой код. не готовые до конца: 
Код

header file:

#include <iostream>
class integerset
{
public:
    integerset();
    integerset unionOfSets(integerset& ) const;
    integerset intersectionOfSets(integerset&) const;
    void insertElement();
    void setArray(int, int);
    void deleteElement(int);
    void printSet() const;
    bool isEqualTo(integerset& const) const;
private:
        int integerSet[101];
        int b;
    };
implementation file:
#include <iostream>
using namespace std;
#include "integerset.h"

integerset::integerset()

{
for(int i=0;i<101;i++)
    integerSet[i]=0;
}

void integerset::insertElement()
{
    int arrayFig;
    int i;
    cout<<"Enter numbers(999 to stop): ";
    for(int p=0;p<101||i!=999;p++)
    {
    cin>>i;
    if(i<0||i>100)
    {
        cout<<"wrong number"<<endl;
        arrayFig=0;
    }
    else
    arrayFig=1;
    setArray(arrayFig, i);
    }
}

void integerset::setArray(int a, int b)
{
    integerSet[a]=b;
}
integerset &integerset::unionOfSets(integerset&)
{
    int c[101]={0};
    for (i=0;i<101;i++)
    {
        if (integerset[i]==0||b[i]==0)
            c[i]=0;
        else 
            c[i]=1;
    }
}
integerset &integerset::intersectionOfSets(integerset& b)
{
    int c[101]={0};
        for (i=0;i<101;i++)
        {
        if (integerset[i]==1&&b[i]==1)
            c[i]=1;
        else 
            c[i]=0;
        }
}

void integerset::printSet()
{
    int count=0;
    for (int i=0;i<101;i++)
    {
        if (integerSet[i]=1)
            cout<<i<<" ";
        else
            count++;
        if (count=100)
            cout<<"---"<<endl;
    }
}

bool integerset::isEqualTo(const integerset& a)
{
    int count=0;
    for(int i=0;i<101;i++)
    {
        if (integer1[i]!=ineger2[i])
            break;
        else
            count++;
    }
        if (count=100)
            cout<<"The arrays are equal."
}



мне надо чтоб функция unionOfsets (ну и intersectionOfSets и isEqualTo) делала pass(как по-русски? передавала?) объект в функцию и делала return нового объекта. 

КАК это сделать? 

ошибки вот такие выдает: 
Код

1>i:\asdqw\asdqw\integerset.cpp(36) : error C2511: 'integerset &integerset::unionOfSets(integerset &)' : overloaded member function not found in 'integerset'
1>        i:\asdqw\asdqw\integerset.h(3) : see declaration of 'integerset'
1>i:\asdqw\asdqw\integerset.cpp(48) : error C2511: 'integerset &integerset::intersectionOfSets(integerset &)' : overloaded member function not found in 'integerset'
1>        i:\asdqw\asdqw\integerset.h(3) : see declaration of 'integerset'
1>i:\asdqw\asdqw\integerset.cpp(60) : error C2511: 'void integerset::printSet(void)' : overloaded member function not found in 'integerset'
1>        i:\asdqw\asdqw\integerset.h(3) : see declaration of 'integerset'
1>i:\asdqw\asdqw\integerset.cpp(74) : error C2511: 'bool integerset::isEqualTo(const integerset &)' : overloaded member function not found in 'integerset'
1>        i:\asdqw\asdqw\integerset.h(3) : see declaration of 'integerset'


буду благодарен за исправление моего кода. header file правильный скорее всегоsmile 

извините за текст. просто книжка на английском по русски сложно сформулировать. если чего-то непонятно - напишитеsmile всем спасибо smile

PM MAIL   Вверх
zim22
Дата 5.4.2009, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Zakary, разберись сначала с этим кодом. а потом переделай на свой.
Код
#include <iostream>

class Foo {
public:
  friend std::istream &operator>>(std::istream &, Foo &);
  Foo() {}
  Foo *create_union(const Foo& );
private:
  int array[3];
};
Foo* Foo::create_union(const Foo &foo)
{
  Foo *p = new Foo();

  for (int i = 0; i < 3; i++)
    if (array[i] && foo.array[i])
      p->array[i] = 1;
    else p->array[i] = 0;

  return p;
}

std::istream &operator>>(std::istream &is, Foo &foo)
{
  for (int i = 0; i < 3; i++)
    is >> foo.array[i];
  return is;
}
int main()
{
 Foo first, second; 
 std::cin >> first >> second;

 Foo *result = first.create_union(second);
 
 return 0;
}




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


Шустрый
*


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

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



спасибо большое zim22 очень помогло. остался 1 вопрос, как сделать cout для нового объекта созданного unionом? 

вот готовый код: 
Код

.h
class integerset
{
public:
    integerset();
    integerset *unionOfSets(const integerset& ) const;
    integerset *intersectionOfSets(const integerset&) const;
    void insertElement();
    void deleteElement();
    void setArray(int, int);
    void deleteElement(int);
    void printSet() const;
    bool isEqualTo(const integerset& ) const;
private:
        int integerSet[101];
    };

integerset.cpp
#include <iostream>
using namespace std;
#include "integerset.h"

integerset::integerset()
{
for(int i=0;i<101;i++)
    integerSet[i]=0;
}

void integerset::insertElement()
{
    int arrayFig;
    int i;
    cout<<"Enter numbers to insert in array(999 to stop): "<<endl;
    for(int p=0;p<101||i!=999;p++)
    {
    cin>>i;
    if (i==999)
        break;
    if(i<0||i>100)
    {
        cout<<"wrong number! Please Enter numbers from 0 to 100"<<endl;
    }
    else
    {
    arrayFig=1;
    setArray(arrayFig, i);
    }
    }
}
void integerset::deleteElement()
{
    int arrayFig;
    int i;
    cout<<"Enter numbers to delete from array(999 to stop): "<<endl;
    for(int p=0;p<101||i!=999;p++)
    {
    cin>>i;
    if (i==999)
        break;
    if(i<0||i>100)
    {
        cout<<"wrong number! Please Enter numbers from 0 to 100"<<endl;
    }
    else
    {
    arrayFig=0;
    setArray(arrayFig, i);
    }
    }
}
void integerset::setArray(int a, int b)
{
    integerSet[b]=a;
}
integerset *integerset::unionOfSets(const integerset& integer) const
{
    integerset *p=new integerset();
    for (int i=0;i<101;i++)
    {
        if (integer.integerSet[i]==1||integerSet[i]==1)
            p->integerSet[i]=1;
        else 
            p->integerSet[i]=0;
    }
    return p;
}
integerset *integerset::intersectionOfSets(const integerset& integer) const
{
    integerset *p=new integerset();
    for (int i=0;i<101;i++)
    {
        if (integer.integerSet[i]==0||integerSet[i]==0)
            p->integerSet[i]=0;
        else 
            p->integerSet[i]=1;
    }
    return p;
}
 void integerset::printSet()const
{
    int count=0;
    for (int i=0;i<101;i++)
    {
        if (integerSet[i]==1)
            cout<<i<<" ";
        else
            count++;
        if (count==100)
            cout<<"---"<<endl;
    }
    cout<<endl;
}

bool integerset::isEqualTo(const integerset& integer) const
{
    int count=0;
    for(int i=0;i<101;i++)
    {
        if (integer.integerSet[i]!=integerSet[i])
        {
            cout<<"sets are not equal!";
            return 1;
        }
    }
    cout<<"sets are equal!";
            return 0;
}

test.cpp
#include <iostream>
using namespace std;
#include "integerset.h"
int main()
{
    integerset a, b;
    a.insertElement();
    cout<<"Elements is object a after insertElement(): "<<endl;
    a.printSet();
    a.deleteElement();
    cout<<"Elements is object a after deleteElement(): "<<endl;
    a.printSet();
    b.insertElement();
    b.printSet();
    integerset *setunion = a.unionOfSets(b);
    integerset *setinersection=a.intersectionOfSets(b);

    a.isEqualTo(b);
return 0;
}


PM MAIL   Вверх
zim22
Дата 6.4.2009, 07:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Цитата(Zakary @  6.4.2009,  00:27 Найти цитируемый пост)
 как сделать cout для нового объекта созданного unionом? 

перегрузить оператор << , передав ему в качестве объекта ostream. также, как я перегружал >>
Код

friend ostream &operator<<(std::ostream &os, const integerset &obj)
{
   os << "hello, my dear friend";
  return os;
}


Это сообщение отредактировал(а) zim22 - 6.4.2009, 07:10


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


Шустрый
*


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

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



Спасибо. было очень полезно и интересно smile
PM MAIL   Вверх
Zakary
Дата 29.4.2009, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



люди...в visual studio 2008 express edition пашет.
в unix не компилится...
Цитата

integerset.h:13: error: ISO C++ forbids declaration of âostreamâ with no type
integerset.h:13: error: âostreamâ is neither function nor member function; cannot be declared friend
integerset.h:13: error: expected â;â before â&â token

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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