Форум программистов, компьютерный форум 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 консоли. То есть нужна функция, которая устанавливает активное окно в консоли (ну тоесть часть экрана) для вывода текста. подробнее

Показать сообщение отдельно
Sabbat
 Аватар для Sabbat
135 / 23 / 1
Регистрация: 19.10.2012
Сообщений: 43
15.11.2013, 21:00     Задача из Лафоре
делал я это упражнение изначально поняв что денежное значение должно быть в объекте класса string, но мне кажется что они понимают строку как массив char[].
Мой вариант для string, для char не делал.
Думаю, кто-то сделает попроще для string.
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include <iostream>
#include <string>
#include <cmath>
#include <iomanip>
#include <sstream>
using namespace std;
class bMoney
{
   private:
      long double money;
      int kpt;          //колличество точек после запятой
   public:
      explicit bMoney()
       {money = 0.0; kpt = 0;}
      explicit bMoney(long double m, int k): money(m), kpt(k)
       {}
      bMoney operator+(bMoney m1) //метод для сложения 2-х объектов bMoney
           {
               bMoney temp;
               temp.money = money+m1.money;
               temp.kpt = (kpt>=m1.kpt)?kpt:m1.kpt;
               return temp;
           }
      void operator+(long double ld) 
           {
              cout<<"bad operation"<<endl;
           }     
      bMoney operator-(bMoney m1) //метод для вычитания 2-х объектов bMoney
           {
               bMoney temp;
               temp.money = money-m1.money;
               temp.kpt = (kpt>=m1.kpt)?kpt:m1.kpt;
               return temp;
           }
      bMoney operator*(long double ld) //метод для умножения объекта bMoney на величину типа long double
           {
               bMoney temp;
               temp.money = money*ld;
               temp.kpt = kpt;
               return temp;
           }
     void operator*(bMoney m1) 
           {
               cout<<"bad operation"<<endl;
           }
     long double operator/(bMoney bM) //метод для деления объекта bMoney на объект bMoney
           {
               return money/bM.money;
           }
     bMoney operator/(long double ld) //метод для деления объекта bMoney на величину типа long double
           {
               bMoney temp;
               temp.money = money/ld;
               temp.kpt = kpt;
               return temp;
           }
      void getmoney()//метод для ввода
        {
           string mstr;
           string sch;
           int j;
           int is;
           getline(cin,mstr);
           j=0;
           // Выделение символов цифр и символа точки
             for(int i=0;i<static_cast<int>(mstr.length());i++)
             {
                if((mstr[i]>='0') && (mstr[i]<='9') || mstr[i]=='.')
                 sch[j++]=mstr[i];
             }
            sch[j]='0';
            //Преобразование символов строки в число типа long double
            money = 0.0;
            is=0;
            for(int s=0; s < j; s++) //находим положение точки
              {
                if(sch[s]=='.')
                    is=s;
              }
 
              if (is!=0)
            {
              for(int n=0; n<j; n++)
               {
                 if(n>=is)
                    money+=static_cast<long double>(sch[n+1]-'0')*pow(10.0,is-1-n);
                 else
                    money+=static_cast<long double>(sch[n]-'0')*pow(10.0,is-1-n);
               }
            }
            else
            {
              is=j-1;
              for(int n=0; n<j; n++)
               {
                    money+=static_cast<long double>(sch[n]-'0')*pow(10.0,j-n-1);
               }
            }
              kpt= j-is-1;
        }
      void putmoney() const//метод для вывода 
        {
 
               string ustring;
               string outstring;   //строка на вывод
               stringstream ss;
               ss<<setiosflags(ios::fixed)         //преобразование long double в string
                 <<setiosflags(ios::showpoint)
                 <<setprecision(kpt)
                 <<money<<endl;
                 ustring=ss.str();
               int sz  = ustring.size();                  //размер строки суммы
               int dot = ustring.find(".");               //порядковый номер точки в строке
               int zp=3;                                  //колличество символов через которые ставится запятая
               outstring.insert(0,"$");                   //добавление символа '$' в начало выводимой строки
 
               outstring.insert(1,ustring,0,dot%zp);
               for(int i=0; i<(dot-dot%zp)/zp; i++)
               {
                if((dot%zp)==0)
                    {
                          outstring.insert(i*(1+zp)+1,  ustring,i*zp,zp);
                          if ((dot/zp-i)>1)
                          outstring.insert(i*(1+zp)+zp+1,",");
                    }
                else
                    {
                          outstring.insert(dot%zp+i*(1+zp)+1,",");
                          outstring.insert(dot%zp+i*(1+zp)+2,  ustring,dot%zp+i*zp,zp);
                    }
               }
               if(sz - dot== 2)
                  outstring.insert(outstring.size(),ustring,dot,sz-dot-2);
               else
                  outstring.insert(outstring.size(),ustring,dot,sz-dot-1);
               cout<<outstring<<endl;
        }
};
 
int main()
{
   bMoney mon1, mon2;
   bMoney mon;
   long double numb;
   long double outn;
 
   cout<<"1 (STRING): "; mon1.getmoney();
   cout<<"2 (STRING): "; mon2.getmoney();
   cout<<"(LONG DOUBLE): "; cin>>numb;
 
   mon = mon1 + mon2;   cout<<"s1 + s2 = ";     mon.putmoney();
   mon = mon1 - mon2;   cout<<"s1 - s2 = ";     mon.putmoney();
   mon = mon1 * numb;   cout<<"s1 * ld = ";     mon.putmoney();
   outn = mon1 / mon2;  cout<<"s1 / s2 = "<<outn<<endl;
   mon = mon1 / numb;   cout<<"s1 / ld = ";      mon.putmoney();
   cout<<"s1 * s2 = ";  mon1 * mon2;
   cout<<"s1 + ld = ";  mon1 + numb;
   return 0;
}
 
Текущее время: 21:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru