I'm working on a program to convert decimal to binary, octal and hexadecimal. I can get the code correct to convert decimal to binary and octal, but in reverse. I was 'given' the code to use for STACK class to push and pop o reverse teh order, but I'm having trouble organizing everything. I need to use a switch case to have teh user input a decimal number then chose what to convert it to (bin, octal or hex). Here's what I know so far:
Here's the stack class:
constint STACK_SIZE = 100;
class stack {
private:
int count; // number of items in the stack
int data[STACK_SIZE];
public:
stack();
~stack();
void push(constint item); // push an item on the stack
int pop(void); // pop item off the stack
};
stack::stack() // constructor
{
count = 0; // zero the stack
}
stack::~stack() {} // default destructor
void stack::push(constint item)
{
if (count < STACK_SIZE)
{
data[count] = item;
++count;
}
else cout << "Overflow!\n";
}
int stack::pop(void)
{
if (count >0)
{
--count;
return (data[count]);
}
else
{
cout << "Underflow!\n";
return 0;
}
}
This code works to convert (but in reverse): Binary
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#include<iostream>
usingnamespace std;
int main()
{
int num;
int total = 0;
cout << "Please enter a decimal: ";
cin >> num;
while(num > 0)
{
total = num % 2;
num /= 2;
cout << total << " ";
}
return 0;
}
Octal
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#include<iostream>
usingnamespace std;
int main()
{
int num;
int total = 0;
cout << "Please enter a decimal: ";
cin >> num;
while(num > 0)
{
total = num % 8;
num /= 8;
cout << total << " ";
}
return 0;
}
Can anyone help me with this? I have gotten my code to work to convert dec to binary and octal, but they are still 'cout'ing in reverse order. I need to figure out the code for converting dec to hex. Then I need to use the STACK class to correct the number order in the cout. I was given the complete STACk class as part of the assignment but I'm not sure where to put it or how to use it. I understand the push pop concept, but not the implementation. Do I use it 3 times-once for each conversion? Or??? Please help if you understand this...Here is my code followed by the STACk class.
Still working here folks! Anyone with input Please respond! I got the code to work to do all of the conversions from decimal to binary, octal and hex. It is a bit inconsistent because I didn't use the stack on the hex conversion. Is there anything you all would do to clean this up? Can anyone help me make the hex use "stack class" too? Or any obvious coding problems? Any input is appreciated. thanks.
Here is my code:
#include<iostream>
usingnamespace std;
constint STACK_SIZE = 100;
class stack {
private:
int count; // number of items in the stack
int data[STACK_SIZE];
public:
stack();
~stack();
void push(constint item); // push an item on the stack
int pop(void); // pop item off the stack
};
stack::stack() // constructor
{
count = 0; // zero the stack
}
stack::~stack() {} // default destructor
void stack::push(constint item)
{
if (count < STACK_SIZE)
{
data[count] = item;
++count;
}
else cout << "Overflow!\n";
}
int stack::pop(void)
{
if (count >0)
{
--count;
return (data[count]);
}
else
{
cout << "Underflow!\n";
return 0;
}
}
int menu();
void toBinary();
void toOctal();
void toHex();
int main()
{
int choice = menu();
switch(choice)
{
case (0):
toBinary();
break;
case (1):
toOctal();
break;
case(2):
toHex();
break;
}
return 0;
}
int menu()
{
int choice;
cout << " *****Menu***** " << endl;
cout << "Convert the number from decimal into: " << endl;
cout << "0-Binary" << endl;
cout << "1-Octal" << endl;
cout << "2-Hexadecimal" << endl;
cin >> choice;
return choice;
}
void toBinary()
{
int num;
int total = 0;
stack reverse; // declare a local stack!!!!!!!!!!!!!!!!!!
int ctr=0; // declare a local counter!!!!!!!!!!!!!!!
cout << "Please enter a decimal: ";
cin >> num;
cout << "The decimal number " << num << " converts to the binary number: ";
while(num > 0)
{
total = num % 2;
num /= 2;
//cout << total << " ";
reverse.push(total); // save to stack instead of printing!!!!!!!!!
ctr++; // count the number of digits saved!!!!!!!!!!!!
}
while (ctr > 0)
{
cout << reverse.pop() << " ";
ctr--;
}
}
void toOctal()
{
int num;
int total = 0;
stack reverse; // declare a local stack!!!!!!!!!!!!!!!!!!
int ctr=0; // declare a local counter!!!!!!!!!!!!!!!
cout << "Please enter a decimal: ";
cin >> num;
cout << "The decimal number " << num << " converts to the octal number: ";
while(num > 0)
{
total = num % 8;
num /= 8;
//cout << total << " ";
reverse.push(total); // save to stack instead of printing!!!!!!!!!
ctr++; // count the number of digits saved!!!!!!!!!!!!
}
while (ctr > 0)
{
cout << reverse.pop() << " ";
ctr--;
}
}
void toHex()
{
int num,counter,x,a,hex[100];
//char c[100];
cout<<"Please enter a decimal: ";
cin>>num;
cout<<"\nThe Decimal number "<<num<<" converts to the Hexadecimal number: ";
for(counter=0;num!=0;counter++)
{
a=num%16;
hex[counter]=a;
num=num/16;
}
for(x=counter-1;x>=0;x--)
{
if(hex[x]==10)
{
cout<<"A";
}
elseif(hex[x]==11)
{
cout<<"B";
}
elseif(hex[x]==12)
{
cout<<"C";
}
elseif(hex[x]==13)
{
cout<<"D";
}
elseif(hex[x]==14)
{
cout<<"E";
}
elseif(hex[x]==15)
{
cout<<"F";
}
else
{
cout<<hex[x];
}
}
}