Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
USHЁL
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 93
#1

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

23.07.2010, 19:07. Просмотров 783. Ответов 6
Метки нет (Все метки)

Добрый день помогите переделать пример.
По заданию сказано:
Перепишите класс класс 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();
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2010, 19:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переделать готовый пример (C++):

DES / AES (Готовый пример или описание реализации различных этапов) - C++
Где можно доходчиво почитать именно о реализации этих алгоритмов, может кто знает и может подсказать. Или же дайте ссылку если где-то есть...

Не знаю как переделать лабу, есть пример - C++
Есть готовая лаба, нужно переделать под другой вариан Помогите, пожалуйста..... Порядок выполнения работы. 1. Выбрать класс АТД в...

Не компилируется пример пример! - C++
Добрый день, я только-только решил начать изучать програмирование на С++! Как учебное пособие использую книгу Стефана Р. Девитса &quot;С++ для...

отредактировать готовый код - C++
Отредактируйте пожалуйста готовый код.ТЗ:Написать программу,коротая выводит с клавиатуры массив из 10 целых чисел,считает среднее...

класс матрица готовый - C++
создал клас матрицы - пользуйтесь ))) Добавлено через 48 секунд main #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

Открыть готовый проект - C++
Есть готовый проект на C++, с открытым кодом. Подскажите, какой программой его открывать. Чтобы доработать, потом прокомпилить и...

6
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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);
}
0
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;
}
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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);
    }
0
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>>?
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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;
}
1
CyBOSSeR
Эксперт С++
2304 / 1674 / 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);
}
1
24.07.2010, 11:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2010, 11:26
Привет! Вот еще темы с ответами:

Не могу построить готовый проект - C++
Привет всем! Пытаюсь открыть проект на C++ сделанный на VS 2005 от компании YATE Раздел Source code&gt;Downloadable&gt;Windows: Это...

Готовый проекты в Visual Studio на С++ - C++
Здравствуйте. Я ищу готовые проекты visual studio на с++. Нужны они мне для метрического анализа для диплома. Несколько открытых...

Как добавить в готовый проект указатели - C++
Часть первая #define _CRT_SECURE_NO_WARNINGS #include &lt;stdio.h&gt;//no #include &lt;stdlib.h&gt;//no #include &lt;conio.h&gt; #include...

как написать готовый код паскаль на с++? - C++
program elmgmv; uses Grt,Graph; var gd,gm,xd,yd:Integer; x,y,z,mx,t,dt,q,m,v,al,vx,vy,vz,fx,fy,fz:real; e,ex,ey,ez,b,bx,by,bz:real;...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru