Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
2 / 2 / 2
Регистрация: 18.03.2012
Сообщений: 253

Модель СМО. Нужен совет !

27.11.2012, 13:19. Показов 1538. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот задание:

Сервис-центр занимается посреднеческой деятельностью по продаже ж\д билетов и делает это по 3-м телефонным линиям. В сервис-центр поступает 75+-10 двзонков в час. Время обслуживания одного дзвонка составляет 2+-1 минута. Заявка что не обслужывается в даний момент, ожидает в очереди. Если заявка ожидает в очереди больше 35 минут - она получает отказ. Смоделировать работу смо в течении 3-х суток. Определить вероятность отказов, вероятность занятости каналов и количество заявок что получили отказ.


Проблема в том что я не знаю как правильно реализовать поступление заявок в очередь и их выбор на обработку: это время меня сбивает... количество заявок задано за один час а как это все сделать под заданое время мне в голову не приходит... ну и еще не знаю как поступать с заявками которые висели в очереди больше 35 минут: каждую минуту пробегать по очереди и удалять из самой очереди , или уже когда заявка подходит к линии на обработку тогда по условию если она висела больше 35 минут , её просто выбрасывать ? первый вариант более подходит к моему заданию но требует много ресурсов, второй почти не требует ресурсов но не совсем по моему заданию, так как заявка может висеть и больше 35 минут...

Кое-что я сделал, а именно я написал(почти) свою очередь :
// queue.cpp
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
#include "queue.h"
#include "element.h"
 
 
void Queue::Enqueue(Element el)
{
   if (head == NULL)     // первый элемент
   {
      head = new Element;
      tail = head;       // head == tail в очереди присутствует один элемент
      head->iValue = el.iValue;
      head->next = NULL;
   }
   else
   {
      tail->next = new Element;
      tail->next->iValue = el.iValue;
      tail->next->next = NULL;
      tail = tail->next;
   }
   size++;
}
 
 
int Queue::isEmpty()
{
   if (getQueueSize() == 0)
      return 1;
   else
      return 0;
}
int Queue::getQueueSize()
{
   return size;
}

// queue.h
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
#ifndef QUEUE_H
#define QUEUE_H
#include "element.h"
#include <iostream.h>
 
 
class Queue
{
   public:
      int size;
      Element* head;
      Element* tail;
 
      Queue()
      {
         size = 0;
       
 
         head = NULL;
         tail = NULL;
      } //default constructor
 
      void Enqueue(Element);
      Element Dequeue();
      int isEmpty();
      int getQueueSize();
     
};
 
#endif
// element.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef ELEMENT_H
#define ELEMENT_H
 
 
class Element
{
   public:
     int iValue;
      Element* next;   // Следующий элемент в очереди
};
 
#endif
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.11.2012, 13:19
Ответы с готовыми решениями:

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

Нужен совет!
Народ вот у меня вопрос если я прочитаю книгу &quot;Программирование. Принцыпы и практика использования C++&quot; и кое что не пойму то стоит ли...

Нужен совет
Хочу начать изучать С++. Посоветуйте какие-нибудь книги или самоучители. Учить буду с нуля. До этого немного учил Паскаль, но понял, что...

6
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
27.11.2012, 14:06
Мысль первая: не надо своих велосипедов. Не та задача, для которой стоит тратиться на реализацию стандартных контейнеров.

Насколько я вижу, тут придется покурить дискретно-событийное моделирование.
Для модели нам понадобятся системное время, список событий и обработчики событий.
События будут примерно такие:
- поступление звонка
- начало обслуживания
- конец обслуживания
- отказ

У каждого события будет время наступления. Цикл обработки примерно следующий:
1. Получили ближайшее во времени событие
2. Установили системное время на время события
3. Вызвали обработчик

Для выхода из цикла можно, например, завести специальное событие, которое будет запланировано на конец моделирования и будет завершать работу программы.
0
2 / 2 / 2
Регистрация: 18.03.2012
Сообщений: 253
27.11.2012, 14:33  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
Мысль первая: не надо своих велосипедов. Не та задача, для которой стоит тратиться на реализацию стандартных контейнеров.

Насколько я вижу, тут придется покурить дискретно-событийное моделирование.
Для модели нам понадобятся системное время, список событий и обработчики событий.
События будут примерно такие:
- поступление звонка
- начало обслуживания
- конец обслуживания
- отказ

