Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as C++ by 312 ( 14 years ago )
#include <iostream>
using namespace std ;
class avto
{
public:
int number ;
char name[4] ;
avto ():number(000)
{
strcpy (name, "ooo") ;
}
avto ( int num, char* nam ): number(num)
{
strncpy (name, nam, 3) ;
name[3] = '\0' ;
} ;
void print ()
{
cout << name[0] << number << name[1] << name[2] ;
}
bool operator != (avto& h)
{
if ( number != h.number && name != h.name )
return true ;
else
return false ;
}
};
template <class Data>
class stack
{
private:
struct node {
Data data ;
int count ;
node* next ;
};
node* top ;
public:
stack () ;
~stack () ;
void add ( Data, int =-1 ) ;
Data exec () ;
void remove ( Data ) ;
void print () ;
};
template <class Data>
stack<Data>::stack () {
top = 0 ;
}
template <class Data>
stack<Data>::~stack () {
stack::node* temp = top ;
while ( temp = top ){
top = top->next ;
delete temp ;
}
}
template <class Data>
void stack<Data>::add ( Data d, int c=-1 ) {
node* temp = new node ;
temp->next = top ;
top = temp ;
top->data = d ;
top->count = c+1 ;
}
template <class Data>
Data stack<Data>::exec () {
node* temp = top ;
if ( !top )
return avto() ;
top = top->next ;
Data d = temp->data ;
delete temp ;
return Data(d) ;
}
template <class Data>
void stack<Data>::remove ( Data d ) {
int c ;
stack tempStack ;
c = top->count ;
Data temp = exec () ;
while ( d != temp ) {
tempStack.add (temp, c) ;
if ( top ) {
c = top->count ;
temp = exec () ;
}
else
break ;
}
do {
if ( tempStack.top ) {
c = tempStack.top->count ;
temp = tempStack.exec () ;
add (temp, c) ;
}
else
break ;
}while ( 1 ) ;
}
template <class Data>
void stack<Data>::print () {
node* temp = top ;
while (temp){
cout << temp->data << "(" << temp->count/2 << ")" << ' ' ;
temp = temp->next ;
}
cout << endl ;
}
void stack<avto>::print () {
node* temp = top ;
while ( temp ){
temp->data.print () ;
cout << '(' << temp->count/2 << ')' ;
cout << ' ' ;
temp = temp->next ;
}
cout << endl ;
}
//----------------------------------------------------------------------
//----------------------------------------------------------------------
void menu ( stack<avto> moby ) {
int action = 99 ;
while (action) {
system ( "cls" ) ;
moby.print () ;
cout << "Выберите действие:"
<< "\n1-Добавить машину"
<< "\n2-Извлечь последнюю машину"
<< "\n3-извлечь машину из середины\n>: " ;
cin >> action ;
switch (action){
case 1 : {
system ( "cls" ) ;
cout << "Вы выбрали Добавить машину. \nВведите номерной знак:" ;
char znak[7] ;
cin >> znak ;
znak[6] = '\0' ;
int z1 = atoi(&znak;[1]) ;
char z2[4] ;
z2[0] = znak[0] ;
z2[1] = znak[4] ;
z2[2] = znak[5] ;
z2[3] = '\0' ;
avto automobile (z1, z2) ;
moby.add (automobile) ;
break ;
}
case 2 : {
avto automobile = moby.exec () ;
break ;
}
case 3 : {
system ( "cls" ) ;
moby.print () ;
cout << "Вы выбрали извлечь машину из середины.\nВведите номерной знак:" ;
char znak[7] ;
cin >> znak ;
znak[6] = '\0' ;
int z1 = atoi(&znak;[1]) ;
char z2[4] ;
z2[0] = znak[0] ;
z2[1] = znak[4] ;
z2[2] = znak[5] ;
z2[3] = '\0' ;
avto automobile (z1, z2) ;
moby.remove (automobile) ;
break ;
}
default : {
action = 0 ;
}
}
}
}
void main () {
setlocale ( LC_ALL, "RUSSIAN" ) ;
stack<avto> moby ;
menu (moby) ;
system ( "Pause" ) ;
return ;
}
Revise this Paste