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

СМО - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Ники
1 / 1 / 0
Регистрация: 21.04.2010
Сообщений: 50
12.10.2011, 13:36     СМО #1
Как сделать систему массового обслуживания? Может есть уже у кого готовый код? И объясните пожалуйста что такое СТЕК?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2011, 13:36     СМО
Посмотрите здесь:

C++ Среднее значение в СМО
Модель СМО на С++. Реально? C++
Модель СМО. Нужен совет ! C++
C++ Моделирование СМО
СМО JavaFX
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
solar_wind
 Аватар для solar_wind
740 / 731 / 39
Регистрация: 06.07.2009
Сообщений: 2,937
Завершенные тесты: 1
12.10.2011, 13:45     СМО #2
Ники, Система массового обслуживания это абстракция.....поидее любая система, которая подходит под определение будет системой массового обслуживания....
какой тут может быть готовый код.....разве что учебный.....

Стэк это такая структура данных.....ну представь трубу которая стоит на одном конце, а сверху в нее бросают шарики, в этом случае достать обратно можно только тот шарик который сверху, вот это и есть стэк.
Ники
1 / 1 / 0
Регистрация: 21.04.2010
Сообщений: 50
12.10.2011, 18:02  [ТС]     СМО #3
Да просто задали такое задание: написать одноканальную абстрактную СМО с ожиданием, где нужно использовать этот стек. А я даже и не знаю, с чего начать

Добавлено через 3 часа 22 минуты
Вот нашел исходник, есть ли тут этот самый стек или нет?
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
#include <iostream>
#include <ctime>
#include <list>
//---------------------------------------------------------------------------
using namespace std;
//---------------------------------------------------------------------------
enum RequestType {firstType = 1, secType = 2}; // Тип заявки.
//---------------------------------------------------------------------------
// Заявка: тип.
struct Request {
    RequestType ReqType;
};
//---------------------------------------------------------------------------
const double BegInterval            = 0; // Начало каждого из интервалов генерации и обработки.
const double EndGenerateFReq        = 5; // Максимальное время генерации заявки 1-го типа.
const double UseFReq                = 4; // Максимальное время обработки заявки 1-го типа.
const double UseSReq                = 4; // Максимальное время обработки заявки 2-го типа.
const int    MaxSReqPos             = 4; // Не далее этого элемента заявка второго типа вернётся в очередь.
//---------------------------------------------------------------------------
// RandTime() генерирует случайное число.
double RandTime() {
    double Val = (rand() * 1.0) / RAND_MAX;
    return Val;
}
//---------------------------------------------------------------------------
// MinTime возвращается из 2-х значений.
double MinTime(double T1, double T2) {
    return ((T1 > T2) ? T2 : T1);
}
//---------------------------------------------------------------------------
// GenAddFReq() генерирует время прихода следующей заявки 1-го типа.
double GenAddFReq() {
    double Val = RandTime();
    double Time = (EndGenerateFReq - BegInterval) * Val + BegInterval;
    return Time;
}
//---------------------------------------------------------------------------
// GenUseFReq() генерирует время обработки следующей заявки 1-го типа.
double GenUseFReq() {
    double Val = RandTime();
    double Time = (UseFReq - BegInterval) * Val + BegInterval;
    return Time;
}
//---------------------------------------------------------------------------
// GenUseSReq() генерирует время обработки заявки 2-го типа.
double GenUseSReq() {
    double Val = RandTime();
    double Time = (UseSReq - BegInterval) * Val + BegInterval;
    return Time;
}
//---------------------------------------------------------------------------
int main() {
    srand(static_cast<unsigned int>(time(NULL)));
    list<RequestType> RequestQueue;
    RequestType STypeReq = secType;
    RequestType FTypeReq = firstType;
    RequestQueue.push_back(STypeReq);
    unsigned int CountFReqs       =   0; // Количество обработанных заявок 1-го типа для вывода статистики.
    unsigned int CountUseFReqs    =   0; // Количество обработанных заявок 1-го типа.
    unsigned int Enter2QueueFReqs =   0; // Количество заявок 1-го типа вошедших в систему.
    double Time                   = 0.0; // Время, минимум между поступлением новой заявки и обработкой текущей.
    double TimeEnter              = 0.0; // Время прихода заявки.
    double TimeClearService       = 0.0; // Время обработки заявки (освобождения ОА)
    double NextEventTime          = 0.0; // Время следующего события.
    double TotalTime              = 0.0; // Общее время моделирования.
    list<RequestType>::iterator PredSReq   = RequestQueue.begin(); // Этот итератор указывает на заявку, 
                                                                   // перед которой надо вставить заявку 2го типа.
    list<RequestType>::iterator tmp        = RequestQueue.begin();
    unsigned long CountOfCalcs =   0; // Количество вычислений.
    double MiddleLenQueue      = 0.0; // Средняя длина после каждого вычисления.
    unsigned long countSecReqs =   0; // Количество заявок 2-го типа.
    unsigned long SumOfCalcs   =   0; // Сумма всех измерений.
    while(true) {
        if(1000 == CountUseFReqs) break;
        TimeEnter = GenAddFReq();
        if(2 == RequestQueue.front()) TimeClearService = GenUseSReq();
        else TimeClearService = GenUseFReq();
        Time = MinTime(TimeEnter, TimeClearService);
        //cout << "[Time]: " << Time << " | " << RequestQueue.front() << endl;
        if(Time == TimeEnter) {
            // Добавляем заявку первого типа.
            RequestQueue.push_back(FTypeReq);
            CountFReqs++;       // Увеличиваем счётчик заявок 1-го типа, для вывод статистики и выхода из цикла.
            Enter2QueueFReqs++; // Увеличиваем общее количество заявок кошедших в систему.
            TotalTime += Time;
            continue;
        }
        else {
            // Обрабатываем заявку.
            if(secType == RequestQueue.front()) {
                // Обрабатываем заявку 2-го типа.
                countSecReqs++;
                RequestQueue.pop_front();
                //TotalTime += Time;
                if(MaxSReqPos >= RequestQueue.size()) {
                    RequestQueue.push_back(STypeReq);
                    continue;
                }
                else {
                    PredSReq = RequestQueue.begin();
                    for(int i = 0; i != 4; i++) PredSReq++;
                    /*
                    PredSReq++;
                    PredSReq++;
                    PredSReq++;
                    PredSReq++;
                    */
                    RequestQueue.insert(PredSReq, STypeReq);
                    continue;
                }
            }
            else {
                // Обрабатываем заявку 1-го типа.
                TotalTime += Time;
                CountUseFReqs++;
                RequestQueue.pop_front();
                SumOfCalcs += static_cast<int>(RequestQueue.size());
                CountOfCalcs++;
                /*
                cout << "Now Queue: " << endl;
                tmp = RequestQueue.begin();
                for(; tmp != RequestQueue.end(); tmp++) cout << *tmp << " ";
                cout << endl;
                */
                if((0 == CountUseFReqs % 100) && (0 != CountUseFReqs)) {
                    MiddleLenQueue = (SumOfCalcs * 1.0) / CountOfCalcs;
                    cout << "----------" << endl;
                    cout << "[Count of requests]: " << CountUseFReqs << endl;
                    cout << "Now length of queue: " << static_cast<unsigned int>(RequestQueue.size()) << endl;
                    cout << "Now middle length of queue: " << MiddleLenQueue << endl;
                    cout << "[countSecReqs]: " << countSecReqs << endl;
                }
            }
        }
    }
    cout << "----------" << endl << "Total modeling time: " << TotalTime << endl;
    cout << "1st. type requests enter: " << Enter2QueueFReqs << endl;
    cout << "1st. type requests out: " << CountUseFReqs << endl;
    cout << "[countSecReqs]: " << countSecReqs << endl;
    int i;
    cin >> i;
    return 0;
}
 Комментарий модератора 
Используйте теги форматирования кода!
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
12.10.2011, 18:16     СМО #4
нет, здесь используется контейнер STL под названием list (список)
Yandex
Объявления
12.10.2011, 18:16     СМО
Ответ Создать тему
Опции темы

Текущее время: 00:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru