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

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

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

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

31.03.2013, 10:44. Просмотров 492. Ответов 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
Миниатюры
Где ошибка?  
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 копеек....

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

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

Не по теме:

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

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

Не по теме:



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

Не по теме:

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

tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 428
31.03.2013, 15:17  [ТС] #13
Цитата Сообщение от Friday Посмотреть сообщение
скачайте бесплатную Visual Studio 2010 Express, отлично работает
а вообще может быть неправильно заданные значения, для всех груп значений нужно много проверок сделать
Как хорошо, что вы про неё напомнили - унылые примитивные консольные проекты в 2010 версии весили метров по 30, в 12 вроде 2. Код перелопатил, да и у вас же спокойно всё работает... И у меня в вижле заработало тоже
Friday
ну и долго меня небыло...
61 / 57 / 8
Регистрация: 24.03.2013
Сообщений: 173
31.03.2013, 16:00 #14
да неважно сколько весит проект ведь по cpp,h файлам можно где угодно скомпилировать
tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 428
31.03.2013, 16:16  [ТС] #15
Цитата Сообщение от Friday Посмотреть сообщение
да неважно сколько весит проект ведь по cpp,h файлам можно где угодно скомпилировать
Обидно видеть 30 программ по десять строчек, которые весят гиг... Хоть и терабайт, но смысла тогда в ней не видел.
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 ...


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

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

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