Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с указателями и векторами, помогите отыскать недочет. 
:(
    Опции темы
SmileTT
Дата 24.4.2011, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.4.2009

Репутация: нет
Всего: нет



Совершенно не пониманию ничего в дебаге, поэтому поиск ошибок меня убивает.  Дело в том, что есть некая система, где грузовики с массой зерна проходят цикл визировка (всего три платформы) -> взвешивание (тоже три платформы) -> разгрузка (одна платформа) -> очередь (одна) -> взвешивание перед отъездом (одна платформа). Программу я кое-как написал (начинающий, поэтому не смейтесь над уродством кода, на данный момент важно, чтобы он ПРОСТО работал), но данный цикл на определённом моменте то ли провисает, то ли проскальзывает... В общем в итоге полный цикл проходят один-три авто в зависимости от выпадения случайных чисел, но программа всегда сбивается - грузовики подъезжают стабильно, но обрабатывать их система не начинает. 
Помогите отыскать оплошность пл3!
Код

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <ctime>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
using namespace std;
int mtimet=0;
int i;
class Gruzovik
{public:
    float massc;
    int docs;
    int proceed;
   int time_to_Vis;
    int timetodo;
    Gruzovik();
    float Norm(float, float);
    };
    
Gruzovik::Gruzovik()
{massc=Norm(19,7);
int proceed=-1;
time_to_Vis=2+rand()%10;
timetodo=(int)-1/0.12*log(rand() / (RAND_MAX + 1.));
if (timetodo<1) timetodo++;
    }
float Gruzovik::Norm ( float Mo, float Sko)
{ int i;
  float s;

  for(s=0,i=0;i<6;i++)
    s +=rand() / (RAND_MAX + 1.);
    s = (s-3)*1.414214*Sko + Mo;
    if (s<0) {return s*(-1);}
    else {return s;}

int changevect(vector<Gruzovik>&);
int main ()
{srand(time(0));
Gruzovik onwaste;
bool razF=true;
bool razF2=true;
onwaste.timetodo=-1;
Gruzovik * onit=&onwaste;
Gruzovik * Razgr=&onwaste;
Gruzovik * Final=&onwaste;
Gruzovik * Vis[]={&onwaste,&onwaste,&onwaste};
Gruzovik * Ves[]={&onwaste,&onwaste,&onwaste};
vector<Gruzovik> queue_Ves, sec_queue, thi_queue, done;// очередь весов, очередь разгрузок, очередь на выход
Gruzovik proxy;
bool stopplat=0;
int takenVis=0;
int takenVes=0;
float overallmass=0;
int bunker=0;
int quecount=0;
int coldtime=0;
int time_to_arr=30;
while (mtimet<700)
{
    
    for (int i=0;i<2;++i)
    {
 if (Vis[i]->proceed==mtimet) //визировка завершена
 {cout << "Vizirovka finished!" << "at" << mtimet << " on " << i << "\n";
     queue_Ves.push_back(*Vis[i]);
     Vis[i]=&onwaste;
     takenVis--;
     }
 }   
  for (int i=0;i<2;++i)
    {
        if (Ves[i]->proceed==mtimet) //Взвешивание завершено
        {cout << "Weighting complete"<< "at" << mtimet << "\n";
            sec_queue.push_back(*Ves[i]);
            takenVes--;
            Ves[i]=&onwaste;
            }
    }    

   if (!queue_Ves.empty() && takenVes<3) //очередь на весы есть и весы свободны
   {cout << "Starting weighting" << "at " << mtimet << "\n";
        proxy=queue_Ves[0];
        Ves[takenVes]=&proxy;
        queue_Ves.erase(queue_Ves.begin());
        Ves[takenVes]->proceed+=2+rand()%20;
        takenVes++;
       }
     
   if (time_to_arr==mtimet) //приехала новая машина
  {
      cout << "Gruzovik appeared!"<< "at" << mtimet << "\n";
  onit=new Gruzovik;  
  time_to_arr=mtimet+3+rand()%10;
   if (takenVis<3)
   {
  Vis[takenVis]=onit;
  Vis[takenVis]->proceed=mtimet+Vis[takenVis]->time_to_Vis;
  takenVis++;
   }   
  }
  
    if (bunker>0) //есть зерно в бункере
    {
        overallmass+=2;
        bunker-=2;
        }
    if (Razgr->proceed==mtimet && Razgr->massc+bunker<=200) // пришло время разгрузки и есть место в бункере
    {
        cout << "Unloading mass in bunker!"<< "at" << mtimet << "\n";
        bunker+=Razgr->massc;
        thi_queue.push_back(*Razgr);
        Razgr=&onwaste;
        razF=true;
        }
    if (Razgr->proceed==mtimet && Razgr->massc+bunker>200) // пришло время и нет места в бункере
    {
        Razgr->proceed++;
        }
    if (!sec_queue.empty() && razF) // очередь не пуста и разгрузчик свободен
    {
        cout << "Starting unloading"<< "at" << mtimet << "\n";
        razF=false;
        proxy=sec_queue[0];
        Razgr=&proxy;
        sec_queue.erase(sec_queue.begin());
        Razgr->proceed+=1+rand()%20;
        }
    
    if (Final->proceed==mtimet) // пришло время на выход
    {cout << "Gruzovik went " << "at" << mtimet << "\n";
        done.push_back(*Final);
        Final=&onwaste;
        razF2=true;
        }        
    if (!thi_queue.empty() && razF2) //очередь на выход не пуста и весы свободны
    {cout << "Start final weighting" << "at" << mtimet << "\n";
        razF2=false;
        proxy=thi_queue[0];
        Final=&proxy;
        thi_queue.erase(thi_queue.begin());
        Final->proceed+=1+rand()%20;
        }
    
    
  mtimet++;
}
cout <<"\n" <<"Number of mass unloaded" << overallmass << "\n" << "Number of cars arrived" << done.size();
getch();
return 0;
    }

PM MAIL   Вверх
bsa
Дата 24.4.2011, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



SmileTT, какие трудности вызывает отладка? Не нашел, как выполнять по шагам? Ставишь точку останова (breakpoint) на то место, до которого у тебя все работает (можно даже на первую строчку внутри main()), жмешь "отладить" (или просто выполнить), программа встает на точке останова, затем открываешь обзор наблюдаемых переменных (watches) и добавляешь туда те, которые тебе интересны (add watch). затем делаешь шаг (есть два варианта step in - войти в функцию и step over - обойти функцию), смотришь переменные, еще шаг... Таким образом, в какой-то момент, одна из переменных примет не то значение, что должно быть в теории. Или условие не то будет... Короче, заметишь ошибку (а то и не одну).
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0711 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.