to jest program ktory ma symulowac winde

nie wiem czemu gdzy np. zamowie szybko winde na 3,4,5,6 it dalej pietro to zaczyna dawac do pojemnika za duzo razy i szybko pojemnik "plan" zapelnia sie

prosze o pomoc

//---------------------------------------------------------------------------

#include
#include
#include
#pragma hdrstop
//////////////////////////////////////////////////////////////////////////////
const int pojemnosc_wektora = 10000;
template
class wektor{

public:
wektor(char o) : ile_obiektow(0),name(o){}
int ile_obiektow ;
char
name;
int wstaw(const typ & nowy, int gdzie = -1);
void usun(int nr);
typ & co_na(int pozycja)
{return tabl[pozycja];}
//friend ostream & operator<< (ostream & stru, wektor & x);
typ tabl[pojemnosc_wektora];
private:
void wektor::rozsun(int pozycja);
void zsun(int nr);
friend class winda;
};

///////////////////////////////////////////////////////////////////////////////

template
void wektor::rozsun(int pozycja)
{
for(int i = ile_obiektow; i > pozycja ; i --)
{
tabl[i] = tabl[i - 1];
}
}
///////////////////////////////////////////////////////////////////////////////
template
void wektor::zsun(int nr)
{
for( int i = nr ; i < ile_obiektow; i++)
{
tabl[i] = tabl[i + 1];
}
}
////////////////////////////////////////////////////////////////////////////////

template
int wektor::wstaw(const typ & nowy, int gdzie)
{
if (ile_obiektow == pojemnosc_wektora)
{
//cout << "wektor juz zapelniony\n" << name << endl;
//sleep(1);
return 0;
}
if(gdzie < 0 gdzie > ile_obiektow)
gdzie = ile_obiektow;

rozsun(gdzie);
tabl[gdzie] = nowy;
ile_obiektow++ ;
//cout << name << ile_obiektow << endl;
return 1;
}
////////////////////////////////////////////////////////////////////////////////
template
void wektor::usun(int nr)
{
if(nr < ile_obiektow)
{
zsun(nr);
ile_obiektow-- ;
}
}
////////////////////////////////////////////////////////////////////////////////
template
ostream & operator<< (ostream & stru , wektor & spis)
{
stru << " " ;
for (int i = 0 ; i < spis.ile_obiektow; i++)
{
stru << i << ")" << " " << spis.tabl[i];
}
stru << endl;
return stru;
}
/**/

enum otwarcie{NIE = 0 ,TAK};
enum kier{dol = 0 , gora};
/**/

class kierunek{
kier cel;
int poziom;
public:
kierunek(kier c = gora, int poz = 0): cel(c), poziom(poz){}
friend int operator==(kierunek a, kierunek b)
{
if ((a.poziom==b.poziom)&&(a.cel==b.cel)) return 1;
else return 0;
}
friend class winda;
};

//---------------------------------------------------------------------------
class winda{

void otworz();
void jedz_do_gory();
void jedz_do_dolu();
void nie_na_danym();
void na_danym();
int gdzie();
void sortowanie();
void w_kt_strone(int pietro);
kierunek where;
void zapis();

public: wektor plan;
kierunek docelowy;
int dod;
int ilosc_pieter ;
int aktualny_poziom;
void jazda();
void stop();
void alarm();
otwarcie drzwi;
winda(int ip, otwarcie drzwiczki = NIE,
int akt =0, int d = 0 ) :
drzwi(NIE),
ilosc_pieter(ip), aktualny_poziom(akt), dod(d),plan("plan"){ilosc_pieter = ip;}
void rysunek();

};
///////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
#define c(a) ((char) a)

void winda::nie_na_danym()
{
for(int i = 0 ; i < 6 ; i++)
{
cout << "\t" << c(186) << c(219) << c(219) << c(219) << c(219) << c(219)
<< c(219) << c(186) << endl;
}
}

void winda::otworz()
{
for(int i = 0 ; i < 6 ; i++)
{
cout << "\t" << c(186) << c(177) << " " << c(177) << c(186) << endl;
}
}

void winda::na_danym()
{
for(int i = 0 ; i < 6 ; i++)
{
cout << "\t" << c(186) << c(177) << c(177) << c(177) << c(177) << c(177)
<< c(177) << c(186) << endl;
}
}

