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

Реализовать класс Bankomat - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перегрузка >> http://www.cyberforum.ru/cpp-beginners/thread911269.html
Доброго времени суток. Есть учебный пример перегрузки операций >> и <<. #include "stdafx.h" #include <iostream> using namespace std; class PhoneNumber { public: friend ostream &operator << (ostream &, const PhoneNumber &);
C++ Описать структуру с именем BAZA Описать структуру с именем BAZA, содержащую следующие поля: фамилия, имя, отчество, домашний адрес, год рождения, место работы, должность, размер зарплаты. Написать программу, выполняющую следующие действия: Ввод с клавиатуры данных в массив, состоящий из восьми элементов типа BAZA, вывод на экран информации о человеке, чья фамилия введена с клавиатуры. Упорядочить структуры по возрасту (по... http://www.cyberforum.ru/cpp-beginners/thread911261.html
C++ Структура-пара
Поле first — дробное число; поле second — целое полож. число, показатель степени. Реализовать метод Power() — возведение числа first в степень second. Метод должен правильно работать при любых допустимых значениях first и second. Примерная реализация: #include <iostream.h> #include <conio.h> #include <math.h> struct Para { void Read(); void Display();
Пожскажите с функцией sort() или qsort() C++
Есть программа, которая генерирует случайно 10 неповторяющихся чисел от 1 до 10 и записывает их в массив array, вот код: #include<iostream> #include<time.h> using namespace std; int main() { int i,array,pointer,max=0,j; srand(time(NULL)); for(i=0;i<10;i++) {
C++ Описать структуру с именем ZNAK http://www.cyberforum.ru/cpp-beginners/thread911241.html
Описать структуру с именем ZNAK, содержащую следующие поля: фамилия, имя, знак зодиака, дата рождения (массив из трёх чисел). Написать программу, выполняющую следующие действия: Ввод с клавиатуры данных в массив, состоящий из восьми структур типа ZNAK, вывод на экран информации о человеке, чья фамилия введена с клавиатуры. Упорядочить структуры по алфавиту (фамилии).
C++ Распараллеливание циклов Возникли трудности с освоением OpenMP Непонимаю, почему если закоментировать вот этот фрагмент кода, то программа работает вы разы быстрее: //from #pragma omp parallel for schedule(dynamic, pieces) for (int i = 0; i < size; i++) for (int j = 0; j < size; j++) temp = matrix; #pragma omp parallel for schedule(dynamic, pieces) подробнее

Показать сообщение отдельно
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
21.08.2013, 14:15     Реализовать класс Bankomat
Просто так.
Наивная реализация, полный проход по купюрам.
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
#include <iostream>
#include <iterator>
#include <list>
#include <algorithm>
#include <map>
#include <stdexcept>
 
class Atm {
 public:
  Atm() : cash(0), banknotes() {}
  void addBanknote(int banknoteValue) {
    std::list<int>::iterator insertPosition = std::lower_bound(
      banknotes.begin(), banknotes.end(), banknoteValue);
    banknotes.insert(insertPosition, banknoteValue);
  }
  void addBanknotes(const std::list<int> &banknotes) {
    std::list<int> orderedBanknotes(banknotes);
    orderedBanknotes.sort();
    this->banknotes.merge(orderedBanknotes);
    cash += calculateCash(banknotes);
  }
  const std::list<int> &listBanknotes() const {
    return banknotes;
  }
  bool containsAllBanknotes(const std::list<int> &banknotes) {
    std::list<int> orderedBanknotes(banknotes);
    orderedBanknotes.sort();
    return std::includes(this->banknotes.begin(), this->banknotes.end(),
      orderedBanknotes.begin(), orderedBanknotes.end());
  }
  void removeBanknotes(const std::list<int> &banknotes)  throw(std::runtime_error) {
    std::list<int> orderedBanknotes(banknotes);
    orderedBanknotes.sort();
    if (!std::includes(this->banknotes.begin(), this->banknotes.end(),
      orderedBanknotes.begin(), orderedBanknotes.end())) {
      throw std::runtime_error("Not all banknotes are available.");
    }
    for (std::list<int>::const_iterator i = orderedBanknotes.begin();
      i != orderedBanknotes.end(); ++i) {
      this->banknotes.erase(std::find(this->banknotes.begin(),
        this->banknotes.end(), *i));
    }
    cash -= calculateCash(banknotes);
  }
  long getCash() const {
    return cash;
  }
  bool canGetBanknotesForCash(long cash) {
    for (std::list<int>::const_reverse_iterator i = banknotes.rbegin();
      i != banknotes.rend(); ++i) {
      if (cash >= *i) {
        std::cout << "DEBUG: " << *i << ", cash = " << cash << std::endl;
        cash -= *i;
      }
    }
    return cash == 0;
  }
  std::list<int> getBanknotesForCash(long cash) {
    if (cash > cash || cash < 0) {
      throw std::runtime_error("Not enough banknotes.");
    }
    std::list<int> result;
    for (std::list<int>::const_reverse_iterator i = banknotes.rbegin();
      i != banknotes.rend(); ++i) {
      if (cash >= *i) {
        std::cout << "DEBUG: " << *i << ", cash = " << cash << std::endl;
        cash -= *i;
        result.push_back(*i);
      }
    }
    if (cash > 0) {
      throw std::runtime_error("Not enough banknotes to form requested cash.");
    }
    return result;
  }
 private:
  static long calculateCash(const std::list<int> &banknotes) {
    long cash = 0;
    for (std::list<int>::const_iterator i = banknotes.begin(); 
      i != banknotes.end(); ++i) {
      cash += *i;
    }
    return cash;
  }
  long cash;
  std::list<int> banknotes;
};
 
std::ostream &operator<<(std::ostream &stream, const std::list<int> &list) {
  std::list<int>::const_iterator i = list.begin();
  while (i != list.end()) {
    stream << *i;
    if (++i != list.end()) {
      stream << ", ";
    }
  }
  return stream;
}
 
std::ostream &operator<<(std::ostream &stream, const Atm &atm) {
  return stream << "Atm{banknotes=[" <<
    atm.listBanknotes() << "]}";
}
 
int main(int, char**) {
  Atm atm;
  
  atm.addBanknote(10);
  atm.addBanknote(100);
  atm.addBanknote(100);
  atm.addBanknote(100);
  atm.addBanknote(100);
  atm.addBanknote(1000);
  atm.addBanknote(1000);
  atm.addBanknote(1000);
  atm.addBanknote(1000);
  atm.addBanknote(10);
  atm.addBanknote(10);
  atm.addBanknote(10);
  atm.addBanknote(10);
  atm.addBanknote(50);
  atm.addBanknote(50);
  atm.addBanknote(50);
  atm.addBanknote(10);
  atm.addBanknote(500);
  atm.addBanknote(100);
 
  std::cout << atm << std::endl;
 
  int cash = 1700;
  try {
    if (atm.canGetBanknotesForCash(cash)) {
      std::list<int> banknotes = atm.getBanknotesForCash(cash);
      atm.removeBanknotes(banknotes);
      std::cout << "Here you are: " << banknotes << std::endl;
    } else {
      std::cout << "Not enough banknotes to pay out " << cash << std::endl;
    }
  } catch (std::exception &e) {
    std::cout << e.what();
  }
}
 
Текущее время: 18:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru