问答题【说明】装饰者模式动态地给一个对象添加一些额外的职责,就扩展功能而言,该模式比生成子类方式更加灵活。装饰模式的提出有助于解决滥用继承的问题。例如,一个名叫星巴兹(Starbuzz)的咖啡连锁店提供多种多样的咖啡,最朴素的设计就是采用继承,即设计一个饮料抽象基类Beverage,让不同种类的咖啡HouseBlend、Decaf、Espresso、DarkRoast继承Beverage类,如图13-23所示。Beverage类的cost()方法是抽象方法,每个子类的cost()方法实现即返回具体咖啡种类的价钱,Beverage类的description实例变量由每个子类设置,用来描述该类饮料,Beverage类的getDescription()方法用来返回此描述。客户在点咖啡时还可以要求添加各种各样的调料(Condiment),加入的调料不同所收取的费用也是不同的,让各种加了调料的不同咖啡都继承基类Beverage,当咖啡种类和调料种类很多时,组合种类的数量就会急剧增长,就会发生“类数量爆炸”现象,如图13-24所示。显然,采用这种设计方式会使得代码的维护变得十分困难,可以采用装饰者模式来解决这个问题。软件设计师蝴蝶飞根据装饰者模式的思想设计了如图13-25所示的类图。在图13-25中,将各种调料Milk、Mocha、Soy、Whip作为装饰者来装饰House-Blend、Decal、Espresso、DarkRoast等各种咖啡。下面的Java程序(代码13-6)对应其具体实现。【代码13-6】importjava.io.*;abstractclassBeverageStringdescription="UnknownBeverage";publicStringgetDescription()returndescription;public(1)doublecost();abstractclassCondimentDecorator(2)BeveragepublicabstractStrmggetDescription();classDecafextendsBeveragepublicDecaf()description="DecafCoffee";publicdoublecost()return1.05;classEspressoextendsBeveragepublicEspresso()description="Espresso";publicdoublecost()return1.99;classHouseBlendextendsBeveragepublicHouseBlend()description="HouseBlendCoffee";publicdoublecost()return.89;classDarkRoastextendsBeveragepublicDarkRoast()description="DarkRoastCoffee";publicdoublecost()return.99;classMochaextendsCondtmentDecoratorBeverage(3);publicMocha(Beveragebeverage)this.beverage=beverage;publicStringgetDescription()returnbeverage.getDescription()+",Mocha";publicdoublecost()return.20+beverage.cost();ClassSoyextendsCondimentDecoratorBeveragebeverage;publicSoy(Beveragebeverage)this.beverage=beverage;publicStrillggetDescription()returnbeverage.getDescription()+",Soy";publicdoublecost()return.15+beverage.cost();classWhipextendsCondimentDecoratorBeveragebeverageipublicWhip(Beveragebeverage)this.beverage=beverage;publicStringgetDescrlption()returnbeverage.getDescription()+",Whip";publicdoublecost()return.10+beverage.cost();classMilkextendsCondlmentDecoratorBeverligebeverage;publicMilk(Beveragebeverage)this.beverage=beverage;publicStringgetDescription()returnbeverage.getDescription()+",Milk";publicdoublecost()return.10+beverage.cost();publicclassStarbuzzCoffeepublicstaticvoidmain(Sttingargs[])//订一杯Espresso咖啡,不需要任何调料,打印出它的描述和价钱Beveragebeverage=newEspresso();System.out.println(beverage.getDescription()+"$"+beverage.cost());//订一杯加了两份Macha调料、一份Whip调料的DarkRoast咖啡//并打印出它的描述和价钱Beveragebeverage2=newDarkRoast();beverage2=newMocha(beverage2):beverage2=new(4)(beverage2);beverage2=newWhip(beverage2);System.out.println(beverage2.getDescription()+"$"+beverage2.cost());//订一杯加了一份Soy调料、一份Mocha调料、一份Whip调料//的HouseBlend咖啡,并打印出它的描述和价钱Beveragebeverage3=newHouseBlend();beverage3=newSoy(beverage3);beverage3=newMocha(beverage3);beverage3=newWhip(beverage3);System.out.println(beverage3.getDescription()+"$"+beverage3.cost());【问题1】根据题目叙述,请将上述Java程序代码13-6中的(1)~(4)空填充完整。【问题2】请写出上述程序的输出结果。
问答题 阅读以下说明和流程图,回答问题1至问题3。
【说明】
某城市电信局受理了许多用户申请在指定电话上开设长话业务。长话包括国内长途和国际长途。电信局保存了长话用户档案和长话业务档案。
长话用户档案的记录格式为
用户编码
用户名
用户地址 长话业务档案的记录格式为
电话号码
用户编码
国内长途许可标志
国际长途许可标志 电话用户每次通话的计费数据都自动地记录在电信局程控交换机的磁带上。计费数据的记录格式为
日期
电话号码
受话号码
通话开始时间
通话持续时间 该电信局为了用计算机自动处理长话收费以提高工作效率,开发了长话计费管理系统。该系统每月能为每个长话用户打印出长话缴费通知单。长话缴费通知单的记录格式为
用户名
用户地址
国内长途话费
国际长途话费
话费总额 流程图描述了该系统的数据处理过程。 该系统每天对原始的计费数据进行分类排序,并确定每个通话记录的通话类型(市话/国内长途/国际长途),再根据话费单价文件算出每个通话记录应收取的话费。因此,形成的日计费文件中,增加了两个数据项:通话类型和话费。该系统每日对日计费文件进行累计
(按电话号码和通话类型,对该类型的话费进行累计,得到该电话号码该通话类型的当月话费总计),形成月计费文件。 月计费文件经过长话出账处理形成长话账单文件。长话账单文件的记录格式为
月份
用户编码
电话号码
国内长途话费
国际长途话费
话费总额 长话账单文件经过处理5和处理6的处理后,就可以形成长话缴费通知单。
问答题【说明】 关于一位花商有以下一些事实。 (1)销售在不同地区生长的花,这些地区一年的量低温度在一定范围内变化。 (2)想用编号来表示发货类型。 (3)要出售某些类型的花。 假定已经通过SQL语句建立了基本表: CREATE TABLE Zone ( ID Char(2) PRIMARY KEY, LowerTemp Number (3), UpperTemp Number (3) ); CREATE TABLE Delivery ( ID char(2)PRIMARY KEY, Category VarChar (5), DelSize Number (5,3) ): CREATE TABLE FlowerInfo ( ID Char(3) CONSTRAINT Flowerinfo_ id _ pk PRIMARY KEY, ComName VarChar (25), LatName VarChar (30), Czone Number (3), Hzone Number (3), Delivered Number (3), SunNeed Char (3), PRIMARY KEY (ID) ): 地区(ID,最高温度,最低温度) 发货(ID,发货类型,发货规格) 花的信息(ID,普通名,拉丁名,花能够生长的最冷地区,花能够生长的最热地区,发货类型,日光需求)
问答题阅读下列说明、图1和图2,回答问题1、问题2和问题3。【说明】下面是某租车信息管理系统的介绍:该车库中备有若干车辆,每辆车有车号、车牌、车名、价格等属性。车库不定期地购买并注册新车供用户借用,也可将报废的旧车注销以停止租用。车库可为众多用户提供服务。每个用户在借车之前需注册姓名、地址等内容。每个用户最多可同时借3辆车。每辆车借期7天;若有一辆车超期,则不可再借其他车。一辆车超期一天罚款250元。若一辆车超期3周不归还,则发布通告。若用户借的车丢失,在罚款处理之前不能借车,每辆报失的车罚款该车目前市价(包括折旧)的1.2倍。注册新用户不受限制;而注销用户之前,该用户必须归还所有借的车,或者报失并接受罚款。【状态图1】
问答题[说明] 某软件开发公司,决定结合自身工作的需求开发设计本公司的项目工作管理系统,由郭工程师承担数据库的设计工作。公司项目管理的需求分析如下。 1.组织机构。该公司有多个部门,每个部门有多个职员、多个办公室,每个办公室有一部电话。当部门变更时更换新的部门代码。职员辞职后,若再次被聘用仍使用辞职前的代码。被聘用职员担任某职务,职务用职务代码来标识。职务分为:工程师、高级工程师、经理助理、经理等。职员的工资根据等级区分,共分为S、A、B、C、D 5个等级。一个职务对应某个等级,一个等级对应多个职务。职员月工资等于职员月工作时间(小时)乘以小时工资。职员的人事变动及职位变更(升级、降级)在月初进行。 2.项目管理。项目用项目代码标识,使用过的项目代码不能重复使用。一个部门可承担多个项目,但一个项目仅由一个部门承担。一个项目有一名项目主管和多个职员;一个职员可参加多个项目。项目代码由系统自动生成,一旦项目建立,项目名、部门代码及起始年月日不能再变更。 3.项目的工作管理流程为:项目工作计划输入(初始计划)→工作业绩输入→业绩生成(每月一次)→计划修正(每月一次)。 ①项目工作计划输入。项目主管使用如图1-9所示的计划输入界面,输入项目代码、职员代码、职员参加某个项目的月工作时间(计划)。图中空白区域为可输入项。 项目代码 123456 项目名 ABCD 部门代码 03 部门名 开发部 起始年月日 2007-06-11 结束年月日 2007-11-31 登陆时间 2007-05-28 职员代码 职员名 6月 7月 8月 9月 10月 11月 12月 1月 2月 3月 4月 5月 合计 0302 小郭 120 180 180 180 180 180 1020 0316 小谢 120 180 180 150 150 150 930 0309 张三 90 150 150 180 180 180 930 0328 李四 120 180 180 120 120 90 870 0321 王五 90 150 150 150 150 90 810 ②工作业绩输入。输入职员每天参加各个项目的工作时间。如图1-10所示为工作业绩输入界面,图中空白区域为可输入项。其中,出勤时间由考勤系统管理,指定项目代码的顺序可以不同,并且一天可以输入多个项目代码,但同一个项目代码不能重复输入。 职工代号 0302 职员名 小郭 输入年月 2007 6月 年月日 星期 出勤时间 每个项目的工作时间 项目代码 工作时间 项目代码 工作时间 备注 2007-06-11 一 12.0 123456 8.0 345678 4.0 2007-06-12 二 15.0 123456 10.0 345678 5.0 2007-06-13 三 18.0 123456 15.0 345678 3.0 2007-06-14 四 15.0 123456 15.0 2007-06-15 五 18.0 123456 18.0 2007-06-16 六 10.0 123456 10.0 2007-06-17 日 0.0 ③业绩生成。月底汇总职员的当月工作业绩,生成月工作业绩表。 ④计划修正。项目主管根据项目进度修改以后的工作计划。 郭工程师根据公司的项目需求将数据库关系模式设计如下: 部门(部门代码,部门名,起始年月,终止年月,办公室,办公电话); 职务(职务代码,职务名); 等级(等级代码,等级名,年月,小时工资); 职员(职员代码,职员名,部门代码,职务代码,任职时间); 项目(项目代码,项目名,部门代码,起始年月日,结束年月日,项目主管); 工作计划(项目代码,职员代码,年月,工作时间)。
问答题【说明】
本程序将两个从小到大的有序链表合成一个新的从小到大的有序链表。链表的每一项由类 Node描述,而链表由List描述,类List的成员函数有以下几个:
creatList(): 创建从小到大的有序链表。
multiplyList(List L1, Llst L2): 将链表L1和链表L2合并。
print(): 打印链表。
【C++代码】
#include <iostream>
using namespace std;
class List;
class Node{
friend class List;
public:
Node(int data){
{{U}} (1) {{/U}};
}
private:
int data;
Node *next;
};
class List{
public:
List(){list=NULL;}
void multiplyList(List L1, List L2);
void creatList();
void print();
private:
Node *list;
};
void List::creatList()
{
Node *p, *u, *pre;
int dara;
list=NULL;
wbile(1){
cout<<"输入链表的一项: (小于零,结束链表) "<<endl;
cin>>data;
if(dara<0)break;//小于零,结束输入
p=list;
while(p !=NULL
p=p->next;
}
u={{U}} (2) {{/U}};
if(p==list)list=u;
else pre->next=u;
{{U}} (3) {{/U}};
}
}
void List::multiplyList(List L1, List L2)
{
Node *pL1, *pL2, *pL, *u;
list = NULL;
pL1 = L1.list;
pL2 = L2.11st;
while(pL1 != NULL
pL1 = pL1->next;
}else{
u = new Node(pL2->data);
pL2 = pL2->next;
}
if(list == NULL){
list ={{U}} (4) {{/U}};
}else{
pL->next=u;
pL=u;
}
}
pL1 = (pL1 != NULL)? pL1:pL2;
while(pL1 != NULL){
u={{U}} (5) {{/U}};
pL1 = pL1->next;
if(list == NULL){
list=pL=u;
}else{
pL->next=u;
pL=u;
}
}
}
void List::print()
{
Node *p;
p = list;
while(p !=NULL){
cout<<p->data<<"/t";
p=p->next;
}
cout<<end1;
}
void main()
{
List L1, L2, L;
cout<<"创建第一个链表/n";L1.creatList();
cout<<"创建第二个链表/n";L2.creatList();
L1.print();L2.print();
L.multiplyList(L1,L2);
L.print();
}
问答题【说明】 所谓货郎担问题,是指给定一个无向图,并已知各边的权,在这样的图中,要找一个闭合回路,使回路经过图中的每一个点,而且回路各边的权之和最小。 应用贪婪法求解该问题。程序先计算由各点构成的所有边的长度(作为边的权值),按长度大小对各边进行排序后,按贪婪准则从排序后的各边中选择边组成回路的边,贪婪准则使得边的选择按各边长度从小到大选择。 函数中使用的预定义符号如下: #define M 100 typedef struct/*x为两端点p1、p2之间的距离,p1、p2所组成边的长度*/ float x; int p1, p2; tdr; typedef struct/*p1、p2为和端点相联系的两个端点,n为端点的度*/ int n, P1, p2; tr; typedef struct/*给出两点坐标*/ float x,y; tpd; typedef int tl[M]; int n=10; 【函数】 float distance(tpd a,tpd b);/*计算端点a、b之间的距离*/ void sortArr(tdr a[M], int m); /*将已经计算好的距离关系表按距离大小从小到大排序形成排序表,m为边的条数*/ int isCircuit(tr[M], int i, int j); /*判断边(i, j)选入端点关系表r[M]后,是否形成回路,若形成回路返回0*/ void selected(tr r[M], int i, int j);/*边(i,j)选入端点关系表r*/ void course(tr r[M], tl 1[M]);/*从端点关系表r中得出回路轨迹表*/ void exchange(tdr a[M], int m, int b); /*调整表排序表,b表示是否可调,即是否有边长度相同的边存在*/ void travling(tpd pd[M], int n, float dist, t1 locus[M]) /*dist记录总路程*/ tdr dr[M];/*距离关系表*/ tr r[M];;/*端点关系表*/ int i, j, k, h, m;/*h表示选入端点关系表中的边数*/ int b;/*标识是否有长度相等的边*/ k=0; /*计算距离关系表中各边的长度*/ for(i=1;i<n;i++) for(j=i+1;j<=n;j++) k++; dr[k].x= (1) ; dr[k].p1=i; dr[k].p2=j; m=k; sortArr(dr,m);/*按距离大小从小到大排序形成排序表*/ do b=1; dist=0; k=h=0; do k++; i=dr[k].p1; j=dr[k].p2; if((r[i].n<=1) h++; dist+=dr[k].x; else if( (4) ) /*最后一边选入r成回路,则该边必须加入且得到解*/ selected(r,i,j); h++; dist+=dr[k].x; while((k!=n) if(h==n)/*最后一边选入构成回路,完成输出结果*/ course(r,locus); else/*找不到解,调整dr,交换表中边长相同的边在表中的顺序,并将b置0*/ (5) ; while(!b);
问答题[说明]快速排序是一种典型的分治算法。采用快速排序对数组A[p..r]排序的3个步骤如下。1.分解:选择一个枢轴(pivot)元素划分数组。将数组A[p..r]划分为两个子数组(可能为空)A[p..q-1]和A[q+1..r],使得A[q]大于等于A[p..q-1]中的每个元素,小于A[q+1..r]中的每个元素。q的值在划分过程中计算。2.递归求解:通过递归的调用快速排序,对子数组A[p..q-1]和A[q+1..r]分别排序。3.合并:快速排序在原地排序,故无需合并操作。1.[问题1]下面是快速排序的伪代码,请将空缺处(1)~(3)的内容填写完整。伪代码中的主要变量说明如下。A:待排序数组p,r:数组元素下标,从p到rq:划分的位置x:枢轴元素i:整型变量,用于描述数组下标。下标小于或等于i的元素的值,小于或等于枢轴元素的值j:循环控制变量,表示数组元素下标
问答题使用说明中的词语,给出下图中的数据存储D1~D5的名称。
问答题问题:3.3 (3分)
在图3-1采用了何种设计模式?以100字以内文字说明采用这种设计模式的原因。
问答题阅读下列说明,回答问题1至问题3。
【说明】 关于一位花商有以下一些事实。
(1)销售在不同地区生长的花,这些地区一年的最低气温在一定范围内变化。
(2)想用编号来表示发货类型。 (3)要出售某些类型的花。
假定已经通过SQL语句建立了基本表: CREATE TABLE Zone(ID CHAR(2) PRIMARY
KEY,
LowerTemp NUMERIC(3),
UpperTemp NUMERIC(3)); CREATE TABLE
Delivery(ID CHAR (2) PRIMARY KEY,
Category CHAR(5),
DelSize
NUMERIC(5,3)); CREATE TABLE FlowerInfo(ID CHAR (3),
ComName
CHAR(25),
LatName CHAR(30),
Czone NUMERIC(3),
Hzone
NUMERIC(3),
Delivered NUMERIC(3),
SunNeed CHAR(3),
PRIMARY
KEY(ID)); 地区(ID,最高温度,最低温度)
发货(ID,发货类型,发货规格)
花的信息(ID,普通名,拉丁名,花能够生长的最冷地区,花能够生长的最热地区,发货类型,日光需求)
问答题试题四(共15分)阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。[说明]用两台处理机A和B处理n个作业。设A和B处理第i个作业的时间分别为ai和bi。由于各个作业的特点和机器性能的关系,对某些作业,在A上处理时间长,而对某些作业在B上处理时间长。一台处理机在某个时刻只能处理一个作业,而且作业处理是不可中断的,每个作业只能被处理一次。现要找出一个最优调度方案,使得n个作业被这两台处理机处理完毕的时间(所有作业被处理的时间之和)最少。
问答题【说明】某汽车数字仪表板将完成下述功能:(1)通过模/数转换,实现传感器和微处理器的接口。(2)在发光二极管面板上显示数据。(3)指示速度(mph)、行驶里程、油耗(mpg)等。(4)指示加速或减速。以下是经分析得到的数据流图,有些地方有待填充,假定顶层数据流图是正确的。图9-14是顶层数据流图,图9-15是第0层数据流图,图9-16是第1层数据流图,其中A是加工1的细化图,B是加工2的细化图。图中,△sps表示转速sps的瞬时变化值,若△sps>0则汽车加速,△sps<0则减速,△sps=0则匀速。假定题中提供的顶层图是正确的,请回答下列问题。
问答题【问题1】
请采用说明中的词汇,给出数据确认处理所需的数据流在第1层图中的全部可选起点(第0层图和第1层图中均未给出)。
问答题【说明】某大学准备开发一个学生课程注册系统,学生可以使用该系统查询新学期将开设的课程和讲课教师情况,选择自己要学习的课程进行登记注册,并可以查询成绩单;教师可以使用该系统查询新学期将开设的课程和选课学生情况,并可以登记成绩单;注册管理员使用该系统进行注册管理,包括维护教师信息、学生信息和课程信息等。在每个学期的开始,学生可以获得该学期的课程目录表,课程目录表列出每门课程的所有信息,诸如基本信息、教师、开课系和选课条件等。新学期开始前两周为选课注册时间,在此期间学生可以选课注册,并且允许改变或取消注册申请,开学两周后注册管理员负责关闭课程注册。每个学生可以选择不超过4门课程,同时指定2门侯选课程以备主选课程未选上。每门课程最多不能超过10人,最少不能低于3人,低于3人选课的课程将被取消。一旦学生的注册过程完毕,注册系统将有关信息提交收费系统以便学生付费。如果在实际注册过程中名额已满,系统将通知学生在提交课程表之前予以更改。在学期结束时,学生可以存取系统查看电子成绩单。由于学生成绩属于敏感信息,系统必须提供必要的安全措施以防非法存取。【用例图】【表】表3-1学生课注册系统的实体类实体类说明Professor学校中讲课的教师Strdent学校中注册课程的学生Schedule学生在新学期选择登记的课程列表CourseCatalog学校所有课程的目录Course课程的基本信息CourseOffering新学期课程的开设信息,如课课教师、时间、地点等信息表3-2学生课程注册系统的边界类边界类说明LoginForm为教师、学生和注册管理提供登录的操作RegisterCoursesForm为学生提供选课注册的操作ViewReportForm为学生提供成绩查询的操作SelectTeachCoursesForm为教师提供查看学生选课情况的操作SubmitGradesForm为教师提供登记成绩的操作MaintainProfessorsForm为注册管理员提供维护教师信息的操作MaintainStudentsForm为注册管理员提供维护学生信息的操作MaintainCoursesForm为注册管理员提供维护课程信息的操作CloseRegistrationForm为注册管理员提供关闭注册的操作BillingSystemNotice提供与收费系统的信息交换接口表3-3学生课程注册系统的控制类控制类说明RegisterCoursesControl负责新学期学生的选课登记ViewReportControl负责学生成绩的查询SelectTeachCoursesControl负责新学期课程的学生选择情况SubmitGradesControl负责学生成绩的登记CloseRegistrationControl负责关闭课程注册【协作图】【时序图】注释1:学生打算注册新的课程。注释2:一张这学期可选择的课程列表。注释3:显示一张为学生选课用的空白登记表。
问答题[问题2]
在UML中,重复度(multiplicity)定义了某个类的一个实例可以与另一个类的多个实例相关联。通常把它写成一个表示取值范围的表达式或者一个具体的值。例如,图4-5中的类InternetClient和CustomerList,InternetClient端的“0...*”表示:1个 CustomerList的实例可以与0个或多个InternetClient的实例相关联;CustomerList端的“1”表示:1个InternetClient的实例只能与1个CustomerList的实例相关。
指出图4-5中(1)~(4)处的重复度分别为多少?
问答题问题:3.3 根据订单处理过程的描述,在图 3-2 中S1~S5处分别填入对应的状态名称。
问答题[问题3] 根据说明中的叙述,抽象出如下表所示的方法,请指出上图中的类Customer- InformationSystem和
功能描述
方法名
向系统中添加客户
addCustomer
根据给定的客户标识,在系统中查找该客户
getCustomer
根据给定的客户标识,从系统中删除该客户
removeCustomer
创建新的联系人
addContact
在系统中查找指定的联系人
getContact
从系统中删除指定的联系人
removeContact
问答题【说明】现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用函数draw_a_line(x1,y1,x2,y2)画一条直线,DF2则用drawline(x1,x2,y1,y2)画一条直线。当实例画矩形时,确定使用DP1还是DP2。为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。这里,“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)与具体实现不同。这种应用称为Bridge(桥接)模式。图9-7显示了各个类间的关系。这样,系统始终只处理3个对象:Shape对象、Drawing对象、DP1或DP2对象。以下是C++语言实现,能够正确编译通过。【C++代码】classDP1public:staticvoiddraw_a_line(doublex1,doubley1,doublex2,doubley2)//省略具体实现);classDP2public:staticvoiddrawline(doublex1,doublex2,doubley1,doubley2)//省略具体实现;classDrawingpublic:(1)voiddrawLine(doublex1,doubley1,doublex2,doubley2)=0;;classV1Drawing:publicDrawingpublic:voiddrawLine(doublex1,doubley1,doublex2,doubley2)DP1::draw_a_line(x1,y1,x2,y2);;classV2Drawing:publicDrawingpublic:voiddrawLine(doublex1,doubley1,doublex2,doubley2) (2);;classShapeprivate:(3)_dp;public:Shape(Drawing*dp);virtualvoiddraw()=0;voiddrawLine(doublex1,doubley1,doublex2,doubley2);;Shape::Shape(Drawing*dp)_dp=dp;voidShape::drawLine(doublex1,doubley1,doublex2,doubley2)//画一条直线 (4);classRectangle:publicShapeprivate:double_x1,_y1,_x2,_y2;public:Rectangle(Drawing*dp,doublex1,doubley1,doublex2,doubley2);voiddraw();;Rectangle::Rectangle(Drawing*dp,doublex1,doubley1,doublex2,doubley2):(5)_x1=x1;_y1=y1;_x2=x2;_y2=y2;voidRectangle::draw()//省略具体实现
问答题[程序4]
START
PRUGBC LD GR0,DATA
LEA GR1,0
LEA GR3,48
LOOP1 CPL GR0,WDT,GR1
JP2 LOOP2
ST GR3,BTASC,GR1
LEA GR1,1,GR1
LEA GR2,-4,GR1
JN2 LOOP1
{{U}} (1) {{/U}}
LOOP2 LEA GR2,48
LOOP3 CPL GR0,WDT,GR1
JMI NEXT
{{U}} (2) {{/U}}
LEA GR2,1,GR2
JMP LOOP3
NEXT {{U}} (3) {{/U}}
LEA GR1,1,GR1
LEA GR2,-4,GR1
JNZ LOOP2
LAST {{U}} (4) {{/U}};处理个位数
{{U}} (5) {{/U}}
EXIT
C48 DC 48
WDT DC 10000
DC 1000
DC 100
DC 10
BTASC DS 5
DATA DC #FA59H
END
