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

Не могу реализовать очередь (модель дозаправки самолетов в воздухе) - C++

Восстановить пароль Регистрация
 
Reygan
0 / 0 / 0
Регистрация: 17.10.2012
Сообщений: 16
09.06.2013, 22:29     Не могу реализовать очередь (модель дозаправки самолетов в воздухе) #1
Вот само задание:

Модель дозаправки самолетов в воздухе.
После выполнения задания самолеты производят дозаправку в воздухе. В рай-оне дозаправки постоянно дежурят 4 самолета-дозаправщика. Среднее время доза-правки одного самолета равно 10 минут. Плотность потока самолетов, нуждающихся в дозаправке, составляет 0.4. Если самолет, нуждающийся в дозаправке, застает все дозаправщики занятыми, он может некоторое время ожидать их освобождения в рай-оне дозаправки. Среднее время ожидания дозаправки 20 минут. Самолет, не дождав-шийся дозаправки, производит посадку на запасной аэродром. Если самолет доза-правлен, он производит посадку на основной аэродром. Смоделировать процесс доза-правки самолетов в течение N часов. В ходе моделирования выяснить среднее число дозаправленных самолетов, вероятность того, что самолет будет дозаправлен, среднее число самолетов, ожидающих дозаправки в воздухе, среднее время ожидания самолета в очереди на дозаправку.

Вроде все понял как делать, а очередь не как не могу организовать, подскажите как лучше ее оформить

Добавлено через 4 часа 9 минут
Понял что лучше всего будет через список, если кто может помогите с реализацией
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
09.06.2013, 22:37     Не могу реализовать очередь (модель дозаправки самолетов в воздухе) #2
используйте std::queue вместо самоделки. вот так поиграетесь со стандартной очередью, может и появятся мысли о том, как такое реализовать самостоятельно.
Reygan
0 / 0 / 0
Регистрация: 17.10.2012
Сообщений: 16
15.06.2013, 01:52  [ТС]     Не могу реализовать очередь (модель дозаправки самолетов в воздухе) #3
пробую сделать так (очередь через вектор)
(отрывок кода, но в нем смысл того что я хочу понять).(В начале все переменные равны 0)

vector <int> ochered;

randNext = 1 + rand()%99; // тут генерируется время до прилета нового самолета по моим данным
randNext = randNext/100;
timeNext = (-1/potokPlane)*log(randNext);
timeLast = timeNext;

if ( timeLast == 0 ) // если время равно 0
{

newPlane = 1; // прилетает новый самолет
randNext = 1 + rand()%99; // а дальше сразу расчитывается время до прилета следующего
randNext = randNext/100;
timeNext = (-1/potokPlane)*log(randNext);
timeLast = timeNext;
}

if( newPlane==1 )

{ ochered.push_back(40); //40 - это 20минут ожидания для дальнейшей манипуляцией ими

{
if( dozapr1==0 )
{
randNext = 1 + rand()%99; // генирируется число
randNext = randNext/100;
VremyaRab1 = (-1/unknown)*log(randNext); // а здесь время работы дозаправщика
dozapr1++;
// и вот вопрос:мне нужно убрать из очереди элемент который добавился командой push_back
// а лучше прировнять к 0 и в последующих манипуляциях его опять можно было исполь
// зовать.Т.е. как обратится к тому элементу который сейчас у дазоправщика?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
15.06.2013, 02:12     Не могу реализовать очередь (модель дозаправки самолетов в воздухе) #4
Reygan, может немного не в тему, но:
1. есть теги для языков программирования (читать намного проще);
2. если предполагается использовать именно очердь, то лучше подойдёт std::queue.
Reygan
0 / 0 / 0
Регистрация: 17.10.2012
Сообщений: 16
15.06.2013, 02:32  [ТС]     Не могу реализовать очередь (модель дозаправки самолетов в воздухе) #5
Тогда вопрос как обратится допустим в очереди из 100 элементов к 55?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
15.06.2013, 02:37     Не могу реализовать очередь (модель дозаправки самолетов в воздухе) #6
Цитата Сообщение от Reygan Посмотреть сообщение
Тогда вопрос как обратится допустим в очереди из 100 элементов к 55?
Никак. Очередь предполагает, что будет обращение только к первому элементу. Может очередь не нужна?

Не по теме:


Добавлено через 1 минуту
Если вопрос относительно приведённого кода, то я, лично, ничего из него не понял, так что что подсказать не смогу...

Reygan
0 / 0 / 0
Регистрация: 17.10.2012
Сообщений: 16
15.06.2013, 02:44  [ТС]     Не могу реализовать очередь (модель дозаправки самолетов в воздухе) #7
я уже сам не пойму, если бы не было условия, что самолет может ждать 20 минут, то очередь можно было сделать как единое целое, но не получится так, потому что каждому элементу очереди нужно присвоить значение 20 минут, если дозаправщики заняты
gray_fox
15.06.2013, 03:15
  #8

Не по теме:

Reygan, прочитал ещё раз постановку задачи и скажу, что я не знаю, что от вас ожидают и как её решить и что вы хотели сделать в приведённом коде. Используйте std::vector, там можно обращаться к произвольному элемнту с помощью оператора индексации (как с обычным массивом), но как структура данных это не очередь.

MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4928 / 2671 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
15.06.2013, 03:32     Не могу реализовать очередь (модель дозаправки самолетов в воздухе) #9
И сколько же самодуров задают такие вещи делать? То стек насилуют, то очередь загибают.


Reygan, берете list, работаете с ним как с обычным списком, лишь добавляете элементы в конец и убираете с начала. Перебор, который вам нужен (а вовсе не []) он поддерживает. Если нужно все же иметь индексацию, то используйте вектор, хоть и работа с первым элементом имеет уже линейное время, а не константное, как у list. При этом орете на всех, что это ваша супер-мега-очередь, и плевать, что это не так, преподы ждут именно таких реализаций. А зачем создавать себе проблемы и идти напролом? Такой вариант приемлем, если вы уверенно знаете язык и можете аргументированно обосновать бессмыслицу задания, но этого у вас нет.

В действительности же, очередь, и, соотв, её реализация на STL - queue, не подходят для решения вашей задачи.

Добавлено через 4 минуты
Кстати, на втором курсе я преподу все же обосновал никчемность задания (собственная реализация очереди с методом вывода на экран print(), который должен был обходить не удаляя элементы. И все на основе массива. При этом предусмотреть, что очередь может быть (sic!) заполнена), правда STL я тогда уже начал изучать и с std::queue и реальной очередью был знаком.
gray_fox
15.06.2013, 03:45
  #10

Не по теме:

MrGluck, ) много проблем от непонимания) У меня на 2-ом курсе была дисциплина "Структуры данных" (Язык прог-я - С++). Одно задание к лаб. работе звучало примерно так: "проверьте, что выражение в стороке символов образует правильное мат. выражение (относительно расположения скобок); используйте структуру данных стек." (ну стандартная задача, да ) Так я решил, что надо сначало считать всё выражение в стек (получился рекурсивный монстр ); а окозалость, что можно было читать ввод посимвольно и "обрабатывать"... При сдаче я был, скажем так, крайне удивлён...

MrGluck
15.06.2013, 03:54
  #11

Не по теме:

Из той же методы - единственная лаба по ООП, сразу множественное наследование. При этом по вариантам (у всех точь в точь были) базовые классы: студент, адрес. Производный - студент. Модификатор типа при наследовании - public. А у меня даже смотреть лабу не стали, уже сразу 5 поставили. Я преподу обосновал, что студент не адрес и пообещал составить список нормальных заданий к этой лабе. Жалко, что после того, как я посидел часа 2-3, попридумывал заданий интересных, чтобы другим хоть знания давались, предоставил список, препод в него даже не заглянул, отложил "в самый нужный карман" и забыл.

gray_fox
15.06.2013, 04:00
  #12

Не по теме:

MrGluck, а мне оцеку тогда занизили, мол "всё конечно работает, но делается это не так"

Не по теме:


Добавлено через 2 минуты
А по наследованию в С++ (ещё на 1-ом курсе) у нас не самые плохие лабы были (каждый сам себе выбирал иерархию)...

UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
15.06.2013, 04:40     Не могу реализовать очередь (модель дозаправки самолетов в воздухе) #13
На скорую руку, код

Не по теме:

гавно

конечно.
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
#include <iostream>
struct queue{
    int n;
    queue *next;
};
 
queue* create(){
    queue *t = new queue;
    t->next = 0;
    return t;
};
void insert( queue *q, int n ){
    for( queue *p = q;; p = p->next){
        if( p->next == 0 ){
            p->next = new queue;
            p->next->n = n;
            p->next->next = 0;
            return;
        };
    };
};
 
 
void show( queue *q ){
    for( queue *p = q->next; p!=0 ; p = p->next){
        std::cout << p->n << " ";
    };
    std::cout << std::endl;
};
 
int main(){
    queue *Q = create();
    insert( Q, 4 );
    insert( Q, 3 );
    insert( Q, 6 );
    show( Q );
};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2013, 01:02     Не могу реализовать очередь (модель дозаправки самолетов в воздухе)
Еще ссылки по теме:

Реализовать очередь на массиве C++
Реализовать модель ассоциативного кеша C++
C++ Реализовать очередь Unemployed на бирже труда

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

Или воспользуйтесь поиском по форуму:
Reygan
0 / 0 / 0
Регистрация: 17.10.2012
Сообщений: 16
16.06.2013, 01:02  [ТС]     Не могу реализовать очередь (модель дозаправки самолетов в воздухе) #14
Буду пробывать использовать вектор, спасибо всем за ответы)

Добавлено через 9 часов 29 минут
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
144
145
146
147
148
149
150
151
152
#include <cstdlib>
#include <iostream>
#include <vector>
#include <math.h>
 
using namespace std;
int main()
{
 
srand ( time(NULL) );
 
vector <int> ocher;
 
int N;
 
cout << "Vvedite kolichestvo modeliruemix chasov: ";
cin >> N;
cout << endl;
 
int timeAll=( (N*60) ); // ГІГ*ГЄГІ = 1 ìèГ*
int clientNew = 0, timeLast = 0, s1 = 0, s2 = 0, s3 = 0, s4 = 0, i=0, timeNext = 0;
int timeWork1 = 0, timeWork2 = 0, timeWork3 = 0, timeWork4 = 0;
double randNext = 0, planeWait=0, planeTime=0, potokS = 0.1, timeOne = 0.16, timeWait=0.33;//1/6 - õçõçõçõç
// Г±ГІГ*ГІГЁГ±ГІГЁГЄГ*:
int clientIn = 0, clientMiss=0, clientApply=0;
 
for( ; timeAll > 0; timeAll-- )
 
{ //îòêðûòèå öèêëГ* îòГ*ГЁГ¬Г*Г*ГЁГї ГІГ*êòîâ
 
 
 
if ( timeLast == 0 )  //ГЈГҐГ*ГҐГ°Г*öèÿ Г*îâîãî êëèåГ*ГІГ*, ГІГ® ГҐГ±ГІГј âðåìåГ*ГЁ ГҐГЈГ® ïðèõîäГ*
             {
                 clientIn++;
                 clientNew = 1;
                 randNext = 1 + rand()%99;
                 randNext = randNext/100;
                 timeNext = (-1/potokS)*log(randNext);
                 if (timeNext==0) timeNext=2;
                 timeLast =  timeNext;
             }
// cout << timeLast << endl;
 
if(clientNew == 1)
{ // ñêîáî÷êГ* Г*îâîãî êëèåГ*ГІГ*1
 
planeWait = 1 + rand()%99; // âðåìÿ îæèäГ*Г*ГЁГї äîçГ*ГЇГ°Г*ГўГЄГЁ
planeWait = planeWait/100;
planeTime = (-1/timeWait)*log(planeWait);
if (planeTime==0) planeTime=2;
ocher.push_back(planeTime);
 
if ( s1 == 0 || s2 == 0 || s3 == 0 || s4 == 0 ) // åñëè õîòÿ ГЎГ» îäèГ* ГЁГ§ Г±Г*ìîëåòîâ ñâîáîäåГ*
 
{ // ïðîâåðêГ* Г§Г*Г*ÿòîñòè Г± ïîìîùüþ èëè
 
   for(i=0; i<ocher.size(); i++)
   { // öèêë1
            if (ocher[i]>0)
            {
                            ocher[i]=0;
                            break;
            }
 
   } //öèêë1
 
   //------ Г§Г*ГЇГіГ±ГЄГ*ГҐГ¬ ïðîâåðêó Г§Г*Г*ÿòîñòè äîçГ*ГЇГ°Г*âùèêîâ
 
   if( s1==0 ) 
   {
       randNext = 1 + rand()%99;
       randNext = randNext/100;
       timeWork1 = (-1/timeOne)*log(randNext);
       s1++;
   }
   else
   if( s2==0 )
   {
       randNext = 1 + rand()%99;
       randNext = randNext/100;
       timeWork2 = (-1/timeOne)*log(randNext);
       s2++;          
   }
   else
   if( s3==0 )
   {
       randNext = 1 + rand()%99;
       randNext = randNext/100;
       timeWork3 = (-1/timeOne)*log(randNext);
       s3++;          
   }
   else
   if( s4==0 )
   {
       randNext = 1 + rand()%99;
       randNext = randNext/100;
       timeWork4 = (-1/timeOne)*log(randNext);
       s4++;          
   }
    //---------------
 
}// ïðîâåðêГ* Г§Г*Г*ÿòîñòè Г± ïîìîùüþ èëè
 
} // ñêîáî÷êГ* Г*îâîãî êëèåГ*ГІГ*1
 
 
if( s1==1 ) timeWork1--;
if( s1==1&&timeWork1==0 )
{
    s1--;
    clientApply++;
    clientIn--;
}
if( s2==1 ) timeWork2--;
if( s2==1&&timeWork2==0 )
{
    s2--;
    clientApply++;
    clientIn--;
}
 
if( s3==1 ) timeWork3--;
if( s3==1&&timeWork3==0 )
{
    s3--;
    clientApply++;
    clientIn--;
}
if( s4==1 ) timeWork4--;
if( s4==1&&timeWork4==0 )
{
    s4--;
    clientApply++;
    clientIn--;
}
 
timeLast--;
 
for(i=0; i<ocher.size(); i++)
{
         if (ocher[i]>=0) ocher[i]--;
         if (ocher[i]==-1) clientMiss++;
}
 
cout << clientMiss << endl;
 
} // Г§Г*êðûòèå öèêëГ* îòГ*ГЁГ¬Г*Г*ГЁГї ГІГ*êòîâ
 
system("pause");
return 0;
}
подскажите почему выводит именно эти числа?
Yandex
Объявления
16.06.2013, 01:02     Не могу реализовать очередь (модель дозаправки самолетов в воздухе)
Ответ Создать тему
Опции темы

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