Форум программистов, компьютерный форум CyberForum.ru

Переделать готовый пример - C++

Восстановить пароль Регистрация
 
USHЁL
 Аватар для USHЁL
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 93
23.07.2010, 19:07     Переделать готовый пример #1
Добрый день помогите переделать пример.
По заданию сказано:
Перепишите класс класс Stonewt таким образом,чтобы прегрузить все 6 операций сравнения.Операции должны сравнивать члены pounds и возвращать значение типа bool. Напишите программу,которая объявляет массив из 6-и объектов Stonewt и инициализирует первые 3-и из них при объявлении массива. Затем она должна использовать цикл для ввода значений инициализации остальных трёх элементов массива. После этого она должна вывести самый маленький элемент,самый большой,и сколько элементов больше или равны 11 стоунам.(Простейший подход состоит в том,чтобы создать объект Stonewt,инициализированный 11 стоунами,и сравнить с ним другие объекты.)


Сам пример осуществляет перевод стоунов в фунты.
Код
// stonewt.h 
#ifndef STONEWT_H_
#define STONEWT_H_
class Stonewt
{
private:
    enum {Lbs_per_stn = 14};      // фунтов на стоун
    int stone;                    // всего стоунов
    double pds_left;              // дробное число фунтов
    double pounds;                // общий вес в фунтах
public:
    Stonewt(double lbs);          // конструктор в фунтах
    Stonewt(int stn, double lbs); // конструктор в стоунах, lbs
    Stonewt();                    
    ~Stonewt();
    void show_lbs() const;        // просмотр веса в фунтах
    void show_stn() const;        // ------- в стоунах
};
#endif
////////////////////////////////////////////////////////////////////////////

// stonewt.cpp 
#include <iostream>
using std::cout;
#include "stonewt.h"

Stonewt::Stonewt(double lbs)
{
    stone = int (lbs) / Lbs_per_stn;    // целочисленное деление
    pds_left = int (lbs) % Lbs_per_stn + lbs - int(lbs);
    pounds = lbs;
}

Stonewt::Stonewt(int stn, double lbs)
{
    stone = stn;
    pds_left = lbs;
    pounds =  stn * Lbs_per_stn +lbs;
}

Stonewt::Stonewt()          
{
    stone = pounds = pds_left = 0;
}

Stonewt::~Stonewt()         // destructor
{
}

void Stonewt::show_stn() const
{
    cout << stone << " stone, " << pds_left << " pounds\n";
}

void Stonewt::show_lbs() const
{
    cout << pounds << " pounds\n";
}

////////////////////////////////////////////////////////////////////
// stone.cpp -- user-defined conversions
// compile with stonewt.cpp
#include <iostream>
using std::cout;
#include "stonewt.h"
void display(const Stonewt & st, int n);
int main(int argc, char *argv[])
{
    Stonewt pavarotti = 260; 
    Stonewt wolfe(285.7);    // Stonewt wolfe = 285.7;
    Stonewt taft(21, 8);

    cout << "The tenor weighed ";
    pavarotti.show_stn();
    cout << "The detective weighed ";
    wolfe.show_stn();
    cout << "The President weighed ";
    taft.show_lbs();
    pavarotti = 265.8;      
    taft = 325;             //taft = Stonewt(325);
    cout << "After dinner, the tenor weighed ";
    pavarotti.show_stn();
    cout << "After dinner, the President weighed ";
    taft.show_lbs();
    display(taft, 2);
    cout << "The wrestler weighed even more.\n";
    display(422, 2);
    cout << "No stone left unearned\n";
    
    system("PAUSE");
    return EXIT_SUCCESS;
}

