CTSC2004 2_3 公式编辑器.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CTSC2004 2_3 公式编辑器

公式编辑器 湖南省长沙市长郡中学 胡伟栋 问题简述: 给出键盘的一些操作,要求编一个程序模拟公式编辑器处理这些操作。公式编辑器支持以下操作: 输入字符、插入分式、插入矩阵、插入一行或一列到矩阵中、光标上下左右移动、光标移到编辑框首、光标移到编辑框尾。 分析: 此题是一道很复杂的模拟题。此题难点在于其对象的类型比较多:有字符、矩阵和分式,同时操作比较多:有光标的上下左右移动、Home、End,矩阵的增加行、列等。且输出也比较麻烦。 解决此题主要是保持头脑清醒(这一点对做任何模拟题都非常重要)和选择好的数据结构。这里,整个表达式很像一棵树的样子:如果一个表达式不是整个表达式,则它必有一个直接的包含它的表达式,这就是它的父表达式;每个表达式都可能有0个或多个子表达式且子表达式之间没有直接关系。可以用树结构来处理整个表达式。 此题是一个模拟题,不要用到多少算法,只要按照原题所说的一步一步做即可。具体做法可见参考程序。 program Maths; {$Mode Delphi} // 引用Delphi模式 const inf = maths.in; // 输入文件 ouf = maths.out; // 输出文件 maxChars = 100000; // 输出的非空字符最大数 type eleStyle = (eleChar, eleExp, eleMatrix, eleFraction); // 表达式的类型 placeType = (pl_None, pl_Home, pl_End); // 不移动/移到编缉框开始位置/移到编缉框结束位置 const hs : array[eleChar..eleFraction] of integer = (0, 1, 1, 2); // 不同表达式的初始行数 ws : array[eleChar..eleFraction] of integer = (0, 0, 1, 1); // 不同表达式的初始列数 moveSetPlace : array[-1..1] of placeType = (pl_End, pl_None, pl_Home); // 向左(-1)/右(1)移动到子编辑框的位置 ifEnd : array[-1..1] of integer = (1, 0, 0); // 向左(-1)/右(1)移动是否会到子编辑框的结束位置 canMin : array[eleChar..eleFraction] of integer = (0, 0, 1, 1); // 编辑框的光标能向左移的最小位置 type canvasType = object // 所有非空字符输出队列 l : integer; // 字符数 pos : array[-1..maxChars, 1..2] of integer; // 输出位置 chars : array[0..maxChars] of char; // 输出字符,#0表示分数线 procedure PrintChar(y, x : integer; ch : char); // 在第y行第x列输出一个字符ch procedure sort(_From, _To : integer); // 将字符按行列位置排序 procedure Save(fileName : string); // 输出到文件 end; eleType = class // 表达式的基类 fParent : eleType; // 父达式 fStyle : eleStyle; // 表达式类型 h, w : integer; // h为行数,w为列数 pos : array[1..2] of integer; // 若当前编辑焦点在这个表达式的子表达式中,则指向对应子表达式的位置 Width, Height, UpHeight, DownHeight : integer; // 输出宽度,高度,对齐行上方的高度,对齐行下方的高度 constructor create(parent : eleType; style : eleStyle); // 构造类并初始化 function getS(y, x : integer) : eleType; // 取得y行x列的子表达式 procedure setS(y, x : integer; Value : eleType); // 设置y行x列的子表达式 procedure setFocus(plac

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档