如新建一个工作簿,b1=offset(a1,,,,),保存并关闭,再打开,什么也不修改,再关闭时,就会提示是否保存。
易失性函数有许多,如offset/indirect/now/today等等。
我修改了一下,已经能运行了(见注释),但是对于一些特定的树,打印不出正确的结果。比如:a/b/c//
我写了一个递归的遍历(结果正确),非递归的版本结果存在一些问题,你修改修改吧。
有问题可以给我发消息.Good Luck.
#include<iostream.h>
#include<malloc.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct BiTNode
{
char d
struct BiTNode *lchild,*rchild
}BiTNode,*BiTree
typedef struct SqStack
{
// 因为这个stack是用来保存树的节点的,所以base和top的类型都应该是BiTree的指针.
BiTree *base,*top
int stacksize
}SqStack
void CreateTree(BiTree &T)
{
char ch
cin>>ch
if(ch=='/')
{
T=(BiTNode *)malloc(sizeof(BiTNode))
T->d=ch
// 建立树的时候,注意加上这两条语句
T->lchild = NULL
T->rchild = NULL
} else {
if(T=(BiTNode *)malloc(sizeof(BiTNode)))
{
T->d=ch
cout<<"请输入"<<T->d<<"的左孩子"<<endl
CreateTree(T->lchild)
cout<<"请输入"<<T->d<<"的右孩子"<<endl
CreateTree(T->rchild)
}
}
}
void InitStack(SqStack &S)
{
// 注意变量类型的修改
S.base=(BiTree*)malloc(STACK_INIT_SIZE*sizeof(BiTree*))
S.top=S.base
S.stacksize=STACK_INIT_SIZE
}
int SEmpty(SqStack S)
{
if(S.top==S.base){ // 这里 应该用 ==
return 1
}
return 0
}
void Push(SqStack &S,BiTree e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(BiTree*)realloc(S.base,(S.stacksize+STACKINCREMENT*sizeof(BiTree*)))
S.top=S.base+S.stacksize
S.stacksize+=STACKINCREMENT
}
//只是把两条语句分开写了
*S.top =e
S.top++
}
void Pop(SqStack &S,BiTree &e)
{
if(!SEmpty(S)){
//只是把两条语句分开写了
S.top--
e=*S.top
} else {
cout <<"stack is empty!\n"
}
}
// 我写的一个递归版的遍历
void MyPreOrderTraverse(BiTree T){
if ( T != NULL ){
cout <<T->d <<endl
} else {
return
}
cout <<"L:"
MyPreOrderTraverse(T->lchild)
cout <<"R:"
MyPreOrderTraverse(T->rchild)
}
/*
// 我修改的版本
void PreOrderTravere(BiTree T)
{
SqStack S
InitStack(S)
BiTree p
p=T
// 加了这个判断
if ( p == NULL ){
cout <<"the tree is not creat!\n"
return
}
// 修改为下面的形式
while(p)
{
cout<<p->d <<"->"
Push(S,p)
p=p->lchild
}
while ( !SEmpty(S) ){
Pop(S,p)
p=p->rchild
if ( p == NULL ) continue
cout<<p->d <<"->>"
p = p->lchild
// 打印p的孩子节点
while(p)
{
cout<<p->d <<"->"
Push(S,p)
p=p->lchild
}
}
}
*/
// 你的原来的版本
void PreOrderTravere(BiTree T)
{
SqStack S
InitStack(S)
BiTree p
p=T
while(p||!SEmpty(S))
{
if(p)
{
cout<<p->d<<"->"
Push(S,p)
p=p->lchild
}
else
{
Pop(S,p)//编译时这里出错,类型不匹配
cout<<p->d<<"->>"
p=p->rchild
}
}
}
void main()
{
BiTree t
cout<<"请输入树的根结点."<<endl
CreateTree(t)
PreOrderTravere(t)
cout <<"\n------------------------\n"
MyPreOrderTraverse(t)
cout<<"先序遍历完成."<<endl
}
如果在施耐德PLC编程软件中写程序时出现“硬件目录不匹配”的提示,可能是以下原因导致的:1. PLC型号选择错误:在编写PLC程序时,需要选择正确的PLC型号。如果选择的PLC型号与实际使用的PLC不匹配,就会出现“硬件目录不匹配”的提示。
2. PLC配置错误:在编写PLC程序之前,需要正确配置PLC的硬件参数,例如输入输出模块数量、模块类型、通信模块等。如果配置错误,就会导致“硬件目录不匹配”的提示。
3. PLC与编程软件版本不匹配:有些PLC型号和编程软件之间有版本兼容性的问题,如果使用不兼容的版本进行编程,就会出现“硬件目录不匹配”的提示。
针对以上问题,可以尝试以下解决方法:
1. 检查PLC型号是否选择正确,并检查PLC配置是否正确。
2. 如果是版本不匹配的问题,可以尝试更新编程软件或者固件版本,使它们相互兼容。
3. 如果以上方法都不能解决问题,可以尝试重新安装编程软件,并根据官方文档进行正确配置和使用。
如果问题依然存在,可以查看编程软件的错误日志或联系相关技术支持人员进行帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)