У каждого события будет время наступления. Цикл обработки примерно следующий:
1. Получили ближайшее во времени событие
2. Установили системное время на время события
3. Вызвали обработчик

Для выхода из цикла можно, например, завести специальное событие, которое будет запланировано на конец моделирования и будет завершать работу программы.
без очереди никак! мне надо подробно смоделировать данную СМО. Т.е. Поступление дзвонка, помещение дзвонка в очередь, если одна из линий свободна-обработка дзвонка , конец дзвонка , если все линия заняты - ждать освобождения в очереди, или же если дзвонок пребывает в очереди больше 35 минут - дзвонок получает отказ.

с системным времен согласен, но опять же у меня с этим проблемы..

Добавлено через 19 минут
просто у меня заданием предусмотрено наличие очереди, и модель должна быть максимально похожая к реальной системе
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
27.11.2012, 14:33
Я в том смысле, что реализовывать ее руками не надо. std::queue в зубы и вперед. Максимум - своя обертка над очередью.
0
2 / 2 / 2
Регистрация: 18.03.2012
Сообщений: 253
27.11.2012, 14:38  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
Я в том смысле, что реализовывать ее руками не надо. std::queue в зубы и вперед. Максимум - своя обертка над очередью.
вы о шаблонах? елси честно то можна подумать над этим , но опять же не в этом проблема...а проблема...я тупо не доганяю как привязать время к поступлению заявок....
ккстати вот функция рандома для моих параметров т.к. там нужно использовать равномерный закон распределения:
C++
1
2
3
4
5
6
7
8
9
10
11
int rand_d(int t)
{
    float r;
    int da=0, db=t, m=97, a=9, rr;
    float q=x1%m;          
    r=q/m;
    x1=a*x1;
    if (r<0) {r=-1*r;};
    r=da+((db-da)*r);
    return floor(r);
}
Добавлено через 46 секунд
+ это сейчас я над консолью играюсь а потом мне еще надо будет это все дело в Visual C++ перегнать!
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
27.11.2012, 15:06
Пусть система находится в начальном состоянии. Модельное время = 0. Очередь пуста.
Можно разом взять и сгенерировать множество случайных чисел - моменты времени поступления звонков. Создаем пачку объектов-событий, забиваем ими список событий. Далее идем по этому списку, последовательно устанавливаем системное время на время наступления события и обрабатываем это событие.

Upd: Visual C++ - не означает наличие интерфейса.

Добавлено через 12 минут
Upd2: Увидел другую тему с видео в качестве примера - ок, был неправ). Из интереса: это какой курс?
0
2 / 2 / 2
Регистрация: 18.03.2012
Сообщений: 253
27.11.2012, 15:19  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
Пусть система находится в начальном состоянии. Модельное время = 0. Очередь пуста.
Можно разом взять и сгенерировать множество случайных чисел - моменты времени поступления звонков. Создаем пачку объектов-событий, забиваем ими список событий. Далее идем по этому списку, последовательно устанавливаем системное время на время наступления события и обрабатываем это событие.

Upd: Visual C++ - не означает наличие интерфейса.

Добавлено через 12 минут
Upd2: Увидел другую тему с видео в качестве примера - ок, был неправ). Из интереса: это какой курс?
2-й курс...курсовая...сначала думал купить, потом передумал, решыл делать сам.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.11.2012, 15:19
Помогаю со студенческими работами здесь

Нужен совет!
Как можно сделать что бы переменную произвольного типа объявленную в одной функции, можно было использовать во всех остальных(все остальные...

Нужен совет
Вообщем написал программу, вкратце : сущ-ет класс человек, а классы менеджер, рабочий и ученый наследуют его св-ва. Нужно обратиться к...

Нужен совет
Всем добрый день. Кто нибудь может поделиться компилятором Турбо Си++ или каким нибудь другим ...? Или подсказать где можно...

Нужен совет:
я учусь в 2-ом курсе на программиста у меня есть базовые знание c++,STL до сих пор работал только с консолью,опыта нету что дальше...

Нужен совет!
Доброго времени суток! Возможно таких тем как эта было уже миллион.. но всё же, хотелось бы услышать ваше мнение. Поставил перед...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru