PALM开发教程-第十四章 程序的可移植性(转)

该内容为来自ITPUB博客的转载声明,给出了博客链接,强调转载需注明出处,否则将追究法律责任。
在这一章中,我们将编写计算器程序运运算的核心部分。我先为核心编制一个ANSI C版本,然后将详细探讨如何使这些代码在Palm OS中运行。
设计计算器核心

在开始写代码之前,我们必须知道到底该做些什么。一个解决这类问题的好方法是建立一个包括程序各个状态并通过箭头相连表示它们之间的关系的状态表。对本程序来说,这也是个很好的办法,因为这个程序比一般的程序包含了更多状态和状态关联。

你也可以将状态表制成一个大纲的形式,这样会使对程序看的更清楚。通常,当我想知道程序该完成哪些工作时,我就先从纸上画出程序的状态表大纲。不管效果如何,你可以先试一下。我建议你在看我的状态表之前,自己先做一个。表14-1是我所做的状态表。

状态:

操作算子――->改变符号―――>完成操作、显示结果、保存―――>回到预备状态

等于号(equal)―――>改变符号―――>完成操作、显示结果―――>回到预备状态

清除号(clear) ―――>清除数字和操作算子―――>回到预备状态

完成号(Done)―――>拷贝当前显示结果到粘贴板―――>退出程序预备状态:显示当前数字

0―――>显示0―――>预备状态

其它数字―――>显示数字―――>插入状态

改变符号―――>显示-0―――>预备状态

小数点―――>显示0. ―――>小数状态

指数―――>出错声―――>预备状态

整数状态:显示一个整数

数字―――>如果是允许输入的最大数字,则发出声音―――>整数状态

改变符号―――>给当前整数取反―――>整数状态

小数点―――>在当前整数后加小数点显示―――>小数状态

指数―――>在当前整数后加e+0显示―――>指数状态

小数状态:显示一个数字和一个小数点

数字―――>如果是允许输入的最大数字就发出报警音―――>把新输入的数字显示在最后―――>小数状态

改变符号―――>给当前显示的数字取反显示―――>小数状态

小数点―――>出错音―――>小数状态

指数―――>在当前显示的数字后加e+0显示―――>指数状态

指数预备状态:带e+0的显示一个数字

0―――>指数预备状态

其它数字―――>显示数字的指数―――>指数输入状态

改变符号―――>改变当前的指数符号为e-0―――>指数预备状态

小数点―――>出错音―――>指数预备状态

指数号―――>出错音―――>指数预备状态

指数输入状态:显示带指数的数字

数字―――>如果是允许输入的最大数字就发出警报音―――>给输入的数字取指数―――>指数输入状态

改变符号―――>改变指数的符号―――>指数输入状态

小数点―――>出错音―――>指数输入状态

指数号―――>出错音―――>指数输入装态


在我开始的状态表中,还有一些其它的状态,例如Clear状态和Enter Second Number状态,但当我画完时,发现这些状态可以很容易的融入到其它的状态中去。在开始编程之前,状态表将是一个很好的参考材料,所以我建议都来使用状态表,况且其它的大多数界面都要比本例子简单和直接。

剩余代码

为了好解释有关将ANSI标准C代码导入Palm OS的知识,我用以下的方法编写了程序。在程序中有一些可移植性的错误,看看你自己在看导入代码那部分之前能不能将它找出来。

新的calc.h
这个calc.h将代替上一章最后创建的“虚”文件,以便我们做进一步的调试。


#ifndef CALC_H
#define CALC_H
//////////////////////////////////////////////////////////////////////////////
// calc.h
// Definitions for the generic calculation routines.
// Copyright (c) 1999, Robert Mykland. All rights reserved.
//////////////////////////////////////////////////////////////////////////////

///////////////////////
// Global Prototypes //
///////////////////////

void calcAdd( void ); // Queue an add operation
void calcAppend( int ); // Append a digit
void calcChangeSign( void ); // Change the sign of the entry
void calcClear( void ); // Clear/reset the calculator
void calcDivide( void ); // Queue a divide operation
void calcEquals( void ); // Finish the current operation
void calcExponent( void ); // Start gathering the exponent
void calcMultiply( void ); // Queue a multiply operation
void calcPoint( void ); // Start gathering the fraction
void calcSubtract( void ); // Queue a subtraction operation

//////////////////////
// Global Constants //
//////////////////////

#define MAX_NUMBER_SIZE 40

#endif // CALC_H

现在头文件已经转换为了原来传统类型的文件。
Calc.c的普通代码
在文件calc.c中实现了calc.h中定义的函数。我们将对这些代码进行简单的描述,因为它们和Palm OS关系不大,只是ANSI中实现计算器功能的普通代码。

//////////////////////////////////////////////////////////////////////////////
// calc.c
// Implements a generic calculator.
// Copyright (c) 1999, Robert Mykland. All rights reserved.
//////////////////////////////////////////////////////////////////////////////

//////////////
// Includes //
//////////////

#include "app.h" // The definitions for this application
#include "calc.h" // The definitions for this module

///////////////////////
// Global Prototypes //
///////////////////////

void calcAdd( void ); // Queue an add operation
void calcAppend( int ); // Append a digit
void calcChangeSign( void ); // Change the sign of the entry
void calcClear( void ); // Clear/reset the calculator
void calcDivide( void ); // Queue a divide operation
void calcEquals( void ); // Finish the current operation
void calcExponent( void ); // Start gathering the exponent
void calcMultiply( void ); // Queue a multiply operation
void calcPoint( void ); // Start gathering the fraction
void calcSubtract( void ); // Queue a subtraction operation

//////////////////////
// Local Prototypes //
//////////////////////

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-126899/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10294527/viewspace-126899/

源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值