/************************************************************************** ************************************************************************** A C++ Program to illustrate the implementation of arrays as a Stack ( in graphics ). ************************************************************************** **************************************************************************/
#include<iostream.h>
#include<graphics.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
#include<dos.h>
const max_length=10;
/***********************************************************************///------------------------------ stack ------------------------------///***********************************************************************/class STACK
{
private:
long stack[max_length];
int flag[max_length];
int top;
public:
STACK( );
void pop( );
void push( );
void waiting( );
long get_value( );
void show_main_screen( );
void show_working( );
};
/*************************************************************************///-------------------------- STACK( ) ---------------------------------///*************************************************************************/void STACK::STACK( )
{
top=-1;
for(int count=0;count<max_length;count++)
{
stack[count]=0;
flag[count]=0;
}
}
/*************************************************************************///---------------------- get_value( ) ---------------------------------///*************************************************************************/long STACK::get_value( )
{
int count=0;
char String[10]={NULL};
setfillstyle(1,0);
bar(35,255,320,275);
setcolor(11);
settextstyle(2,0,7);
outtextxy(40,250,"Enter the element : ");
outtextxy(41,250,"Enter the element : ");
do
{
int key_code=0;
char key=NULL;
if(kbhit( ))
{
key=getch( );
key_code=int(key);
}
if( (count>0 && count<5) && key_code==13)
break;
elseif( (key_code>=48 && key_code<=57 || key_code==46) &&
count<4)
{
String[count]=key;
count++;
}
elseif(key_code==8 && count>0)
{
setfillstyle(1,0);
bar(260,255,320,275);
count--;
String[count]=NULL;
}
setcolor(11);
settextstyle(2,0,6);
moveto(265,255);
outtext(String);
moveto(265,255);
outtext(String);
int x=getx( );
int y=gety( )+9;
while(!kbhit( ))
{
settextstyle(0,0,1);
setcolor(15);
moveto(x+2,y);
outtext("_");
delay(250);
setcolor(0);
moveto(x+2,y);
outtext("_");
delay(200);
}
}
while(count<6);
delay(500);
setfillstyle(1,0);
bar(35,255,320,275);
long number=atol(String);
return number;
}
/*************************************************************************///--------------------------- push( ) ---------------------------------///*************************************************************************/void STACK::push( )
{
long item=get_value( );
if(top==max_length-1)
{
setcolor(11);
settextstyle(0,0,3);
outtextxy(30,250,"Stack is Full");
delay(1000);
setcolor(0);
settextstyle(0,0,3);
outtextxy(30,250,"Stack is Full");
}
else
{
top++;
stack[top]=item;
flag[top]=1;
}
}
/*************************************************************************///--------------------------- pop( ) ----------------------------------///*************************************************************************/void STACK::pop( )
{
if(top==-1)
{
setcolor(11);
settextstyle(0,0,3);
outtextxy(30,250,"Stack is Empty");
delay(1000);
setcolor(0);
settextstyle(0,0,3);
outtextxy(30,250,"Stack is Empty");
}
else
{
stack[top]=0;
flag[top]=0;
top--;
}
}
/*************************************************************************///---------------------- show_main_screen( ) --------------------------///*************************************************************************/void STACK::show_main_screen( )
{
for(int count_1=0;count_1<5;count_1++)
{
setcolor(7);
rectangle(count_1,count_1,getmaxx( )-count_1,
getmaxy( )-count_1);
}
int x;
int y;
int color;
for(int count_2=0;count_2<3000;count_2++)
{
x=random(640);
y=random(480);
color=random(15);
putpixel(x,y,color);
}
setfillstyle(1,7);
bar(80,55,540,58);
setcolor(9);
settextstyle(1,0,5);
outtextxy(80,10,"Stack Implementation");
outtextxy(81,10,"Stack Implementation");
setcolor(10);
settextstyle(1,0,5);
outtextxy(445,380,"Stack");
outtextxy(446,380,"Stack");
setcolor(12);
settextstyle(8,0,4);
outtextxy(20,80,"Press :");
outtextxy(21,80,"Press :");
setcolor(14);
settextstyle(7,0,2);
outtextxy(50,120,"< P > to Push an element,");
outtextxy(50,150,"< O > to Pop an element,");
outtextxy(50,180,"< Esc > to Exit.");
setcolor(7);
settextstyle(7,0,2);
outtextxy(51,120," P ");
outtextxy(51,150," O ");
outtextxy(51,180," Esc ");
setcolor(7);
settextstyle(0,0,1);
outtextxy(430,452,"* CopyRights (C) 2000-02");
outtextxy(430,465,"* Muhammad Tahir Shahzad");
setcolor(15);
rectangle(449,79,551,379);
setfillstyle(1,0);
bar(450,80,550,378);
char String[10][10]={"Stack[9]","Stack[8]","Stack[7]","Stack[6]",
"Stack[5]","Stack[4]","Stack[3]","Stack[2]",
"Stack[1]","Stack[0]"};
for(int count_3=0;count_3<max_length;count_3++)
{
setcolor(15);
line(449,79+(count_3*30),550,79+(count_3*30));
setcolor(15);
settextstyle(0,0,1);
outtextxy(380,92+(count_3*30),String[count_3]);
}
}
/*************************************************************************///------------------------- show_working( ) ---------------------------///*************************************************************************/void STACK::show_working( )
{
show_main_screen( );
int size=0;
char *Buffer=NULL;
size=imagesize(555,80,635,400);
Buffer=newchar[size];
getimage(555,80,635,400,Buffer);
int key_code=0;
do
{
waiting( );
char key=NULL;
key=getch( );
key_code=int(key);
if(key_code==112 || key_code==80)
push( );
elseif(key_code==111 || key_code==79)
pop( );
elseif(key_code==27 || key_code==101)
exit(0);
for(int count_1=0;count_1<max_length;count_1++)
{
int flag=0;
putimage(555,80,Buffer,0);
if(count_1==top)
{
setfillstyle(1,11);
bar(565,360-(count_1*30),595,370-(count_1*30));
int y1=365-(count_1*30);
int y2=355-(count_1*30);
setcolor(11);
for(int count_2=0;count_2<=20;count_2++)
{
line(558,y1,568,y2);
y2++;
}
setcolor(15);
settextstyle(2,0,6);
outtextxy(600,y1-10,"Top");
outtextxy(601,y1-10,"Top");
flag=1;
}
if(flag)
break;
}
delay(500);
for(int count_3=0;count_3<max_length;count_3++)
{
if(flag[count_3]!=0)
setfillstyle(1,count_3+1);
else
setfillstyle(1,0);
bar(450,378-(count_3*30),550,350-(count_3*30));
}
for(int count_4=0;count_4<max_length;count_4++)
{
setcolor(15);
settextstyle(0,0,1);
charvalue[6]={NULL};
itoa(stack[count_4],value,10);
if(flag[count_4]!=0)
outtextxy(480,360-(count_4*30),value);
}
}
while(key_code!=27);
}
/*************************************************************************///---------------------------- waiting( ) -----------------------------///*************************************************************************/void STACK::waiting( )
{
do
{
setfillstyle(1,4);
bar(51,440,99,445);
setfillstyle(1,10);
bar(101,440,149,445);
setfillstyle(1,9);
bar(151,440,199,445);
setfillstyle(1,14);
bar(201,440,249,445);
delay(300);
setfillstyle(1,0);
bar(51,440,99,445);
delay(150);
bar(101,440,149,445);
delay(150);
bar(151,440,199,445);
delay(150);
bar(201,440,249,445);
delay(150);
setfillstyle(1,4);
bar(51,440,99,445);
delay(150);
setfillstyle(1,10);
bar(101,440,149,445);
delay(150);
setfillstyle(1,9);
bar(151,440,199,445);
delay(150);
setfillstyle(1,14);
bar(201,440,249,445);
}
while(!kbhit());
setfillstyle(1,0);
bar(51,440,99,445);
bar(101,440,149,445);
bar(151,440,199,445);
bar(201,440,249,445);
}
main( )
{
int driver=VGA;
int mode=VGAHI;
initgraph(&driver,&mode,"..\\Bgi");
STACK obj;
obj.show_working( );
closegraph( );
return 0;
}