void display(const Stonewt & st, int n)
{
    for (int i = 0; i < n; i++)
    {
        cout << "Wow! ";
        st.show_stn();
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
23.07.2010, 19:17     Переделать готовый пример #2
Добавь в класс:

C++
1
2
3
4
5
6
    bool operator < (Stonewt&);
    bool operator > (Stonewt&);
    bool operator == (Stonewt&);
    bool operator != (Stonewt&);
    bool operator <= (Stonewt&);
    bool operator >= (Stonewt&);
Добавь в определение функций:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
bool Stonewt::operator <(Stonewt &Ob)
{
    return (pounds<Ob.pounds);
}
bool Stonewt::operator >(Stonewt &Ob)
{
    return (pounds>Ob.pounds);
}
bool Stonewt::operator ==(Stonewt& Ob)
{
    return (pounds==Ob.pounds);
}
bool Stonewt::operator !=(Stonewt& Ob)
{
    return (pounds!=Ob.pounds);
}
bool Stonewt::operator <=(Stonewt &Ob)
{
    return (pounds<=Ob.pounds);
}
bool Stonewt::operator >=(Stonewt &Ob)
{
    return (pounds>=Ob.pounds);
}
USHЁL
 Аватар для USHЁL
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 93
23.07.2010, 19:36  [ТС]     Переделать готовый пример #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// stonewt.h 
#ifndef STONEWT_H_
#define STONEWT_H_
class Stonewt
{
private:
    enum {Lbs_per_stn = 14};      // фунтов на стоун
    int stone;                    // всего стоунов
    double pds_left;              // дробное число фунтов
    double pounds;                // общий вес в фунтах
public:
    Stonewt(double lbs);          // конструктор в фунтах
    Stonewt(int stn, double lbs); // конструктор в стоунах, lbs
    Stonewt();                    
    ~Stonewt();
    void show_lbs() const;        // просмотр веса в фунтах
    void show_stn() const;        // ------- в стоунах
     bool operator < (Stonewt&);
     bool operator > (Stonewt&);
     bool operator == (Stonewt&);
     bool operator != (Stonewt&);
     bool operator <= (Stonewt&);
     bool operator >= (Stonewt&);
 
};
#endif
////////////////////////////////////////////////////////////////////////////
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// stonewt.cpp 
#include <iostream>
using std::cout;
#include "stonewt.h"
 
Stonewt::Stonewt(double lbs)
{
    stone = int (lbs) / Lbs_per_stn;    // целочисленное деление
    pds_left = int (lbs) % Lbs_per_stn + lbs - int(lbs);
    pounds = lbs;
}
 
Stonewt::Stonewt(int stn, double lbs)
{
    stone = stn;
    pds_left = lbs;
    pounds =  stn * Lbs_per_stn +lbs;
}
 
Stonewt::Stonewt()          
{
    stone = pounds = pds_left = 0;
}
 
Stonewt::~Stonewt()         // destructor
{
}
 
void Stonewt::show_stn() const
{
    cout << stone << " stone, " << pds_left << " pounds\n";
}
 
void Stonewt::show_lbs() const
{
    cout << pounds << " pounds\n";
}
 
bool Stonewt::operator <(Stonewt &Ob)
{
        return (pounds<Ob.pounds);
}
bool Stonewt::operator >(Stonewt &Ob)
{
        return (pounds>Ob.pounds);
}
bool Stonewt::operator ==(Stonewt& Ob)
{
        return (pounds==Ob.pounds);
}
bool Stonewt::operator !=(Stonewt& Ob)
{
        return (pounds!=Ob.pounds);
}
bool Stonewt::operator <=(Stonewt &Ob)
{
        return (pounds<=Ob.pounds);
}
bool Stonewt::operator >=(Stonewt &Ob)
{
        return (pounds>=Ob.pounds);
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
////////////////////////////////////////////////////////////////////
// stone.cpp
#include <iostream>
using std::cout;
#include "stonewt.h"
void display(const Stonewt & st, int n);
const int STN = 6;
int main(int argc, char *argv[])
{
    Stonewt arrStone[STN] = {
                               Stonewt pavarotti(260), // dlya inizcializaczii ispolzuetsya konstruktor
                               Stonewt wolfe(285.7),
                               Stonewt taft(21, 8),
                            };
    cout<<"Vvedite znachenia dlya ostavshihsya "<< STN - 3 << "objectov\n";                       
    for(int iSTN = 3;iSTN < STN;iSTN++)
    {
        int st;
        double lb;
        cin>>st>>lb;
        arrStone[iSTN] = Stonewt(st,lb);// neznimau,kak zdes' sdelat' vibor dlya raznih konstruktorov(... = Stonewt(..,..) or ... = Stonewt(..)??
    }
    
    
    double minElement = arrStone[0].pounds;
    double maxElement = arrStone[0].pounds;
    for(int i = 0;i < STN;i++)// nahodim min i max vnutri massiva objectov
    {
        if(arrStone[i].pounds < minElement)
         minElement = double(arrStone[i].pounds);
         if(arrStone[i].pounds > maxElement)
         maxElement = double(arrStone[i].pounds);
    }
    cout<<"minimal element of arrStone = "<<minElement<<endl;
    coun<<"maximal element of arrStone = "<<maxElement<<endl;
        
    
    Stonewt ofs(11);//aka object_of_sravnenie
    int m;// <
    int b;// >
    int rr;// ==
    int notr;// !=
    
    for(int i = 0;i < STN;i++)// sravnivaem arrStone s ofs
    {
        if(arrStone[i].pounds < ofs.pounds)
         m = i;
          else if(arrStone[i] > ofs)
           b = i;
            else if(arrStone[i] == ofs)
             rr = i;
              else
               notr = i;   // !=
     }
     
          
    cout<<"Object s naibolshim znacheniem 'pounds' "<<arrStone[m]<<endl;
    cout<<"Object s naimenshim znacheniem 'pounds' "<<arrStone[b]<<endl;
    cout<<"Object s ravnim 'pounds' "<<arrStone[rr]<<endl;
    cout<<"Object arrStone 'pounds' ne raven 'pounds' of ofs "<<arrStone[notr]<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
23.07.2010, 19:57     Переделать готовый пример #4
Лови всю прогу...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//stonewt.h
// stonewt.h 
#ifndef STONEWT_H_
#define STONEWT_H_
class Stonewt
{
private:
    enum {Lbs_per_stn = 14};      // фунтов на стоун
    int stone;                    // всего стоунов
    double pds_left;              // дробное число фунтов
    double pounds;                // общий вес в фунтах
public:
    Stonewt(double lbs);          // конструктор в фунтах
    Stonewt(int stn, double lbs); // конструктор в стоунах, lbs
    Stonewt();                    
    ~Stonewt();
    void show_lbs() const;        // просмотр веса в фунтах
    void show_stn() const;        // ------- в стоунах
    bool operator < (Stonewt&);
    bool operator > (Stonewt&);
    bool operator == (Stonewt&);
    bool operator != (Stonewt&);
    bool operator <= (Stonewt&);
    bool operator >= (Stonewt&);
};
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//stonewt.cpp
// stonewt.cpp 
#include <iostream>
using std::cout;
#include "stonewt.h"
 
Stonewt::Stonewt(double lbs)
{
    stone = int (lbs) / Lbs_per_stn;    // целочисленное деление
    pds_left = int (lbs) % Lbs_per_stn + lbs - int(lbs);
    pounds = lbs;
}
 
Stonewt::Stonewt(int stn, double lbs)
{
    stone = stn;
    pds_left = lbs;
    pounds =  stn * Lbs_per_stn +lbs;
}
 
Stonewt::Stonewt()          
{
    stone = pounds = pds_left = 0;
}
 
Stonewt::~Stonewt()         // destructor
{
}
 
void Stonewt::show_stn() const
{
    cout << stone << " stone, " << pds_left << " pounds\n";
}
 
void Stonewt::show_lbs() const
{
    cout << pounds << " pounds\n";
}
bool Stonewt::operator <(Stonewt &Ob)
{
    return (pounds<Ob.pounds);
}
bool Stonewt::operator >(Stonewt &Ob)
{
    return (pounds>Ob.pounds);
}
bool Stonewt::operator ==(Stonewt& Ob)
{
    return (pounds==Ob.pounds);
}
bool Stonewt::operator !=(Stonewt& Ob)
{
    return (pounds!=Ob.pounds);
}
bool Stonewt::operator <=(Stonewt &Ob)
{
    return (pounds<=Ob.pounds);
}
bool Stonewt::operator >=(Stonewt &Ob)
{
    return (pounds>=Ob.pounds);
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//stoun.cpp
#include <iostream>
using std::cout;
#include "stonewt.h"
void display(const Stonewt & st, int n);
int main(int argc, char *argv[])
{
    const int Size=6;
    int count=0;
    Stonewt Arr[Size]={250, 500, 300};
    double array[Size];
    for(int i=Size-3;i<Size;i++)
    {
        std::cout<<"Enter value\n";
        std::cin>>array[i];
        Arr[i]=array[i];
    }
    for(int i=0;i<Size;i++)
    {
        display(Arr[i], 1);
    }
    Stonewt Max=154;
    for(int i=0;i<Size;i++)
    {
        if(Arr[i]>=Max)
            count++;
    }
    std::cout<<"Num of object: "<< count <<'\n';
    Max=Arr[0];
    for(int i=0;i<Size;i++)
    {
        if(Arr[i]>Max)
            Max=Arr[i];
    }
    for(int i=0;i<Size;i++)
    {
        if(Max==Arr[i])
        {
            std::cout<<"Max element is: \n";
            display(Arr[i],1);
        }
    }
    Stonewt Min=Arr[0];
    for(int i=0;i<Size;i++)
    {
        if(Arr[i]<Min)
            Min=Arr[i];
    }
    for(int i=0;i<Size;i++)
    {
        if(Min==Arr[i])
        {
            std::cout<<"Min element is: \n";
            display(Arr[i], 1);
        }
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
 
void display(const Stonewt & st, int n)
{
    for (int i = 0; i < n; i++)
    {
        cout << "Wow! ";
        st.show_stn();
    }
}
Хотя я бы перегрузил операторы ввода-вывода... Но тебе лучше знать. Рабочая.

Добавлено через 10 минут
А можно и так:

C++
1
2
3
4
5
6
7
8
9
10
    for(int i=Size-3;i<Size;i++)
    {
        double pounds=0, stones=0;
        std::cout<<"Enter value or values\n";
        std::cin>>stones>>pounds;
        if(stones==0)
            Arr[i]=Stonewt(pounds);
        else
            Arr[i]=Stonewt(stones, pounds);
    }
USHЁL
 Аватар для USHЁL
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 93
23.07.2010, 20:28  [ТС]     Переделать готовый пример #5
Цитата Сообщение от Lavroff Посмотреть сообщение
for(int i=Size-3;i<Size;i++)
* * * * {
* * * * * * * * double pounds=0, stones=0;
* * * * * * * * std::cout<<"Enter value or values\n";
* * * * * * * * std::cin>>stones>>pounds;
* * * * * * * * if(stones==0)
* * * * * * * * * * * * Arr[i]=Stonewt(pounds);
* * * * * * * * else
* * * * * * * * * * * * Arr[i]=Stonewt(stones, pounds);
* * * * }
А здесь получается,что при запросе ввода нужно указать 0 или просто нажимаем Enter?

А с перегрузкой и operator<< получается его можно использовать вместо функции display()
friend std::ostream & operator<<(std::ostream & os, const Stonewt & s)
{
os<<s.pounds<<endl;
return os;
}
А как реализовать operator>>?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
23.07.2010, 20:35     Переделать готовый пример #6
USHЁL, 0.
Оператор >>? Аналогично.
C++
1
2
3
4
5
friend std::istream & operator >>(std::istream&is, Stonewt&s)
{
std::cout<<"Enter value of pounds\n";is>>s.pounds;
return is;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2010, 11:26     Переделать готовый пример
Еще ссылки по теме:

Не компилируется пример пример! C++
Не могу построить готовый проект C++
C++ Открыть готовый проект

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
24.07.2010, 11:26     Переделать готовый пример #7
Lavroff, по поводу операторов сравнения: операции >, !=, <=, >= легко выводятся из < и == :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
bool operator<(const Type& a, const Type& b) {
  // ...
}
 
bool operator==(const Type& a, const Type& b) {
  // ...
}
 
bool operator>(const Type& a, const Type& b) {
  return b < a;
}
 
bool operator!=(const Type& a, const Type& b) {
  return !(a == b);
}
 
bool operator<=(const Type& a, const Type& b) {
  return !(b < a);
}
 
bool operator>=(const Type& a, const Type& b) {
  return !(a < b);
}
Yandex
Объявления
24.07.2010, 11:26     Переделать готовый пример
Ответ Создать тему
Опции темы

Текущее время: 08:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru