数数制转换程序c++.docx
《数数制转换程序c++.docx》由会员分享,可在线阅读,更多相关《数数制转换程序c++.docx(16页珍藏版)》请在冰点文库上搜索。
数数制转换程序c++
#include
#include
#include"Stack.h"//利用到栈,把头文件Stack包含进来
usingnamespacestd;
classTransform
{
public:
Transform(){};//构造函数
~Transform(){};//析构函数
voidTr10(charc[],doublem);//10进制数据转换成其他进制
doubleTrn_10(charc[],intn);//其他进制数据转换成10进制数据
voidUseStack(intten,intbase);//应用栈原理把10进制数据转换成其他进制数据
voidStack_10();//调用UseStack函数的函数
voidBegin();//主界面函数
voidEnd();//界面结束函数
voidUsetranstion();//调用一般函数进行各进制间的转换
voidInformation();//课程设计信息函数
intBehead();//调用其他函数应用函数
private:
voidToUpper(char*c);//将小写字母a-z转换为A-Z
voidTrint(intm,intn);//转换数据的整数部分
voidTrdig(doublem,intn);//转换数据的小数部分
voidIntdig(doublem,intn);//合并转换成的整数和小数部分
};
voidTransform:
:
Trint(intm,intn)//转换数据的整数部分
{
if(m)
{
Trint(m/n,n);
if(n<10)//如果要转换成的进制数据小于10,则直接输出那个数据.
cout<else//如果要转换成的进制数据大于等于10,即为16进制,则10到15相应转换为A到F再输出.
m%n>=10?
cout<cout<}
}
voidTransform:
:
Trdig(doublem,intn)//转换数据的小数部分
{
while(m)
{
if(n<10)//如果要转换成的进制数据小于10,则直接输出那个数据.
cout<else//如果要转换成的进制数据大于等于10,即为16进制,则10到15相应转换为A到F再输出.
m*n>=10?
cout<cout<m=m*n-int(m*n);
}
}
voidTransform:
:
Intdig(doublem,intn)//合并转换成的整数和小数部分
{
Trint(m,n);//转换整数部分并输出
if(int(m)==m)
return;
cout<<'.';//输出小数点
m-=int(m);
Trdig(m,n);//转换小数部分,并接在小数点后面
}
voidTransform:
:
Tr10(charc[],doublem)//10进制数据转换成其他进制数据
{
cout<<"-----"<cout<<"-----"<cout<<"-----"<}
doubleTransform:
:
Trn_10(charc[],intn)//其他进制数据转换成10进制数据
{
charz[100];
inti=0,j;
doubleb=0;
cout<<"-----"<while(*c!
='.'&&*c!
='\0')z[i++]=*c++;i--;
if(*c=='\0')c--;
for(j=0;j<=i;j++)
if(z[j]<65)b+=(z[j]-48)*pow(n,i-j);//调用系统的幂函数
elseb+=(z[j]-55)*pow(n,i-j);
for(c++,j=-1;*c!
='\0';c++,j--)
if(*c<65)b+=(*c-48)*pow(n,j);
else
b+=(*c-55)*pow(n,j);
cout<
returnb;
}
voidTransform:
:
UseStack(intten,intbase)//应用栈原理把10进制数据转换成其他进制数据
{
intm=ten;
intval;
cout<cout<<"-----所输入的进制数是:
"<Stackastack(20);//声明一个栈的对象
while(m!
=0)//如果要转换的数据不为0,则进入循环
{
val=m%base;//需要转换的10进制数值除以要转换成的进制,并取余数
astack.Push(val);//将余数进栈
m=m/base;//m等于商,取整
}
cout<<"-----转换成"<
";
while(!
astack.IsEmpty())//如果栈不为空,则进入循环
{
val=astack.Pop();//将数据出栈
if(val>9)//如果出栈数大于9,则将10到15的数转换成A到F.
{
switch(val)
{
case10:
cout<<"A";
break;
case11:
cout<<"B";
break;
case12:
cout<<"C";
break;
case13:
cout<<"D";
break;
case14:
cout<<"E";
break;
case15:
cout<<"F";
break;
}
}
else
cout<}
cout<cout<cout<<"////////////////////////*End*////////////////////////\n";
cout<<"////////////////////////////////////////////////////////////////////"<cout<<"按1返回主界面,按2结束程序:
";
inth;
do
{
cin>>h;//课程设计信息界面给出选择,用户输入选项
switch(h)
{
case1:
//课程设计信息界面,选1返回主界面。
system("cls");//调用系统函数进行清屏
Behead();
break;
case2:
//课程设计信息界面,选2结束程序。
End();
break;
default:
cout<<"请重新正确选择!
";//如果输入1,2以外的选项,则进入循环并重新输入选项。
break;
}
}while(h<1||h>2);
}
voidTransform:
:
Stack_10()//调用UseStack函数的函数
{
inta(0),b(0);
cout<<"////////////////////////////////////////////////////////////////////"<cout<<"/////////////////利用栈进行10进制的转换/////////////////"<cout<<"//////此处只进行10进制正整数转换成2或8或16进制//////"<cout<cout<<"-----请输入你所要转换的10进制数:
";
cin>>a;
cout<请输入:
";
do
{
cin>>b;
if(b!
=2&&b!
=8&&b!
=16)//如果要转换成的进制不符合,则提示错误
{
cout<cout<<"-----进制数输入错误!
请重新输入:
";
}
}while(b!
=2&&b!
=8&&b!
=16);
UseStack(a,b);
}
voidTransform:
:
Begin()//主界面函数
{
cout<<"///////////////////////////////////////////////////////"<cout<cout<<"//////////////欢迎进入数制转换系统//////////////"<cout<cout<<"★按1进行各种数制的转换"<cout<cout<<"★按2利用栈进行10进制的转换"<cout<cout<<"★按3了解课程设计信息"<cout<cout<<"★按4退出本程序"<cout<cout<<"///////////////////////////////////////////////////////";
}
voidTransform:
:
End()//界面结束函数
{
system("cls");//调用系统函数进行清屏
cout<<"谢谢使用本程序,再见!
"<}
voidTransform:
:
ToUpper(char*c)////将小写字母a-z转换为A-Z
{
intlen=strlen(c);
intoffset='A'-'a';
for(inti=0;i{
if(c[i]>='a'&&c[i]<='z')
{
c[i]+=offset;
}
}
}
voidTransform:
:
Usetranstion()//进行转换
{
cout<<"///////////////////////////////////////////////////////"<cout<<"////////////////欢迎使用数制转换////////////////"<cout<charc[100];
intn;
cout<<"\n-----请输入该数值的进制(2或8或10或16进制):
";
cin>>n;
cout<<"\n-----请输入要你所要转换的数据值(0-9,A-F,a-f):
";
cin>>c;
if(n==16)//16进制
{
ToUpper(c);//将小写字母a-z转换为A-Z
}
cout<Tr10(c,Trn_10(c,n));
cout<cout<cout<<"//////////////////////*End*//////////////////////\n";
cout<<"///////////////////////////////////////////////////////"<cout<cout<<"按1返回主界面,按2结束程序:
";
}
voidTransform:
:
Information()//课程设计信息
{
cout<<"///////////////////////////////////////////////////////"<cout<<"////////////////课程设计信息////////////////"<cout<<"★功能:
进行数制转换"<cout<<"★原理:
1.一般函数及系统函数"<cout<<"2.栈"<cout<<"3.分步求取"<cout<<"★课程:
数据结构"<cout<<"★指导老师:
吴**"<cout<<"★制作人:
陈**,彭**"<cout<<"★时间:
2008年1月1日"<cout<<"///////////////////////////////////////////////////////"<cout<}
intTransform:
:
Behead()//应用函数,递归调用其他函数。
{
Begin();//调用Begin函数,显示主界面。
inta;
do
{
cin>>a;//主界面给出选择,用户输入选项
switch(a)
{
case1:
//主界面,选1进入数制转换界面。
system("cls");//调用系统函数进行清屏
Usetranstion();
intd;
do
{
cin>>d;//数制转换界面给出选择,用户输入选项
switch(d)
{
case1:
//数制转换界面,选1返回主界面。
system("cls");//调用系统函数进行清屏
Behead();
break;
case2:
//数制转换界面,选2结束程序
End();
break;
default:
cout<<"请重新正确选择!
";//如果输入1,2以外的选项,则进入循环并重新输入选项。
break;
}
}while(d<1||d>2);
break;
case3:
//主界面,选2进入课程设计信息界面。
system("cls");//调用系统函数进行清屏
Information();
cout<<"按1返回主界面,按2结束程序:
";
intb;
do
{
cin>>b;//课程设计信息界面给出选择,用户输入选项
switch(b)
{
case1:
//课程设计信息界面,选1返回主界面。
system("cls");//调用系统函数进行清屏
Behead();
break;
case2:
//课程设计信息界面,选2结束程序。
End();
break;
default:
cout<<"请重新正确选择!
";//如果输入1,2以外的选项,则进入循环并重新输入选项。
break;
}
}while(b<1||b>2);
break;
case4:
//主界面,选3结束程序。
End();
break;
case2:
system("cls");//调用系统函数进行清屏
Stack_10();
break;
default:
cout<<"请重新正确选择!
";//如果输入1,2,3以外的选项,则进入循环并重新输入选项。
break;
}
}while(a<1||a>4);
return0;
}
#pragmaonce
#include
#include
usingnamespacestd;
template
classStack//顺序栈的类定义
{
public:
Stack(int=20);//建立一个空栈,其最大体积maxSzie的缺省值为10
virtual~Stack(){delete[]elements;}
voidPush(constType&item);
//如果IsFull(),则执行StackFull();否则把item插入到栈的栈顶
TypePop();//如果IsEmpty(),则执行StackEmpty()并返回0;否则退出并返回栈顶的值
TypeGetTop();//如果IsEmpty(),则返回0;否则返回栈顶元素的值
voidMakeEmpty(){top=-1;}//置空栈
intIsEmpty()const{returntop==-1;}
//如果栈中元素个数等于0,则返回True
(1),否则返回False(0)
intIsFull()const{returntop==maxSize-1;}
//如果栈中元素个数等于maxSize,则返回True
(1),否则返回False(0)
private:
inttop;//在顺序存储分配下是栈顶指针
Type*elements;//在顺序存储分配下是存放栈中元素的栈数组
intmaxSize;//栈最大可容纳元素个数
};
template
Stack:
:
Stack(ints):
top(-1),maxSize(s)
//建立一个最大尺寸为s的空栈,若分配不成功则错误处理
{
elements=newType[maxSize];//创建栈空间
assert(elements!
=0);//断言:
动态存储分配成功与否
}
template
voidStack:
:
Push(constType&item)
//若栈不满,则将元素item插入到该栈的栈顶,否则出错处理
{
assert(!
IsFull());//断言:
栈不满则继续执行
elements[++top]=item;//栈顶指针先加1,然后按此地址进栈
}
template
TypeStack:
:
Pop()
{
assert(!
IsEmpty());//断言:
判栈空否,若断言成立则继续执行
returnelements[top--];//返回栈顶元素的值,同时栈顶指针退1
}
template
TypeStack:
:
GetTop()
{
assert(!
IsEmpty());//断言:
判栈空否,若断言成立则继续执行
returnelements[top];//返回栈顶元素的值
}
voidmain()
{
Transforma;//声明一个对象
a.Behead();//对象调用函数
}