2010年第7期 福建 电脑 83 多元分段函数求解的数组编程实现 马容生 (柳州职业技术学院信息工程系广西柳州545006) 【摘 要】:分段函数广泛应用-I-A-4Jq的实际生活中,利用计算机编程实现对分段函数求值的计算,可以大大减轻手工 计算的劳动强度,提高工作效率对于复杂的多元分段函数求值问题,使用传统的分支程序编程的方法,会造成程序分支嵌套 层数大大增加,使得程序冗长难懂,运算效率降低本文提出了利用数组编程实现多元分段函数求值的方法,大大降低程序的 复杂度.同时提高程序的运行效率和程序的可读性 【关键词】:多元分段函数、数组、程序、算法复杂度 v= 在这个函数中自变量有两个,即X和Y.其中X的定义域有 三段(即x0),Y的定义域也有三段(即y0), 函数z的定义域由自变量X和Y的定义域的不同组合来确定. 共有3×3=9段从上面的例子可以看出.多元分段中分段的的定 义域为每一个自变量定义域的笛卡尔乘积.当自变量的个数增 加时.其定义域的分段将成积数倍增长 2、多元分段函数求解的一般实现 由于多元分段函数存在多个分段函数取值不同的情况.在 实际应用中给计算者带来了不少的麻烦随着计算机的普及.利 用程序来求解现实生活中的一些复杂计算问题越来越受到人们 的青睐 在编程求多元分段函数的值时.传统的是采用多重分支 程序设计的方法。
这种做法符合人们的日常思维习惯.然而,当 多元分段函数的自变量个数增加时.编写程序时的分支的层数 会成积数倍增长.大大增加了程序的复杂度.造成程序冗长编写 困难.程序的可读性和可维护性也大大降低 我们以一个实际应用的例子来看 如某演唱会售票规定:1. 售票分为两种:普通票100元/张.贵宾票500元/张:2.针对不同 的人群票价有一定的折扣.如:儿童票打5折.学生票打7折,70 岁以上老人票打8.5折.其它人购票无折扣:3.如果购票张数在 l0张以下属于散购.没有折扣.一次性购票张数在10张以上属 于团购,可打9折,;4.如果提前5天以上购票可打9.8折如果 提前15天以上购票可打9.5折 现在编一程序来计算某人的购 票应付金额 为了方便编写程序.我们对各种票价及打折方式作一个约 定(暂不考虑一个用户同时购买不同种票的情况): P表示票的面值,p的取值为100或500; r代表购票人群,r的取值为0代表普通人群(无折扣),为1 代表儿童(打5折).为1代表学生(打7折),为2代表老年人 (打8.5折); n代表购票张数,0O&&n0&&t=5&&t=15) y=p n 1 1 0.95; l else if(n>=lO) {if(t>O&&t=5&&t=15) y=p n 1 0.9 0.95; ) l else if(r-~--1) { ...//嵌套层数与r=O的情况相同 } else if(r==2) { .../,嵌套层数与r:O的情况相同 l else if(r==3) { ...,/嵌套层数与1=0的情况相同 l prin ”~atotal=%ffn",y); 1 运行结果: 输入序列1:100 2 20 10 (表示提前1O天购卖20张普通学生票) 输出结果:total=1234.8o0oo0 输入序列2:500 3 3 20 (表示提前20天购卖3张老年贵宾票) 输出结果:t0tal=1211.250000 3、多元分段函数的数组实现 从上面的例子来看.传统的利用if语句来实现多元分段函 数的求值,由于分段较多,造成if的嵌套层数增多,程序冗长而 且可读性降低。
如果再增加一个条件,如军人票打7.5折,程序 中的if语句的嵌套将要再增多24次.这使得程序的复杂度大大 增加.这显然不是适合多元分段函数求解的好算法为了尽量减 少程序的嵌套层数.我们可以考虑采用数组存储分段点的方式 来实现 仔细分析发现:对于演唱会售票,售票的金额与售票的面 值、售票的数量、售票的人群、和售票的时问有关,我们可以将其 归结为: 售票的金额:面值×数量×不同人群的折扣×售票数量的折 rr[0] rr[1] rr[2] rr[3] rr[4] rr[5] rF[6] rr[7] 0 1 】 O.5 2 0.7 3 0.85 设一维数组nn的用来存放购票张数的边界值及其对应的 购票折扣.则nn中存放的数据如下: nn[0] nn[1] nn[2] riD_[3] 设一维数组tt的用来存放提前购票时间的边界值及对应的 购票折扣.则tt中存放的数据如下: tt[0] tt[1] tt[2] tt[3] tt[4] tt[5] 创建一个find函数用来实现根据某自变量的值求出与其对 应的折扣值在函数的形参中,变量x为要求折扣的自变量,数 组a为与自变量x对应的存放有边界值和折扣的数组.变量n 代表自变量的分段数目,函数的返回值为对应的折扣。
double find(int x,double aB,int n) f int i; i=2 fn一11;,,从最后一个边界开始进行判断 while(x
并能根据项目编号及收支 内容进行统计、汇总、打印报表 3.2.4用户管理 包括添加、删除、编辑评审专家:项目申请教师增加、修改、 查询:项目申请教师号及密码查询与打印 3.2.5评审管理 为每个专家设定应评项目.评审专家只能对设定的项目进 行评审:查看和打印各位评审专家评审结果 3.2.6其他功能 主要包括首页公告栏的信息管理、管理员修改密码等一些 辅助功能 4.系统的实现 4.1系统结构设计 基于WEB的教学研究项目管理系统开发成采用B,s (Browser/Ser、rer)模式的三层应用结构型的管理信息系统,即用 户界面层、中问层、数据库层三层本系统利用微软平台的ASP 作为开发工具开发用户界面层,不同的用户通过在客户端运行 IE等Web浏览器来提交请求:利用校园网内已有的专用的 Windows Se,wer作为Web应用服务器处理业务逻辑:数据库也 是采用校园网内的SQL Server2000数据库来存储数据客户端 采用PC平台的浏览器 4.2系统实现 (上接第84页) 一+一+-+-+一+“+ 系统实现后运行的主界面如图2: 5.结束语 基于WEB的教学研究项目管理系统采用B/S模式、充分利 用校园网络的便捷.发挥ASP的优点,使用Windows风格,具有 友好的人机界面.系统还采用了安全性较强的SQL Se1-ver做为 后台数据库。
它在使用的过程中具有很强的灵活性和实用性,系 统功能简洁,容易使用,易于扩展,而且对运行环境要求低实践 证明基于WEB的教学研究项目管理系统作为我校管理科研项 目的一个重要工具.加快了我校科研项目管理的规范化,大大提 高相关人员的工作效率 《睡 !童 母 3 j i I. I 3lI333 : i i 一 蠹 l 2li 3|3嚣 lzl |麓一 j 警0 一-…点| 矗t §毒 蕊 n | * # 谣 d I·| i6 毫一 -·-- -曩 |誊蕾 -k,i鹂-通 每t备t -l |曩 餐 蓄 l警 | 《| 蚋 量 _ |~ — jj ~ j羔 图2教学研究项目管理系统的运行图 参考文献: [1]曾利军.ASP程序开发的安全技术研究田.福建电脑,2005,(1O) f21黎文导,刘宇东,列光华,列科举.基于B/S模式的公证业务管理信息 系统的设计与实现Ⅱ】计算机与现代化,2007,(06). 【3]郭利华.基于ASP技术的成绩查询叫.黑龙江科技信息,2009,(13). 【41g泉.基于ASP的应用:对EXCEL数据进行分析Ⅱ】_电脑知识与技 术,2008,(11). int p,r,n,t;lip为票面金额,r为售票人群,n为售票数量,t 为提前售票天数 double zkr,zkn,zkt,Y; Ily为总的售票金额 scaFi~”%d%d%d%d”,&p,&r,&n,&t); zkr=find(r,rr,4); ,,zkr为不同人群的折扣 zkn=find(n,Fin,2);//zkn为售票数量的折扣 zkt=find(t,tt,3); //zkt为提前售票的折扣 y=p n zkr zkn zkt; prinff(”total=%tkn",y); 1 运行结果: 输入序列1:100 2 20 10 (表示提前l0天购卖20张普通学生票) 输出结果:total=1234.800000 输入序列2:500 3 3 20 (表示提前2O天购卖3张老年贵宾票) 输出结果:total=1211.25oooo 4、结束语 对多元分段函数求值的方法有多种,比较上面的两种方法, 使用传统的分支编程实现对多元分段函数的求解时,随着自变 量的增加,程序分支嵌的层数急剧增多,程序的语句行数也大大 增加.对程序的运行和修改都非常不利.稍不小心就会出错。
相 反.使用数组来处理多元分段函数的求值问题,只需要找到分段 函数中每一个自变量的分段点与其值的计算之间的对应关系. 就可以针对每个自变量把其分段点与对应的数据按一定的顺序 存人一个一维数组.通过一个简单的查找算法就能找出某自变 量对应的值.从而将计算简单化,使程序变得简洁明了大大降 低了程序的复杂程度,既增加了程序的可读性,又提高了程序的 运行效率 参考文献: fl】顾秀国尹怀国,浅析分段函数的性质叫,高中教学教与学.2010,2, 13—15 [2]韩来燕.浅议分段函数型应用问题U】,中国校外教育(理论),2007,2, 152 [3】谭浩强编著,C程序设计【M】.1997年1月第1版,清华大学出版社. 【4】张世禄陈毅清著信息学竞赛程序设计方法[M】,2007年9月,电子 工业出版社 [5】王建德昊永辉编著.程序设计中常用的解题策略【M】2009年10月, 人民邮电出版社 【6】王晓东编著.计算机算法设计与分析 .2007年5月第1版,电子工 业出版社 。