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

Задача из Лафоре - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти число е http://www.cyberforum.ru/cpp-beginners/thread1008814.html
Найти тысячу знаков числа е используя разложение e = 1 +1/1!+1/2!+1/3!+... В с++
C++ Работа с пользовательскими функциями на языке С++ Здравствуйте! Написал несложную программу на С++. В данный момент времени попытался разбить ее на функции, но она неправильно работает - после разбивки на функции она выдает некорректный результат.Однако если все выражения описаны в одной главной функции main, то расчет правильный. Я думаю, что после разбивки на функции у меня неправильно организован вызов описанных в программе пользовательских... http://www.cyberforum.ru/cpp-beginners/thread1008808.html
C++ Измерение времени переключения контекста
Кто может подсказать, какими способами это возможно реализовать в Windows? Есть ли способы, не прибегая к ассемблеру? Есть мысли на счет включения таймера, затем принудительной смены контекста ф-цией SwitchToThread() и завершения таймера. Но, думаю, это не самое умное, да и точное. Или хотя бы кого мне почитать?:)
задача про ip и классы C++
Описать класс IP-адрес. Для него перегрузить операции <,>, ==, !=(Подробно реализовать лишь <, остальные реализовать с её использованием), « , ». Операция сравнения должна работать так: один IP-адрес считается больше другого, если его подсеть первого больше подсети второго. Считать что маска подсети 255.255.255.0. В файле input.txt находятся IP-адреса(корректные). Считать их из файл и ...
C++ Как назвать переменную зная её String http://www.cyberforum.ru/cpp-beginners/thread1008785.html
Например есть у нас массив из трех стрингов. {a b c}. Я такой считываю и хочу что бы первый символ "в данном случае а" обозвал новую переменную. т.е. string a="11". Т.е. я хочу в 'a' записать новые переменные. Пример" {axy} 1111/11+11= ax/x+y=>a/x=1y string a = "1111"; string x="11"; string y="11";
C++ Аналог функции window() из conio.h Нужен аналог этой функции для Win консоли. То есть нужна функция, которая устанавливает активное окно в консоли (ну тоесть часть экрана) для вывода текста. подробнее

Показать сообщение отдельно
Demelurg
0 / 0 / 0
Регистрация: 12.10.2013
Сообщений: 28

Задача из Лафоре - C++

15.11.2013, 19:18. Просмотров 447. Ответов 3
Метки (Все метки)

есть задачка из Лафоре ->

Модифицируйте класс bMoney из упражнения 12 главы 7 «Массивы и стро-ки», включив арифметические операции, выполненные с помощью пере-груженных операций:

bMoney = bMoney + bMoney
bMoney = bMoney- bMoney
bМоnеу = bMoney* long double (цена за единицу времени, затраченного на изделие)
long double = bMoney/ bMoney(общая цена, деленная на цену за изделие)
bMoney = bMoney/ long double (общая цена, деленная на количество изделий)

Заметим, что операция / перегружена дважды. Компилятор может разли-чить оба варианта, так как их аргументы разные. Помним, что легче вы-полнять арифметические операции с объектами класса bMoney, выполняя
те же операции с его long double данными.
Убедитесь, что программа main() запросит ввод пользователем двух де-нежных строк и числа с плавающей точкой. Затем она выполнит все пять операций и выведет результаты. Это должно происходить в цикле, так,
чтобы пользователь мог ввести еще числа, если это понадобится.
Некоторые операции с деньгами не имеют смысла: bMoney*bMoney не пред-ставляет ничего реального, так как нет такой вещи, как денежный квад-рат; вы не можете прибавить bMoney к long double (что же будет, если рубли
сложить с изделиями?). Чтобы сделать это невозможным, скомпилируйте такие неправильные операции, не включая операции преобразования для bMoney в long double или long double в bMoney. Если вы это сделаете и запи-шете затем выражение типа: bmon2 = bmon1 + widgets; // это не имеет смысла то компилятор будет автоматически преобразовывать widgets в bMoney и выполнять сложение. Без них компилятор будет отмечать такие преобра-зования как ошибки, что позволит легче найти концептуальные ошибки.

Также сделайте конструкторы преобразований явными.
Вот некоторые другие вероятные операции с деньгами, которые мы еще
не умеем выполнять с помощью перегруженных операций, так как они
требуют объекта справа от знака операции, а не слева:

long double * bMoney // Пока не можем это сделать: bMoney возможен только справа
long double / bMoney // Пока не можем это сделать: bMoney возможен только справа
Мы рассмотрим выход из этой ситуации при изучении дружественных
функций в главе 11.


мы должны ввести 2 строки и число с плавающей точкой ето делать в класе ? типа

C++
1
2
3
4
5
6
class bMoney
{
private:
    long double how_products;
    string cost_product;
    string time_one_product;
или в класе оставить только long double а строки вводить из main() ?

Добавлено через 1 час 22 минуты
видимо не помогут решил вот так пока по другому не придумал есле можете подскажите как лутше .

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
string turn( long double num);
 
class bMoney
{
private:
    long double money;
    string stroka;
public:
    bMoney():money(0.0)
    {}
    bMoney(long double mm):money(mm)
    {}
    bMoney(string ss):stroka(ss)
    {}
 
    void getData()
    {
        cin>>money;
        cout<<endl;
    }
    void showData()
    {
        cout<<endl;
        cout<<" Number products = "<<money;                       
        cout<<endl;     
    }
 
 
    void getStr()
    {
        getline(cin,stroka);
        cout<<endl;
    }
    void showStr()
    {
        cout<<endl;
        cout<<" You str mon -> "<<stroka;
        cout<<endl;
    }
 
    string turn( long double m)
        {
            ostringstream strok;
            strok<<m;
            string s1;
            s1 = strok.str();
            s1.insert(0,"$");
 
            return s1;
        }
    bMoney operator+ (bMoney str0)
    {
        int n = 0 , leng1 = str0.stroka.length();
 
        int k = 0 , leng2 = stroka.length();
 
        char strok1[50] , strok2[50];
 
        long double m1 , m2 , m0 ;
 
        for( int i = 0 ; i < leng1 ; i ++ )
        {
            if( isdigit(str0.stroka[i]) || str0.stroka[i] == '.' )
                {
                    strok1[n] = str0.stroka[i];
                    n++;
                }
 
             m1 = atof(strok1);
        }
 
        for( int j = 0 ; j < leng2 ; j++ )
        {
            if( isdigit(stroka[j]) || stroka[j] == '.' )
                {
                    strok2[k] = stroka[j];
                    k++;
                }
 
            m2 = atof(strok2);
        }
 
        m0 = m1 + m2;
        string s = turn(m0);
 
        return s;
    }
 
    
};
 
 
int main()
{
    bMoney str0 , str1 , str2 , money ;
 
    cout<<" Enter money str1    -> ";
    str1.getStr();
    cout<<" Enter money str2    -> ";
    str2.getStr();
 
    cout<<" Enter money as 1 pr -> ";
    money.getData();
 
    str0 = str1 + str2;
    str0.showStr();
 
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru