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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Ники
1 / 1 / 0
Регистрация: 21.04.2010
Сообщений: 50
#1

СМО - C++

12.10.2011, 13:36. Просмотров 1854. Ответов 3
Метки нет (Все метки)

Как сделать систему массового обслуживания? Может есть уже у кого готовый код? И объясните пожалуйста что такое СТЕК?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2011, 13:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос СМО (C++):

Моделирование СМО - C++
#include<stdio.h> // Функции потокового ввода - вывода #include<conio.h> // Формирование экракна ...

Модель СМО на С++. Реально? - C++
Добрый вечер! Можно ли при помощи языка С++, построить модель СМО? Если да, то может кто помочь, т.е. подсказать, как и с чего лучше начать?

Среднее значение в СМО - C++
В условии дано среднее значение Х заявок в месяц в течении 6 месяцев.Как можно это реализовать получая конкретные числа.Про что почитать?Я...

Модель СМО. Нужен совет ! - C++
Вот задание: Сервис-центр занимается посреднеческой деятельностью по продаже ж\д билетов и делает это по 3-м телефонным линиям. В...

СМО - JavaFX
Условие ОЧЕНЬ запутанное и сложное. Помогите найти ошибку и сделать рабочую прогу.. Даже препод не знает где ошибка, но требует прогу.( ...

СМО - Методы оптимизации
Помогите пожалуйста решить задачу системы массового обслуживания. Определить минимальное значение n; Рассчитать показатели...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 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
440 / 203 / 13
Регистрация: 07.10.2011
Сообщений: 462
12.10.2011, 18:16 #4
нет, здесь используется контейнер STL под названием list (список)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2011, 18:16
Привет! Вот еще темы с ответами:

Модель СМО - GPSS
На вход СМО поступает поток заявок 3-х типов, с вероятностями поступления 0.2, 0.3 и 0.5 соответственно. После обслуживания в S2 заявки...

Одноканальная СМО - GPSS
Не могли бы помочь.Есть задание,я тут вроде как решение получил но хотелось бы удостовериться в правильности и спросить как найти загрузку....

Описание СМО - GPSS
Помогите описать СМО, что бы в 1 прибор транзакт входил 20 раз, во второй - 11, в третий - 8 Схема СМО: p - вероятность перехода ...

Модель СМО - GPSS
Есть простая задача: Заявки поступают в СМО с интервалом 7,2 с, накапливаются в буфере объемом 10 заявок, затем одновременно обрабатываются...


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

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

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