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

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

Войти
Регистрация
Восстановить пароль
 
 
tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 432
#1

Где ошибка? - C++

31.03.2013, 10:44. Просмотров 501. Ответов 15
Метки нет (Все метки)

Программа моделирования работы банкомата (пример из книги, почему-то есть ошибка), если надо могу страницы из книги выложить чтобы сверить
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
#include <iostream>
#include <ctime>
#include <cstdlib>
#include "queue.h"
const int MIN_PER_HR = 60;
bool newcustomer (double x); //это новый клиент?
int main () {
    using namespace std;
    srand (time (0));
    cout << "Case study: Bank of Heather Automatic teller\n";
    cout << "Enter max size of queue: ";
    int qs;
    cin >> qs;
    cin.ignore (1);
    Queue line (qs);    //строка очереди поддерживается, если количество клиентов равно qs
    cout << "Enter of number simulation hours: ";
    int hours;          //продолжительность моделирования в часах
    cin >> hours;
    cin.ignore (1);
    long cyclelimit = MIN_PER_HR * hours;       //количество циклов
    cout << "Enter the average number of customers per hour: ";
    double perhour;         //среднее число ежечастных прибытий
    cin >> perhour;
    cin.ignore (1);
    double min_per_cust;    //cреднее время между прибытиями
    min_per_cust = MIN_PER_HR;
    Item temp;          //данные нового клиента
    long turnaways = 0; //уход от полной очереди
    long customers = 0; //присоединенные к очереди
    long served = 0;    //обслуженные во время моделирования
    long sum_line = 0;  //совокупная длина линии
    int wait_time = 0;  //период времени когда автоответчик свободен
    long line_wait = 0; //общее время в линии
    //моделирование
    for (int cycle = 0; cycle < cyclelimit; cycle++) {
        if (newcustomer (min_per_cust)){    //если есть новоприбывший
            if (line.isfull ())
                turnaways++;
            else {
                customers++;
                temp.set (cycle);   //cyсle - время прибытия
                line.enqueue (temp);    //добавление к линии новичка
            }
        }
        if (wait_time >= 0 && line.isempty ()) { //пробовал в условии писать true - served все равно = 0
            line.dequeue (temp);        //сопровождение следующего заказщика 
            wait_time = temp.ptime ();
            line_wait += (cycle - temp.when ());
            ++served;       //ПОЧЕМУ ТО ВСЕГДА 0 ??
        }
        if (wait_time > 0) 
            wait_time--;
        sum_line += line.quecount ();
    };
    if (customers > 0) {
        cout << "customers accepded: " << customers << '\n';
        cout << "\tcustomers served: " << served << '\n';
        cout << "\t\tturnaways: " << turnaways << '\n';
        cout << "average queue size: ";
        cout.precision (2);
        cout.setf (ios_base::fixed, ios_base::floatfield);
        cout.setf (ios_base::showpoint);
        cout << (double) sum_line / cyclelimit << '\n';
        cout    << " average wait time: "
                << (double) line_wait / served << " minutes\n";
    }
    else
        cout << "No customers!\n";
    system ("pause");
    return 0;
};
//х - среднее время в минутах между прибытиями клиентов
//истинно, если есть клиент
bool newcustomer (double x) {
    return ((rand () * x) / RAND_MAX < 1);
};
методы
Кликните здесь для просмотра всего текста
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
#include "queue.h"
#include <cstdlib>          //для  rand ()
Queue::Queue (int qs) : qsize (qs) {
    front = rear = NULL;
    items = 0;
};
Queue::~Queue () {
    Node * temp;
    while (front != NULL) {     //пока очередь не пуста
        temp = front;
        front = front->next;    //вторичная установка указателя для следуюшего элемента     
    };
    delete temp;
};
bool Queue::isempty () const {
    return items == 0;
};
bool Queue::isfull () const {
    return items == qsize;
};
int Queue::quecount () const {
    return items;
};
bool Queue::enqueue (const Item & item) {
    if (isfull ()) {
        return false;
    Node * add =  new Node;     //создание узла
    if (add == NULL) 
        return false;           //оставить, если недоступно
     add->item = item;          //установка указателей узла
     add->next = NULL;
     items++;
     if (front == NULL)         //если очередь пуста
        front = add;            //размещение элемента в начале очереди
    else
        rear->next = add;          //размещение в конце очереди
    rear = add;                     //конечная точка для нового узла
    return true;
    };
};
//размещение начального элемента в переменной item и удаление начального элемента
bool Queue::dequeue (Item & item) {
    if (front == NULL) 
        return false;
    item = front->item;     //установка в item первого элемента в очереди
    items--;
    Node * temp = front;        //сохранение местоположения первого элемента
    front = front->next;        //вторичная установка начала к первому элементу
    delete temp;                //удаление элемента который был ранее первым
    if (items == 0)
        rear = NULL;
    return true;
};
//время прибытия задается переменной when
//а время обработки случайным образом от 1 до 
void Customer::set (long when) {
    processtime = rand () % 3 + 1;
    arrive = when;
};

хэдэр
Кликните здесь для просмотра всего текста
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
//интерфейс для очереди
#ifndef _QUEUE_H_
#define _QUEUE_H_
//содержит элементы очереди customer
class Customer {
    private:
        long arrive;        //время прибытия
        int processtime;    //время обработки
    public:
        Customer () {arrive = processtime = 0;};
        void set (long when);
        long when () const {return arrive;};
        int ptime () const {return processtime;};
};
typedef Customer Item;
class Queue {
    struct Node {Item item; struct Node * next;}; //вдоженная локальная структура для данного класса
    enum {Q_SIZE = 10};
    private:
        Node * front;                   //указатель начала очереди
        Node * rear;                    //указатель конца очереди
        int items;                      //текущее число элементов в очереди
        const int qsize;                   //максимальное число элементов
        //преимущественные определения, предотвращающие общедуступное копирование
        Queue (const Queue & q) : qsize (0) { };
        Queue & operator = (const Queue & q) {return *this;};
    public:
        Queue (int qs = Q_SIZE);        //образование очереди с пределом qs
        ~Queue ();
        bool isempty () const;
        bool isfull () const;
        int quecount () const;
        bool enqueue (const Item & item);       //добавление элемента в конец очереди
        bool dequeue (Item & item);         //удаление элемента из начала очереди
};
#endif
0
Миниатюры
Где ошибка?  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2013, 10:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Где ошибка? (C++):

Вывести на экран количество слов где первая и последняя буквы одинаковы (не понимаю где ошибка) - C++
задан текст нужно вывести на экран количество слов где первая и последняя буквы одинаковы #include &lt;iostream&gt; #include &lt;conio.h&gt; ...

Подскажите, где может быть ошибка (структуры)? (скорее всего где-то амперсенд нужен, все вроде проверил) - C++
написать универсальный тип, который представляет точку на плоскости в координатах (х, у) и в полярных координатах. Написать функцию для...

Укажите где ошибка (ошибка во время выполнения программы) - C++
Здравствуйте, помогите пожалуйста найти ошибки в коде которые возникаю при выполнении программы Картинка с ошибкой внизу поста. Код: ...

Ошибка при компиляции. Где ошибка? (Работа с классом) - C++
Уважаемые форумчане! При компиляции проекта возникает ошибка &quot; undefined reference to `MeterNZiF::MeterNZiF()' &quot; на 7 строку приложения. ...

В чём ошибка.В коде там где коментарий там ошибка поучается. - C++
#include &lt;iostream&gt; #include &lt;Windows.h&gt; using namespace std; class CMyString{ char *pStr; public: ...

Где ошибка? - C++
Помогите, пожалуйста, на сайте дистанционной проверки пишет &quot;Ошибка компиляции&quot;. Пирожок в столовой стоит a рублей и b копеек....

15
Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
31.03.2013, 11:04 #2
Цитата Сообщение от tramp_1-3 Посмотреть сообщение
using namespace std;
Обычно до начала int main(){} ставится.
0
tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 432
31.03.2013, 11:42  [ТС] #3
Цитата Сообщение от Kins Посмотреть сообщение
Обычно до начала int main(){} ставится.
Стараюсь как можно аккуратней работать с пространствами имён, чтобы вошло в привычку. Обычно вообще явно каждый оператор объявляю, но не об этом щас.
0
Friday
ну и долго меня небыло...
61 / 57 / 8
Регистрация: 24.03.2013
Сообщений: 173
31.03.2013, 11:52 #4
Цитата Сообщение от Kins Посмотреть сообщение
Обычно до начала int main(){} ставится.
ну вообще то никто не запрещает использовать пространство имён только там, где оно нужно...
1
tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 432
31.03.2013, 12:59  [ТС] #5
Цитата Сообщение от Friday Посмотреть сообщение
ну вообще то никто не запрещает использовать пространство имён только там, где оно нужно...
Это, конечно, хорошо, но что вы скажете насчет непосредственно вопроса?
0
Friday
ну и долго меня небыло...
61 / 57 / 8
Регистрация: 24.03.2013
Сообщений: 173
31.03.2013, 13:18 #6
Цитата Сообщение от tramp_1-3 Посмотреть сообщение
Это, конечно, хорошо, но что вы скажете насчет непосредственно вопроса?
странно...
1
Миниатюры
Где ошибка?  
tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 432
31.03.2013, 14:00  [ТС] #7
Цитата Сообщение от Friday Посмотреть сообщение
странно...
Вы изменений в код не вносили?
0
Friday
ну и долго меня небыло...
61 / 57 / 8
Регистрация: 24.03.2013
Сообщений: 173
31.03.2013, 14:02 #8
Цитата Сообщение от tramp_1-3 Посмотреть сообщение
Вы изменений в код не вносили?
да нет вроде)
0
tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 432
31.03.2013, 14:28  [ТС] #9
Цитата Сообщение от Friday Посмотреть сообщение
да нет вроде)
Чтож, возможно wxDev-C++ снова чудит (а не я, что удивительно), спасибо.
0
Friday
ну и долго меня небыло...
61 / 57 / 8
Регистрация: 24.03.2013
Сообщений: 173
31.03.2013, 14:31 #10
Цитата Сообщение от tramp_1-3 Посмотреть сообщение
Чтож, возможно wxDev-C++ снова чудит (а не я, что удивительно), спасибо.
скачайте бесплатную Visual Studio 2010 Express, отлично работает

а вообще может быть неправильно заданные значения, для всех груп значений нужно много проверок сделать
1
Tulosba
31.03.2013, 14:33
  #11

Не по теме:

Цитата Сообщение от tramp_1-3 Посмотреть сообщение
Вы изменений в код не вносили?
Цитата Сообщение от Friday Посмотреть сообщение
да нет вроде)
Нужное подчеркнуть.

0
Friday
ну и долго меня небыло...
61 / 57 / 8
Регистрация: 24.03.2013
Сообщений: 173
31.03.2013, 14:35 #12
Цитата Сообщение от Tulosba Посмотреть сообщение

Не по теме:



Нужное подчеркнуть.

Не по теме:

ну если бы вносил, я бы отдельно код выложил, там все от значений зависит, имхо

1
tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 432
31.03.2013, 15:17  [ТС] #13
Цитата Сообщение от Friday Посмотреть сообщение
скачайте бесплатную Visual Studio 2010 Express, отлично работает
а вообще может быть неправильно заданные значения, для всех груп значений нужно много проверок сделать
Как хорошо, что вы про неё напомнили - унылые примитивные консольные проекты в 2010 версии весили метров по 30, в 12 вроде 2. Код перелопатил, да и у вас же спокойно всё работает... И у меня в вижле заработало тоже
0
Friday
ну и долго меня небыло...
61 / 57 / 8
Регистрация: 24.03.2013
Сообщений: 173
31.03.2013, 16:00 #14
да неважно сколько весит проект ведь по cpp,h файлам можно где угодно скомпилировать
0
tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 432
31.03.2013, 16:16  [ТС] #15
Цитата Сообщение от Friday Посмотреть сообщение
да неважно сколько весит проект ведь по cpp,h файлам можно где угодно скомпилировать
Обидно видеть 30 программ по десять строчек, которые весят гиг... Хоть и терабайт, но смысла тогда в ней не видел.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2013, 16:16
Привет! Вот еще темы с ответами:

Где ошибка? - C++
Пишу всё по книге Джесса Либерти &quot;Освой самостоятельно C++ за 21 день&quot; В книге указана следующая програмка. int #include...

Где ошибка ? - C++
Нужна помощь по нахождению ошибки.

Где ошибка? - C++
#include&lt;conio.h&gt; #include&lt;iostream.h&gt; #include&lt;fstream.h&gt; #include&lt;stdio.h&gt; #define i 10 int x; char...

Где ошибка? - C++
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop ...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
31.03.2013, 16:16
Ответ Создать тему
Опции темы

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