hi all check out the code I've put together
Code:
#include <iostream>
#include <iomanip>
using namespace std;
//===============================CLASSE DEFINITION FOR STACK============================================================
template <class T, int n>
class stack
{
private: T elt[n];
int counter;
public:
void clearstack() { counter = -1; } //INITIALIZE COUNTER
bool emptystack() { return counter==-1?true:false; } //EVALUATION IF STACK IS EMPTY
bool fullstack() { return counter== n-1?true:false; } //EVALUATION IF STACK IS FULL
void push(T x) { counter++; elt[counter] = x; } //FUNCTION TO ADD TO STACK
T pop() { T x; x= elt[counter]; counter--;return x; } //FUNCTION TO POP THE STACK
};
//======================================================================================================================
int main()
{
int q, m, Z; //THREE VARIABLES M Q AND P DECLARED FOR PUSH AND POP OPERATIONS
char j; //VARIABLE J TO DETERMINE WETHER TO CONTINUE PROGRAM OR NOT
char k; //VARIABLE K TO DETERMINE TYPE OF OPERATION BINARY OCTAL OR HEXADECIMAL
int z; //VARIALBE Z TO USE IN HEXADECIMAL OPERATIONS SPECIFICALLY
char p; //VARIABLE P FOR POP OPERATIONS
stack <int, 10> s; //OBJECT OF STACK TYPE DECLARED
while(j!='n') //BEGINNING OF WHILE LOOP TO CONTINUE PROGRAM UNTIL VARIABLE J IS EQUAL TO 'n'
{
//=======================================================================================================================
cout<<"===========================Conversion Menu================================"<<endl;
cout<<"1.Decimal to binary"<<endl;
cout<<"2.Decimal to octal"<<endl;
cout<<"3.Decimal to hexadecimal"<<endl;
cout<<"4.Exit"<<endl;
cin>>k; //REQUEST TO USER TO ENTER THE TYPE OF OPERATION
switch(k) //SWITCH STATEMENT USED TO RUN TYPE OF OPERATION CHOSEN BY USER
{
//=======================================================================================================================
case '1': //CASE 1 FOR BINARY OPERATIONS
s.clearstack();
cout<<"Enter a number to convert: ";
cin>>m;
while( !s.fullstack() )
{
q = m % 2;
s.push(q);
m = m / 2;
}
while(!s.emptystack())
{
p = s.pop();
cout<<p;
}
cout<<endl;
break;
//=======================================================================================================================
case '2': //CASE 2 FOR OCTAL OPERATIONS
s.clearstack();
cout<<"Enter a number to convert: ";
cin>>m;
while( !s.fullstack() )
{
q = m % 8;
s.push(q);
m = m / 8;
}
while(!s.emptystack())
{
p = s.pop();
cout<<p;
}
cout<<endl;
break;
//=======================================================================================================================
case '3': //CASE 3 FOR HEXADECIMAL OPERATIONS
s.clearstack();
cout<<"Enter a number to convert: ";
cin>>m;
while( !s.fullstack() )
{
if (m % 16< 10 || m % 16>15)
{
Z=m%16;
s.push(Z);m = m / 16;
}
else if(m % 16>= 10 || m % 16<=15)
{
z = m % 16;
switch (z)
{
case 10: z='A'; s.push(z); m = m / 16; break;
case 11: z='B'; s.push(z); m = m / 16; break;
case 12: z='C'; s.push(z); m = m / 16;break;
case 13: z='D'; s.push(z); m = m / 16;break;
case 14: z='E'; s.push(z); m = m / 16;break;
case 15: z='C'; s.push(z); m = m / 16;break;
}
}
}
while(!s.emptystack())
{
p = s.pop();
cout<<p;
}
cout<<endl;
case '4':
return 0;
break;
}
cout<<"\nPRESS 'y' TO CONTINUE: ";
cin>>j;
while(j !='y')
{
cout<<"\nYou entered an invalid response:";
cout<<"\nPlease re-enter your choice: ";
cin>>j;
}
}
}#include <iostream>
#include <iomanip>
using namespace std;
//===============================CLASSE DEFINITION FOR STACK============================================================
template <class T, int n>
class stack
{
private: T elt[n];
int counter;
public:
void clearstack() { counter = -1; } //INITIALIZE COUNTER
bool emptystack() { return counter==-1?true:false; } //EVALUATION IF STACK IS EMPTY
bool fullstack() { return counter== n-1?true:false; } //EVALUATION IF STACK IS FULL
void push(T x) { counter++; elt[counter] = x; } //FUNCTION TO ADD TO STACK
T pop() { T x; x= elt[counter]; counter--;return x; } //FUNCTION TO POP THE STACK
};
//======================================================================================================================
int main()
{
int q, m, Z; //THREE VARIABLES M Q AND P DECLARED FOR PUSH AND POP OPERATIONS
char j; //VARIABLE J TO DETERMINE WETHER TO CONTINUE PROGRAM OR NOT
char k; //VARIABLE K TO DETERMINE TYPE OF OPERATION BINARY OCTAL OR HEXADECIMAL
int z; //VARIALBE Z TO USE IN HEXADECIMAL OPERATIONS SPECIFICALLY
char p; //VARIABLE P FOR POP OPERATIONS
stack <int, 10> s; //OBJECT OF STACK TYPE DECLARED
while(j!='n') //BEGINNING OF WHILE LOOP TO CONTINUE PROGRAM UNTIL VARIABLE J IS EQUAL TO 'n'
{
//=======================================================================================================================
cout<<"===========================Conversion Menu================================"<<endl;
cout<<"1.Decimal to binary"<<endl;
cout<<"2.Decimal to octal"<<endl;
cout<<"3.Decimal to hexadecimal"<<endl;
cout<<"4.Exit"<<endl;
cin>>k; //REQUEST TO USER TO ENTER THE TYPE OF OPERATION
switch(k) //SWITCH STATEMENT USED TO RUN TYPE OF OPERATION CHOSEN BY USER
{
//=======================================================================================================================
case '1': //CASE 1 FOR BINARY OPERATIONS
s.clearstack();
cout<<"Enter a number to convert: ";
cin>>m;
while( !s.fullstack() )
{
q = m % 2;
s.push(q);
m = m / 2;
}
while(!s.emptystack())
{
p = s.pop();
cout<<p;
}
cout<<endl;
break;
//=======================================================================================================================
case '2': //CASE 2 FOR OCTAL OPERATIONS
s.clearstack();
cout<<"Enter a number to convert: ";
cin>>m;
while( !s.fullstack() )
{
q = m % 8;
s.push(q);
m = m / 8;
}
while(!s.emptystack())
{
p = s.pop();
cout<<p;
}
cout<<endl;
break;
//=======================================================================================================================
case '3': //CASE 3 FOR HEXADECIMAL OPERATIONS
s.clearstack();
cout<<"Enter a number to convert: ";
cin>>m;
while( !s.fullstack() )
{
if (m % 16< 10 || m % 16>15)
{
Z=m%16;
s.push(Z);m = m / 16;
}
else if(m % 16>= 10 || m % 16<=15)
{
z = m % 16;
switch (z)
{
case 10: z='A'; s.push(z); m = m / 16; break;
case 11: z='B'; s.push(z); m = m / 16; break;
case 12: z='C'; s.push(z); m = m / 16;break;
case 13: z='D'; s.push(z); m = m / 16;break;
case 14: z='E'; s.push(z); m = m / 16;break;
case 15: z='C'; s.push(z); m = m / 16;break;
}
}
}
while(!s.emptystack())
{
p = s.pop();
cout<<p;
}
cout<<endl;
case '4':
return 0;
break;
}
cout<<"\nPRESS 'y' TO CONTINUE: ";
cin>>j;
while(j !='y')
{
cout<<"\nYou entered an invalid response:";
cout<<"\nPlease re-enter your choice: ";
cin>>j;
}
}
}
alright it works for characters but when it hits an integer I get ascii symbols would any of you have some suggestions on how to remedy this situation