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

Не работает программа из книги - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Нужно исправить код http://www.cyberforum.ru/cpp-beginners/thread681397.html
Нужно исправить код. Ошибку выдаёт. #include<iostream> #include<cmath> using namespace std; int main() { double x,y,b; cin>>x>>y; cout<<"Znachenie x="<<x<<endl; cout<<"Znachenie y="<<y<<endl;
C++ Гистограмма Помогите, есть задача: с клавиатуры вводится число n < 20, заполнить массив длинной n рандомными числами от 0 до 20 и вывести на экран гистограмму, кол-во символов # в которой будет равно числу элемента в ячейке массива. Пример: при 3 # # # ### 3 1 2 http://www.cyberforum.ru/cpp-beginners/thread681394.html
Возвращаемое значение C++
Как сделать так, что бы в зависимости от подаваемых аргументов, функция возвращала разные значения? Пробовал через шаблоны, но не получилось.
C++ разложение в ряд функции
Прошу помощи, не могу разобраться где у меня ошибка. http://www.picshare.ru/uploads/121026/gs931LH4x8.jpg Нужно выполнить разложение в ряд функции. и что бы значения совпадали в случае функии (справа) и разложения (слева) double y(double x,double eps, int &k) { return log(2*cos(x/2)); }
C++ Разложить в ряд Тейлора http://www.cyberforum.ru/cpp-beginners/thread681323.html
Помогите,срочно пожалуйста!:cry: ex=1+x+x2/2!+x3/3!+...
C++ Объясните в чем разница Здравствуйте! У меня такой вопрос в чем разница записи switch(n) { case 1: cout << end; case 2: cout << endl; } подробнее

Показать сообщение отдельно
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,899
Записей в блоге: 2
Завершенные тесты: 1
26.10.2012, 22:12     Не работает программа из книги
Все исправления кратко прокомментировал
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
#include<iostream>//убрал .h
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
using namespace std;//включил пространство имен std
 
 
class LinkedListObject
{
 public:
  LinkedListObject()
  { addToEnd(); }
  static LinkedListObject* first()
  { return pFirst; }
  LinkedListObject* next()
  { return pNext; }
  void addToEnd();
 protected:
  static LinkedListObject* pFirst;
  LinkedListObject* pNext;
};
 
LinkedListObject* LinkedListObject::pFirst=0;
 
void LinkedListObject::addToEnd()
{
 if (pFirst==0)
 {
  pFirst=this;
 }
 else
 {
  LinkedListObject* pA;
  for (pA=pFirst; pA->pNext; pA=pA->pNext) {}
  pA->pNext=this;
 }
 pNext=0;
}
 
class Account: public LinkedListObject
{
//перенес секцию protected в начало объявления
 protected://Если определяете методы прямо в объявлении класса, тогда перед использованием переменных они должны быть объявлены
  static int count;
  unsigned accountNumber;
  double balance;
 public:
     
  Account::Account(unsigned accNo, double initialBalance=0.0)
  {
   accountNumber=accNo;
   balance=initialBalance;
   count++;
  }
  int accountNo()
  { return accountNumber; }
  double acntBalance()
  { return balance; }
  static int noAccounts()
  { return count; }
  static Account* first()
  { return (Account*)LinkedListObject::first(); }
  Account* next()
  { return (Account*)LinkedListObject::next(); }// Поменял ) на }
  void deposit(double amount)
  { balance+=amount; }
  virtual void withdrawal (double amount)=0;
  void display()
  {
   cout<<type()<<" счет номера "<<accountNumber<<" = "<<balance<<"\n";
  }
  virtual char* type()=0;  
};
 
int Account::count=0;
 
class Checking: public Account
{
 public:
  Checking::Checking(unsigned sccNo, double initialBalance=0.0):
  Account(sccNo, initialBalance) {}//Здесь перепутали имена переменных
  virtual void withdrawal(double amount);
  char* type()
  { return "Чековый"; }
};
 
void Checking::withdrawal(double amount)
{
 if (balance<amount)
 {
  cout<<"Недостаточно денег на счете: баланс равен "<<balance
  <<" ,попытка снять "<<amount<<"\n";
 }
 else
 {
  balance-=amount;
  if (balance<500.00)
  { balance -= 0.20; }
 }
}
 
class Savings: public Account
{
 public:
  Savings::Savings(unsigned accNo, double initialBalance=0.0):
  Account(accNo, initialBalance)//Здесь тоже перепутали(скорее всего копировали)
  { noWithdrawals=0; }
  virtual void withdrawal(double amount);
  char* type()
  { return "Сберегательный"; }
 protected:
  int noWithdrawals;
};
 
void Savings::withdrawal(double amount)
{
 if (balance<amount)
 {
  cout<<"Недостаточно денег на счете: баланс равен "<<balance
  <<" ,попытка снять "<<amount<<"\n";
 }
 else
 {
  if (++noWithdrawals>1)
  { balance -= 5.00; }
  balance-=amount;
 }
}
//прототипы
unsigned getAccntNo();
void process(Account* pAccount);
void getAccounts();
void displayReslts();
 
//main - сбор и вывод данных
void displayResult();//Добавил прототип функции перед main, чтобы было нагляднее. Лучше это сделать в начале файла
int main(int nArg, char* pszArgs[])
{setlocale(LC_CTYPE, "rus");
 getAccounts();
 displayResult();//Перепутали имя функции функции
 return 0;
}
 
void getAccounts()
{
 Account* pA;
 char accountType;
 while(1)
 {
  cout<<"Нажмите S для сберегательных счетов, С для чековых, Х для выхода: ";
  cin>>accountType;
  switch (accountType)
  {
   case 'c':
   case 'C':
    pA=new Checking(getAccntNo());
    break;
   case 's':
   case 'S':
    pA=new Savings(getAccntNo());
    break;
   case 'x':
   case 'X':
    return;
   default:
    cout<<"Неверный ввод.\n";
  }
  process(pA);
 }
}
 
void displayResult()
{
 double total=0.0;
 cout<<"Суммы по всем счетам:\n";
 for (Account* pA=Account::first();pA;pA=pA->next())
 {
  pA->display();
  total+=pA->acntBalance();
 }
 cout<<"Всего = "<<total<<"\n";
}
 
unsigned getAccntNo()
{
 unsigned accntNo;
 cout<<"Введите номер счета: ";
 cin>>accntNo;
 return accntNo;
}
 
void process(Account* pAccount)
{
 cout<<"Введите положительную сумму для вклада, отрицательную для снятия, "
 <<"0 для завершения работы\n";
 double transaction;
 do
 {
  cout << ":";
  cin>>transaction;
  if (transaction>0)
  { pAccount->deposit(transaction); }
  if (transaction<0)
  { pAccount->withdrawal(-transaction); }
 } while (transaction!=0);
}
 
Текущее время: 03:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru