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

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

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

СМО - C++

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

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

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

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

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

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

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

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

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

Простая СМО - Visual Basic
Привет форумчане! Может быть у кого нибудь лежит простая СМО,если этот кто нибудь поделится, буду очень очень признателен:)

СМО с отказами - GPSS
Здравствуйте ,помогите пожалуйста. Рассматривается n-канальная система массового обслуживания (СМО) с отказами. Поток заявок,...

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

Смо (M|D|n):(FiFo|m) - Методы оптимизации
Собственно не могу разобраться с смо (M|D|n):(FiFo|m) , поясните пожалуйста формулу в особенности что обозначает буква "D"

СМО типа M/M/2/4 - GPSS
Здравствуйте из методички взял код для моделирования СМО типа M/M/2/4 вот он: mem storage 4 ; определение емкости накопителя ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
439 / 202 / 13
Регистрация: 07.10.2011
Сообщений: 462
12.10.2011, 18:16     СМО #4
нет, здесь используется контейнер STL под названием list (список)
Yandex
Объявления
12.10.2011, 18:16     СМО
Ответ Создать тему
Опции темы

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