Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Reygan
0 / 0 / 0
Регистрация: 17.10.2012
Сообщений: 16
#1

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

09.06.2013, 22:29. Просмотров 804. Ответов 13
Метки нет (Все метки)

Вот само задание:

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

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

Добавлено через 4 часа 9 минут
Понял что лучше всего будет через список, если кто может помогите с реализацией
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2013, 22:29
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не могу реализовать очередь (модель дозаправки самолетов в воздухе) (C++):

Реализовать очередь - C++
Очередь - это устройство для хранения данных, похожее на стек. Отличие в том, что в стеке последний сохраненный элемент будет первым...

Реализовать очередь - C++
класс figure #pragma once class figure { public: figure(void); virtual ~figure(void); //figure * adr; figure* prev;

Реализовать очередь на массиве - C++
Начал знакомиться с очередью, хотелось бы увидеть пример реализации ее на массиве и без классов пожалуйста, их еще не проходил:) И если...

Реализовать добавление элементов в очередь - C++
Помогите сделать,кто знает: Создать очередь случайных чисел. Реализовать добавление элементов в очередь, затем вывод очереди и удаление...

Реализовать с использованием массива очередь - C++
13.первое задание 1) Сформировать одномерный массив целых чисел, используя датчик случайных чисел. 2) Распечатать полученный массив. ...

Реализовать очередь на одномерном массиве - C++
Программа должна позволять многократно выполнять операции над очередью. При выполнении функции input переменная last увеличивается на...

13
DU
1485 / 1131 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
09.06.2013, 22:37 #2
используйте std::queue вместо самоделки. вот так поиграетесь со стандартной очередью, может и появятся мысли о том, как такое реализовать самостоятельно.
1
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 и в последующих манипуляциях его опять можно было исполь
// зовать.Т.е. как обратится к тому элементу который сейчас у дазоправщика?
0
gray_fox
What a waste!
1551 / 1256 / 74
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 3
15.06.2013, 02:12 #4
Reygan, может немного не в тему, но:
1. есть теги для языков программирования (читать намного проще);
2. если предполагается использовать именно очердь, то лучше подойдёт std::queue.
1
Reygan
0 / 0 / 0
Регистрация: 17.10.2012
Сообщений: 16
15.06.2013, 02:32  [ТС] #5
Тогда вопрос как обратится допустим в очереди из 100 элементов к 55?
0
gray_fox
What a waste!
1551 / 1256 / 74
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 3
15.06.2013, 02:37 #6
Цитата Сообщение от Reygan Посмотреть сообщение
Тогда вопрос как обратится допустим в очереди из 100 элементов к 55?
Никак. Очередь предполагает, что будет обращение только к первому элементу. Может очередь не нужна?

Не по теме:


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

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

Не по теме:

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

1
MrGluck
Модератор
Эксперт CЭксперт С++
7769 / 4805 / 745
Регистрация: 29.11.2010
Сообщений: 13,122
15.06.2013, 03:32 #9
И сколько же самодуров задают такие вещи делать? То стек насилуют, то очередь загибают.


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

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

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

Не по теме:

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

1
MrGluck
15.06.2013, 03:54
  #11

Не по теме:

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

1
gray_fox
15.06.2013, 04:00
  #12

Не по теме:

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

Не по теме:


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

1
UnsKneD
алкокодер
155 / 151 / 12
Регистрация: 27.12.2012
Сообщений: 550
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 );
};
1
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;
}
подскажите почему выводит именно эти числа?
0
16.06.2013, 01:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2013, 01:02
Привет! Вот еще темы с ответами:

Восемь самолетов случайным случаем ставятся в очередь на тех. обслуживание - Теория вероятностей
Задача: 1. Восемь самолетов, среди которых 2 самолета АН-124, случайным случаем ставятся в очередь на тех. обслуживание. найдите...

Звуковая волна в воздухе и электромагнитная волна в воздухе имеют одинаковую длину 10 см - Физика
Звуковая волна в воздухе и электромагнитная волна в воздухе имеют одинаковую длину 10 см. Опишите характер обеих волн (слышимая,...

Не могу понять,как реализовать класс-Очередь "FIFO" - C#
:-|

Очередь сообщений. Не могу поставить в очередь - C Linux
День добрый, стоит задача обмениваться данными между двумя процессами по средствам очереди сообщений, написал вот такой код: #define...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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