void winda::rysunek()
{
clrscr();
cout << docelowy.poziom << aktualny_poziom<<"\n\n\t" << c(201) << c(205) << c(205) << c(205) << c(205) << c(205)
<< c(205) << c(187) << endl;

for (int i = ilosc_pieter ; i >= 0; i--)
{

if (aktualny_poziom != i )
{
nie_na_danym();
}
else
{ if (drzwi) otworz();
else
na_danym();
}
if(i!=0)
cout << "\t" << c(204) << c(205) << c(205) << c(205) << c(205) << c(205)
<< c(205) << c(185) << endl;
}
cout << "\t" << c(200) << c(205) << c(205) << c(205) << c(205) << c(205)
<< c(205) << c(18 << endl ;
}
////////////////////////////////////////////////////////////////////////////////
void winda::jedz_do_gory()
{
rysunek();
aktualny_poziom++;
dod = 1;
}

void winda::jedz_do_dolu()
{
rysunek();
aktualny_poziom--;
dod = 1;
}

void winda::jazda()
{

while(kbhit()) {zapis();
sortowanie();}

docelowy.poziom = gdzie() ;

dod = 0;
if (docelowy.poziom > aktualny_poziom) jedz_do_gory();
else if(docelowy.poziom < aktualny_poziom) jedz_do_dolu();

rysunek();
sleep(1);

if (docelowy.poziom == aktualny_poziom)
{
for(int i = 0 ; i<4; i++)
{
if(dod==1) drzwi = TAK;
if(i==3) drzwi = NIE;
rysunek();
sleep(1);

}

plan.usun(0);

}
drzwi = NIE;
}

#pragma argsused
int main(int argc, char* argv)
{
winda pier(9);
//cout << pier.plan.ile_obiektow;
while(1)
{pier.jazda();}

return 0;
}
//---------------------------------------------------------------------------

void winda::zapis()
{

where.poziom = getche();

switch (where.poziom)
{
case 33:
where.poziom = 1;
where.cel = gora;
if (where.poziom == ilosc_pieter) where.cel = dol;
break;

case 49:
where.poziom = 1;
where.cel = dol;
break;

case 64:
where.poziom = 2;
where.cel = gora;
if (where.poziom == ilosc_pieter) where.cel = dol;
break;

case 50:
where.poziom = 2;
where.cel = dol;
break;

case 35:
where.poziom = 3;
where.cel = gora;
if (where.poziom == ilosc_pieter) where.cel = dol;
break;

case 51:
where.poziom = 3;
where.cel = dol;
break;

case 36:
where.poziom = 4;
where.cel = gora;
if (where.poziom == ilosc_pieter) where.cel = dol;
break;

case 52:
where.poziom = 4;
where.cel = dol;
break;

case 37:
where.poziom = 5;
where.cel = gora;
if (where.poziom == ilosc_pieter) where.cel = dol;
break;

case 53:
where.poziom = 5;
where.cel = dol;
break;

case 94:
where.poziom = 6;
where.cel = gora;
if (where.poziom == ilosc_pieter) where.cel = dol;
break;

case 54:
where.poziom = 6;
where.cel = dol;
break;

case 38:
where.poziom = 7;
where.cel = gora;
if (where.poziom == ilosc_pieter) where.cel = dol;
break;

case 55:
where.poziom = 7;
where.cel = dol;
break;

case 42:
where.poziom = 8;
where.cel = gora;
if (where.poziom == ilosc_pieter) where.cel = dol;
break;

case 56:
where.poziom = 8;
where.cel = dol;
break;

case 40:
where.poziom = 9;
where.cel = dol;
break;

case 57:
where.poziom = 9;
where.cel = dol;
break;

case 48:
where.poziom = 0;
where.cel = gora;
break;

case 41:
where.poziom = 0;
where.cel = gora;
break;
// wewnatrz
case 113:
where.poziom = 1;
w_kt_strone(where.poziom);
break;

case 119:
where.poziom = 2;
w_kt_strone(where.poziom);
break;

case 101:
where.poziom = 3;
w_kt_strone(where.poziom);
break;

case 114:
where.poziom = 4;
w_kt_strone(where.poziom);
break;

case 116:
where.poziom = 5;
w_kt_strone(where.poziom);
break;

case 121:
where.poziom = 6;
w_kt_strone(where.poziom);
break;

case 117:
where.poziom = 7;
w_kt_strone(where.poziom);
break;

case 105:
where.poziom = 8;
w_kt_strone(where.poziom);
break;

case 111:
where.poziom = 9;
w_kt_strone(where.poziom);
break;

case 112:
where.poziom = 0;
w_kt_strone(where.poziom);
break;
}
if(where.poziom == aktualny_poziom)
{
drzwi = TAK;
rysunek();
sleep(1);

}

plan.wstaw(where);
cout << plan.name << " " << plan.ile_obiektow<< endl;
sleep(1); // moze byc walekTO TO MIEJSCE!!!!!!!!!!!!!!!!!
}

void winda::w_kt_strone(int pietro)
{
if(pietro < aktualny_poziom) where.cel = dol;
else if (pietro > aktualny_poziom) where.cel = gora;
}

int winda::gdzie()

return plan.co_na(0).poziom;
}

void winda::sortowanie()
{

wektor *pomocniczy = new wektor ("pom") ;
for(int i = 0; i < plan.ile_obiektow; i++)
{
for(int j = 0; j
{
if (plan.co_na(i) == plan.co_na)

{(*pomocniczy).wstaw(plan.co_na);
//cout << pomocniczy->ile_obiektow << "ale j = " << j<< endl; ;
//cout << plan.name << plan.ile_obiektow;
}
if (j == plan.ile_obiektow ) break;
}
}

for(int i = 0 ; i
{plan.usun(0);}

for(int i = 0 ; i ile_obiektow;i++)
{plan.wstaw(pomocniczy->co_na(i));}

for(;pomocniczy->ile_obiektow;)
pomocniczy->usun(0);

for(int i = 0; i
{
if(docelowy.cel == plan.co_na(i).cel)
{
(*pomocniczy).wstaw(plan.co_na(i));

}
}

wektor pomocniczy1 = new wektor ("pom1") ;
switch(docelowy.cel)
{
case gora:
for(int i = 0; i < (
pomocniczy).ile_obiektow; i++)
{
kierunek pom_cel(gora,0);

for(int j = 0; j < (pomocniczy).ile_obiektow; j++)
{
if ((
pomocniczy).co_na.poziom < pom_cel.poziom)
{
pom_cel.poziom = (pomocniczy).co_na.poziom;
(
pomocniczy).usun;
}
}
(*pomocniczy1).wstaw(pom_cel);

}
break;

case dol:
for(int i = 0; i < (pomocniczy).ile_obiektow; i++)
{
kierunek pom_cel(dol,(
pomocniczy).co_na(0).poziom);
for(int j = 0; j < (pomocniczy).ile_obiektow; j++)
{
if ((
pomocniczy).co_na.poziom > pom_cel.poziom)
{
pom_cel.poziom = (pomocniczy).co_na.poziom;
(
pomocniczy).usun;
}
}
(*pomocniczy1).wstaw(pom_cel);

}

break;
}

for(int i = 0 ; i < plan.ile_obiektow; i++) // sprobouj pottem bez tego
{
if(docelowy.cel != plan.co_na(i).cel)
(*pomocniczy).wstaw(plan.co_na(i));

plan.usun(0);

}
switch(docelowy.cel)
{
case gora:
for(int i = 0; i < (pomocniczy).ile_obiektow ; i++)
{
kierunek pom_cel(gora,pomocniczy->co_na(0).poziom);
for(int j = 0; j < (
pomocniczy).ile_obiektow; j++)
{

if ((pomocniczy).co_na.poziom < pom_cel.poziom)
{
pom_cel.poziom = (
pomocniczy).co_na.poziom;

pomocniczy->usun;
}
}
(*pomocniczy1).wstaw(pom_cel);

}
break;

case dol:
for(int i = 0; i < (pomocniczy).ile_obiektow; i++)
{
kierunek pom_cel(dol,(
pomocniczy).co_na(0).cel);
for(int j = 0; j < (pomocniczy).ile_obiektow; j++)
{
if ((
pomocniczy).co_na.poziom > pom_cel.poziom)
{
pom_cel.poziom = (pomocniczy).co_na.poziom;
(
pomocniczy).usun;
}
}

(*pomocniczy1).wstaw(pom_cel);

}

break;
}
for(;pomocniczy->ile_obiektow;)
pomocniczy->usun(0);
delete pomocniczy;

for(int i = 0;i < pomocniczy1->ile_obiektow;i++)
{

plan.wstaw((*pomocniczy1).co_na(i));

}
for(;pomocniczy1->ile_obiektow;)
pomocniczy1->usun(0);
delete pomocniczy1;

}

PROSZE O POMOC PROGRAM BYL KOMPILOWNY W BUILDER c++ 6