![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
Tribunal |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
у меня такая задача:
В рамках системы массового обслуживания разработать программу для моделирования работы банка,обслуживающего клиентов. Имеется банк,в котором N касс. Клиенты приходят в банк с интервалом F1(N1,N2) минут. Каждый кассир обслуживает клиента в течение F2(N3,N4) минут. Все клиенты находятся в очереди. После того, как кассир обслужил клиента, он может заняться другим клиентом, находящимся в очереди первым. Через определенный промежуток времени (N5 минут) у каждого кассира имеется перерыв (продолжительность N6 минут). После окончания времени работы (T минут ),все клиенты ,которые находятся в банке,должны быть обслужены. Здесь Fi(x,y) -некоторый закон распределения случайной велечины(может быть как равномерным,так и нормальным),зависящей от параметров x и y. Нужен вывод результатов моделирования с указанием всех событий,призошедших в системе и статистика работы кассиров. я хочу попробовать сделать так сказать взаимодействие между классами... вот например объект клиент, объект-обработчик кассир, объект-событие приход,очередь,начало обслуживания,конец обслуживание,и тд только вот конкртено пока ничего сделать не могу.может есть какие-нибудь идеи? или подскажете с чего начать? -------------------- irreparabilium felix olivio rerum
|
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата может есть какие-нибудь идеи? ![]() Есть... Например: 1) класс - "клиент": class TClient { 2) класс - "очередь" (для универсальности сделай шаблонным): template <class T> 3) класс - "кассир" class TCasher { (массив из N объектов TCasher для моделирования касс) 3) класс - "менеджер" - будет заниматься как раз управлением всеми процессами, происходящими в банке: приход клиента (поместили в очередь), проверили кассиров - есть свободный (проверили, не должен ли он отдохнуть, если должен - записали в статистику: "время такое-то, кассир №... - перерыв") - извлекли клиента из очереди, записали статистику: "время: ... клиент ID №... подошел к кассиру № ..." как вариант: кассир САМ проверяет, не пришло ли ему время отдыха, и если он свободен и НЕ должен отдыхать, то посылает сообщение классу - "менеджеру", что, мол, "можно направить ко мне клиента"... НО все проходит через "менеджер" - статистика ведется именно им... |
Tribunal |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
а как насчет взаимодействия классов?
мне особо непонятен именно этот момент... не могли бы вы привести какой-нибудь пример?=) кстати,реализация очереди не помешает=)... только опять же непонятно,как её пименять... -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Сейчас набросаю что-нибудь простое, чтобы понятна была структура...
|
Tribunal |
![]()
Сообщение
#5
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
а статус кассира стоит делать логической величиной?...)
и кстати как поступить с его конструктором? -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Цитата а статус кассира стоит делать логической величиной?...) У кассира может быть больше 2-х состояний: он или занят, или отдыхает, или свободен и ждет клиента, так что здесь придется вводить свой тип - перечисление...Вот такой набросок у меня получился (тестировал на TC++ 3.0, файл переименуй в *.CPP): Прикрепленные файлы ![]() |
Tribunal |
![]()
Сообщение
#7
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
а что он делает и чего не делает?
и можно небольшие пояснения?=) и еще вопрос:когда в классе переменные объвляются вне public,то с ними можно рабтать только внутри этого класса? Сообщение отредактировано: Tribunal - 2.12.2006 20:09 -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Цитата а что он делает и чего не делает? В принципе, делается все, что указано в задании, кроме того, что f1() и f2() возвращают не случайную функцию от 2-х аргументов, а просто случайное число...Цитата можно небольшие пояснения? Позже в программу будут добавлены комментарии... А еще лучше - скажи, где именно непонятно, чтобы очевидные вещи не писать...Цитата когда в классе переменные объвляются вне public,то с ними можно рабтать только внутри этого класса? Не только... Если они объявляются в protected (а это все-таки вне public), то доступ к ним есть из класса-наследника тоже... Кроме того, дружественная функция имеет полные права доступа к private-секциям класса... |
Tribunal |
![]()
Сообщение
#9
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
мне бы смысловую нагрузку того,что написано....
а из конкретного мне не понятны выражения: back -> next = pt; exit(-1); еще там есть строки с разделительными запятыми и последовательными присвоениями...ето как?=) например: if(!this_client) state = _waiting, changed = 1; ...? TCasher(int _id, int _work):ID(_id), work_time(_work), state(_waiting) и кстати,у меня вот в задании всё время измеряется в минутах...я так полагаю,что всё это дело нужно разделять на часы и минуты,так? еще получается нужно задать время начала работы банка и конец работы...а как это сделать,если формат в часах-минутах?...может тогда изменять минутный счетчик...+часовой,если переваливают минуты за 60...хмм...или в программе просто работать только с минутами,а при выводе/вводе переводить в часы-минуты? а в вашем "наброске" что есть work_time,working_time?...current_time я так понимаю и есть глобальный счетчик времени? Сообщение отредактировано: Tribunal - 3.12.2006 7:50 -------------------- irreparabilium felix olivio rerum
|
Tribunal |
![]()
Сообщение
#10
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
а где происходит передача начального значения current_time?здесь?
TManager :: TManager():current_time(0), after_prev_enter(0) -------------------- irreparabilium felix olivio rerum
|
Tribunal |
![]()
Сообщение
#11
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
![]() в чем может быть причина того,что BorlandС++Builder5 ф-ия random считывается с stdlib.h, а в CodeBlocks v1.0 нет?можно ли это исправить? -------------------- irreparabilium felix olivio rerum
|
Tribunal |
![]()
Сообщение
#12
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
я вот попыталась написать ф-ию перевода времени из минут в часы-минуты...
int M,H;<-- глобальные переменные ну и собственно что-то не так...на аргументы ругаются... Сообщение отредактировано: Tribunal - 3.12.2006 9:02 -------------------- irreparabilium felix olivio rerum
|
Алена |
![]()
Сообщение
#13
|
Гость ![]() |
Цитата я вот попыталась написать ф-ию перевода времени из минут в часы-минуты... А зачем функция?cout << "casher #" << i << " goes to rest at:: " << current_time / 60 <<":"<< current_time % 60 << endl; Цитата а из конкретного мне не понятны выражения: 1) Цитата back -> next = pt; 2) Цитата exit(-1); Цитата еще там есть строки с разделительными запятыми и последовательными присвоениями...ето как?=) Про оператор "запятая" не слышала? Выражения, перечисленные через запятую выполняются слева направо, то естьif(!this_client) state = _waiting, changed = 1;аналогично if(!this_client) { А второй приведенный тобой случай - это форма вызова конструктора класса, так инициализируются, например, константные члены класса, ну, и остальные тоже можно инициализировать через запятую, хотя и не обязятельно, а вот константам ты обязана присвоить значения через "оператор - запятая" |
Tribunal |
![]()
Сообщение
#14
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
а в принципе что за оператор -> ?=)
-------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
В Паскале разницу между
X.nextи X^.nextчувствуешь? Второй - выбор поля по указателю... Это как раз и есть -> в С++ |
Tribunal |
![]()
Сообщение
#16
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
может всё-таки дадите комментарии по программе?=)
а то я никак не могу вникнуть в алгоритм=( -------------------- irreparabilium felix olivio rerum
|
Tribunal |
![]()
Сообщение
#17
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
ну или опишите хотя бы сам алгоритм организации очереди и действия менеджера,пожалуйста...
-------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#18
|
Гость ![]() |
Вот откомментированная программа (текст - файл в Unicode):
![]() |
Tribunal |
![]()
Сообщение
#19
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
огромное спасибо!
![]() -------------------- irreparabilium felix olivio rerum
|
Tribunal |
![]()
Сообщение
#20
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
а как насчет того,чтобы через какой-то промежуток времени давать клиенту возможность выбора уйти из очереди или нет,за исключением варианта,что он первый в очереди?
в общем вот здесь я добавила счетчик времени пребывания клиента в очереди.сделала для этого массив клиентов.есть ли в этом смысл? if(after_prev_enter > f1()) и дальше добавила вот это: current_time += 1; может сделать как-то по-другому..подскажите,пожалуйста,Как? ![]() -------------------- irreparabilium felix olivio rerum
|
![]() ![]() |
![]() |
Текстовая версия | 19.06.2025 6:38 |