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

Почему программа компилируется но не работает? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
01.12.2012, 22:38     Почему программа компилируется но не работает? #1
Заявки (телевизоры) поступают на проверку к 3 пунктам контроля . Если все контроллеры заняты , заявки встают в очередь . Если заявка пребывает в очереди больше 35 минут , она не обслуживается.
8-1.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
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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
#include<cstdio>
#include<cstdlib>
#include<ctime>
using namespace std;
#include "List.h"     //подключение файла с описанием шаблона списка
 
int brak=0;           //счетчик случаев выбраковки изделий в пункте
                      //контроля
 
float que1_aver;      //переменная для подсчета средней длины очереди
                      //к пункту контроля
long int total;       //счетчик модельного времени (количество секунд)
long int completed;   //счетчик числа заявок, завершивших обслуживание
                      //(телевизоров, ушедших на упаковку)
long int entered;     //счетчик числа заявок, поступивших в систему
//Класс для представления заявок (телевизоров)
class TV
{
 long int id;         //уникальный идентификатор заявки
 int seconds;         //время, проведенное в системе
  public:
//Объявление классов Control и Debugger дружественными
 friend class Control;
 
 TV()                 //метод-конструктор
 {
  id=entered;         //какой по счету поступила заявка, такой
                      //и идентификатор
  seconds=0;
 }
  void Print();
  long int getId();
  int getTime();
   };
//Вывод содержимого объекта
void TV::Print()
 {
  printf("id=%ld\n проведено в системе=%d секунд\n", id, seconds); 
 }
//Чтение идентификатора заявки
 long int TV::getId()
 {
  return(id); 
 }
//Чтение проведенного в системе времени
 int TV::getTime()
 {
  return(seconds); 
 }
//Протокол класса Пункт_контроля
class Control
{
 int to_arrival;                 //время до прибытия следующей заявки извне
 int q_length;                   //текущая длина очереди
 ListNode<TV> *queue;            //список заявок, находящихся в очереди
 int *to_served;                 //массив времен, оставшихся до завершения
                                 //обслуживания заявки в каждом из каналов,
                                 //в случае простоя -1
 TV **serving;                   //массив указателей на заявки, находящиеся
                                 //на обслуживании в каналах, в случае
                                 //простоя канала NULL
 
  const static int arr1=42;     //минимальное время между прибытиями заявок
                                 //извне
  const static int arr2=55;     //максимальное время между прибытиями
                                 //заявок извне
  const static int serv1=60;    //минимальное время проверки телевизора
  const static int serv2=180;    //максимальное время проверки телевизора
  const static int volume=3;     //количество каналов (контролеров)
 
   public:
  Control();                     //конструктор
  ~Control();                    //деструктор
  void run();                    //диспетчер
  void arrival(TV *);           //прибытие телевизора на проверку
 
  void complete(int i);          //завершение проверки телевизора
  int busy();                    //вычисление числа занятых контролеров
 };
 
 
 
 
 Control::Control()//Конструктор для пункта контроля
 {
  int i;
  q_length=0;
  queue=NULL;
  //Розыгрыш интервала времени до прибытия заявки
  to_arrival=arr1+rand()%(arr2-arr1+1);
//Выделение памяти под массивы
  to_served=new int[volume];;
  serving=new TV *[volume];
//Инициализация массивов
  for(i=0;i<volume;i++)  to_served[i]=-1;
  for(i=0;i<volume;i++)  serving[i]=NULL;
 }
//Деструктор для пункта контроля
 Control::~Control()
 {
  delete[] to_served;
  delete [] serving;
 }
 //Вычисление числа занятых контролеров
 int Control::busy()
 {
  int i, k;
  k=0;
//Признак занятости: положительное время, оставшееся до завершения //Проверки телевизора
  for(i=0;i<volume;i++)
   if (to_served[i]>0) k++;
  return(k);
 }
//Прибытие телевизора для прохождения контроля 
 void Control::arrival(TV *)
 {
  int i,a;      
  TV *p;
  ListNode<TV> *ptr;
  
  
   entered++;                    //инкремент счетчика поступлений в систему
   p=new TV();                   //создание нового объекта-телевизора
//Розыгрыш нового интервала времени между поступлениями
   to_arrival=arr1+rand()%(arr2-arr1+1); 
  
  
 //Поиск свободного контролера
  for (i=0;i<volume;i++)
   if (to_served[i]==-1) break;
//Свободный контролер найден
 
  if (i<volume)
  {
  //Ставим телевизор к нему на обслуживание
      do {
   serving[i]=p;
   a=serving[i]->getTime();
  if (a>2100) brak++;}
  while (a<=2100);
//Разыгрываем время обслуживания
   to_served[i]=serv1+rand()%(serv2-serv1+1);
  }
  else                           //все контролеры заняты
  {
  //Создаем элемент списка для постановки телевизора в очередь
   ListNode<TV> *ptr=new ListNode<TV>(p,NULL);
 //Если очередь пуста, делаем его головой списка
   if (q_length==0) queue=ptr;
//иначе ставим в конец очереди (хвост списка)
   else ListAdd<TV>(queue,ptr);
   q_length++;                   //инкремент длины очереди
  }
  return;
 }
 //Завершение проверки телевизора i-м контролером
 void Control::complete(int i)
 {
  int a; 
 //Телевизор успешно прошел проверку
 
  
   completed++;                  //инкремент счетчика телевизоров,
                                 //покинувших систему
 
//Удаление объекта из системы
   delete serving[i]; 
  
  
 //Попытка загрузить освободившегося контролера
  if (q_length==0)               //очередь пуста
  {
 //Контролер объявляется простаивающим
   to_served[i]=-1; 
   serving[i]=NULL;
  }  
  else                           //очередь не пуста
  {
  //Извлекаем из очереди первый телевизор и ставим его на проверку
 do {
   serving[i]=queue->Data();
   a=serving[i]->getTime();
  if (a>2100) brak++;
 }
  while (a<=2100);  
      
//Разыгрываем время  проверки
   to_served[i]=serv1+rand()%(serv2-serv1+1);
//Головой списка-очереди становится следующий телевизор
   queue=queue->Next();
   q_length--;                   //декремент текущей длины очереди
  }
 }
//Метод-диспетчер 
 void Control::run()
 {
  int i; 
  float a; 
  ListNode<TV> *ptr;
//Декремент времени, оставшегося до завершения проверки каждым контролером
  for(i=0;i<volume; i++)
  {
   if (to_served[i]==-1) continue;   //контролер простаивает, декремент
                                     //не нужен
   --to_served[i];
//Вызов метода-обработчика, имитирующего завершение проверки
   if (to_served[i]==0) complete(i);  }
  to_arrival--;
//Вызов метода-обработчика, имитирующего прибытие нового телевизора
  if (to_arrival==0) arrival(NULL); 
 
//Инкремент длительности пребывания в системе для телевизоров, ожидающих 
  //проверки в очереди (если очередь не пуста)
  if (queue)
 
  {
   ptr=queue;
   while(ptr!=NULL)
  
    ((ptr->Data())->seconds)++;
    ptr=ptr->Next();
  }
 
 
  return;
 
}
8-2.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
#define N 259200  //общее время моделирования - 3-е суток
#include "8-1.h"
int main()
{
 
//Инициализация генератора случайных чисел
 srand((unsigned)time(0));
//Инициализация объектов
 Control c;
 
 for(total=0L;total<N;total++)
 {
  c.run();
  }
 
//Вывод на печать результатов имитационного эксперимента
 printf("Всего поступлений в систему %ld\n", entered);
 printf("Успешно прошли проверку %ld\n", completed);
 printf("Число неудачных проверок %d\n", brak);
 
 
system("pause");
}
List.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
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
template <class Type>
class ListNode  {
 private:
  ListNode<Type> *next;
  Type *data;
 public:
   ListNode(Type *d, ListNode<Type> *n); 
  ~ListNode();
  Type *Data();
  ListNode<Type> *Next();
  void  PutNext(ListNode<Type> *n);  
  void Print();
};
template <class Type>
ListNode<Type>::ListNode(Type *d, ListNode<Type> *n) : next(n), data(d)
{
}
template <class Type>
ListNode<Type>::~ListNode()
{
 delete data;
}
template <class Type>
Type *ListNode<Type>::Data()
{
 return data;
}
template <class Type>
ListNode<Type> *ListNode<Type>::Next()
{
 return next;
}
template <class Type>
void ListNode<Type>::PutNext(ListNode<Type> *n)
{
 next=n;
}
template <class Type>
void ListNode<Type>::Print()
{
 data->Print();
}
template <class Type>
void ListAdd(ListNode<Type> *head, ListNode<Type> *li)
{
 ListNode<Type> *old, *v;
 for (v=head; v!=NULL; v=v->Next())
  old=v;
 old->PutNext(li);
}
template <class Type>
ListNode<Type> *ListDelete(ListNode<Type> *head, ListNode<Type> *li)
{
 int j;
 ListNode<Type> *old, *o1;
 if (li==head)
 {
  o1=head->Next();
  delete li;
  return o1;
 }
 for (ListNode<Type>* v=head; v!=li; v=v->Next())
  old=v;
 o1=li->Next();
 old->PutNext(o1);
  delete li;
 return head;
}
template <class Type>
void ListPrint(ListNode<Type> *head)
{
 for (ListNode<Type>* v=head; v!=NULL; v=v->Next())
    v->Print();
 } 
template <class Type>
int ListCount(ListNode<Type> *head)
{
 int i; i=0;
 for (ListNode<Type>* v=head; v!=NULL; v=v->Next())
 {
   v->Print();
   i++;
 }
 return i;
}
Добавлено через 3 часа 48 минут
нашел ошибку
C++
1
2
3
4
5
do {
   serving[i]=p;
   a=serving[i]->getTime();
  if (a>2100) brak++;}
  while (a<=2100);
цикл неправильно работает .... но не пойму почему..
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
05.12.2012, 02:15  [ТС]     Почему программа компилируется но не работает? #41
Цитата Сообщение от dederkay Посмотреть сообщение
доброго вечера, или уже ночи) Давайте вы просто скинете свой проект, ну то что на данный момент у вас получилось и мы попытаемся реализовать методы.
qq1.rar - здесь я питался добавить еще один метод (processing)
qqq.rar -здесь я питался переделать метод завершения проверки заявок(complete)
Вложения
Тип файла: rar qq1.rar (250.7 Кб, 4 просмотров)
Тип файла: rar qqq.rar (245.2 Кб, 3 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dederkay
 Аватар для dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
05.12.2012, 02:48     Почему программа компилируется но не работает? #42
ну вот в первом варианте просмотрел, двигаетесь в верную сторону) только где обработка контроллером заявки? Можно реализовать в том же методе ран, проверку, сейчас набросаю, хотя с вашим листом придется позабавиться.
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
05.12.2012, 02:55  [ТС]     Почему программа компилируется но не работает? #43
Цитата Сообщение от dederkay Посмотреть сообщение
ну вот в первом варианте просмотрел, двигаетесь в верную сторону) только где обработка контроллером заявки? Можно реализовать в том же методе ран, проверку, сейчас набросаю, хотя с вашим листом придется позабавиться.
так там же в методе processing я сразу проверяю и обрабативаю заявку , по сути я там метод аривал разделил на два метода, на прибытие заявки и на ее обработку..т.е. так как вы мне говорили
dederkay
 Аватар для dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
05.12.2012, 03:01     Почему программа компилируется но не работает? #44
ну программа в процессинг даже не попала, метод вызван? та и я все проверки в ране делаю сейчас увидим что выйдет!
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
05.12.2012, 03:03  [ТС]     Почему программа компилируется но не работает? #45
Цитата Сообщение от dederkay Посмотреть сообщение
ну программа в процессинг даже не попала, метод вызван? та и я все проверки в ране делаю сейчас увидим что выйдет!
вот я об этом и говорил...я никак догнать не мог как именно в ране вызвать процессинг...
dederkay
 Аватар для dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
05.12.2012, 03:19     Почему программа компилируется но не работает? #46
как все закручено то, зачем так сложно? с листами крутить, могут боком вылезьти)
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
05.12.2012, 03:26  [ТС]     Почему программа компилируется но не работает? #47
Цитата Сообщение от dederkay Посмотреть сообщение
как все закручено то, зачем так сложно? с листами крутить, могут боком вылезьти)
так я же после извлечения из очереди заявки, просто делаю декремент длины очереди , а просто удаление заявки , если она бракованая , то по идее должно быть
C++
1
delete serving[i];
, но я его в спешке не добавил..
dederkay
 Аватар для dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
05.12.2012, 03:36     Почему программа компилируется но не работает? #48
ну что ж) за время моделирования ни одного брака))) все нормально обработались, правда я пока не учитывал то что только три контроллера, сейчас добавлю ограничение ним и посмотрим как запоет.

Добавлено через 7 минут
и все таки, придеться еще учитывать глобальное время, как я и думал. Я ввел еще одну переменную которая будет отвечать за время
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
05.12.2012, 03:38  [ТС]     Почему программа компилируется но не работает? #49
Цитата Сообщение от dederkay Посмотреть сообщение
ну что ж) за время моделирования ни одного брака))) все нормально обработались, правда я пока не учитывал то что только три контроллера, сейчас добавлю ограничение ним и посмотрим как запоет.

Добавлено через 7 минут
и все таки, придеться еще учитывать глобальное время, как я и думал. Я ввел еще одну переменную которая будет отвечать за время
я до последнего не хотел использовать глобальное время....это же надо много условий добавлять..
dederkay
 Аватар для dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
05.12.2012, 03:42     Почему программа компилируется но не работает? #50
ну если не хотите, с чем я тоже согласен можно добавить переменную типо время простоя, к заявке,так будет правильнее всего, и удобнее. Давайте завтра вечером(или же в 5 часов) я отправлю вам то что получиться.Спать пора просто, утром за руль...
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
05.12.2012, 03:49  [ТС]     Почему программа компилируется но не работает? #51
Цитата Сообщение от dederkay Посмотреть сообщение
ну если не хотите, с чем я тоже согласен можно добавить переменную типо время простоя, к заявке,так будет правильнее всего
т.е. так мне не нужно считывать общее время проведенное заявкой в системе, мне переменная секондс нужна только для того что бы реализовать удаление заявок которые стояли в очереди больше 35 минут. А изначально я искал общее время проведенное в системе , просто мне задание меняли вот так и осталась эта фигня в листинге..

Добавлено через 2 минуты
Цитата Сообщение от dederkay Посмотреть сообщение
ну если не хотите, с чем я тоже согласен можно добавить переменную типо время простоя, к заявке,так будет правильнее всего, и удобнее. Давайте завтра вечером(или же в 5 часов) я отправлю вам то что получиться.Спать пора просто, утром за руль...
да конечно же! я тоже уже собирался...
dederkay
 Аватар для dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
05.12.2012, 03:49     Почему программа компилируется но не работает? #52
возможно есть и более гибкий вариант, но что первым пришло на ум то и начертил.
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
05.12.2012, 23:10  [ТС]     Почему программа компилируется но не работает? #53
Цитата Сообщение от dederkay Посмотреть сообщение
возможно есть и более гибкий вариант, но что первым пришло на ум то и начертил.
ладно, я еще утром и вечером буду сидеть над этой задачей , буду еще пытаться что-то изменить в лутчшую сторону...а сейчас реально нужно идти спать...

Добавлено через 18 часов 50 минут
Цитата Сообщение от dederkay Посмотреть сообщение
возможно есть и более гибкий вариант, но что первым пришло на ум то и начертил.
Добрый вечер. Сегодня только сейчас смог сесть за код... хотел спросить все же как вы инициализировали метод процессинг в методе ран, а то у меня так и не получилось это сделать
dederkay
 Аватар для dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
06.12.2012, 01:49     Почему программа компилируется но не работает? #54
Доброго вечера, ну вот короче накарячил я как нибудь метод ран так чтоб все работало, и знаете, при скорости обработки каждой заявки 120 сек, даже если те которые в простое 300 сек(хотя как бы это же совсем не секунды, а условные единицы) система прекрасно справляется с поставленной задачей. Правда если увеличить время обрабоки до 150 мы уже увидим около 100 - и бэдов. Все работает, вам останеться только сделать время обработки случайным числом(ну вот так например 120 +- 60), Ну естественно порефакторить, убрать лишнее сделать то что я шустренько набросал окуратным и более правильным. Дерзайте, удачи вам. И прошу в след раз пишите свой код немножко поаккуратнее, не ленитесь ставить скобки где необязательно, писать квалификаторы к глобальным переменным. Будут вопросы задавайте.

Добавлено через 4 минуты
На здоровье
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
06.12.2012, 01:53  [ТС]     Почему программа компилируется но не работает? #55
Цитата Сообщение от dederkay Посмотреть сообщение
Доброго вечера, ну вот короче накарячил я как нибудь метод ран так чтоб все работало, и знаете, при скорости обработки каждой заявки 120 сек, даже если те которые в простое 300 сек(хотя как бы это же совсем не секунды, а условные единицы) система прекрасно справляется с поставленной задачей. Правда если увеличить время обрабоки до 150 мы уже увидим около 100 - и бэдов. Все работает, вам останеться только сделать время обработки случайным числом(ну вот так например 120 +- 60), Ну естественно порефакторить, убрать лишнее сделать то что я шустренько набросал окуратным и более правильным. Дерзайте, удачи вам. И прошу в след раз пишите свой код немножко поаккуратнее, не ленитесь ставить скобки где необязательно, писать квалификаторы к глобальным переменным. Будут вопросы задавайте.

Добавлено через 4 минуты
На здоровье
спасибо конечно... буду занимться... это еще не конец для этой прожки...еще буду делать гуи ...это типа курсовая и простая консоль не пойдет, но с этим я справлюсь... большое спасибо вам.
я вам что-то должен?

аа еще один нюанс... а в какой студии вы создали проект? а то моя 10-ка не открывает


а тьху, код есть я все переделаю! еще раз спасибо
dederkay
 Аватар для dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
06.12.2012, 01:57     Почему программа компилируется но не работает? #56
Цитата Сообщение от galaxyblazer Посмотреть сообщение
я вам что-то должен?
Нет что вы) мне хватит и спасибо) а ГУИ на чем? ВинАПИ? КЮти? или изващаться с ГЛом будете?) Если че обращайтесь)
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
06.12.2012, 02:00  [ТС]     Почему программа компилируется но не работает? #57
Цитата Сообщение от dederkay Посмотреть сообщение
Нет что вы) мне хватит и спасибо) а ГУИ на чем? ВинАПИ? КЮти? или изващаться с ГЛом будете?) Если че обращайтесь)
нет я в VS буду делать....в том в чем пока что умею...

а за код спасибо...если вдруг будете в хмельницком , пишыте , устрою екскурсию)
dederkay
06.12.2012, 02:05
  #58

Не по теме:

Оу, Хмельницкий а из какого вы ВУЗа? У мя там друзья есть. Да и сам я из тех мест) родился там)) Вот видите зёме помог уже хорошо)))

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2012, 02:12     Почему программа компилируется но не работает?
Еще ссылки по теме:

почему не компилируется программа ? C++
Почему программа не работает на MFC статичной библиотеки. а вот на стандартном мфс работает C++
Почему не работает программа? C++

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

Или воспользуйтесь поиском по форуму:
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
06.12.2012, 02:12  [ТС]     Почему программа компилируется но не работает? #59
Цитата Сообщение от dederkay Посмотреть сообщение

Не по теме:

Оу, Хмельницкий а из какого вы ВУЗа? У мя там друзья есть. Да и сам я из тех мест) родился там)) Вот видите зёме помог уже хорошо)))

Не по теме:

давайте в ЛС

Yandex
Объявления
06.12.2012, 02:12     Почему программа компилируется но не работает?
Ответ Создать тему
Опции темы

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