2002年中程下午题。 (100分)

B

bkbk

Unregistered / Unconfirmed
GUEST, unregistred user!
试题一
阅读下列算法说明和算法,将应填入 (n) 处的字句写在答题纸的对应栏内。
[算法说明]
为便于描述屏幕上每个像素的位置,在屏幕上建立平面直角坐标系。屏幕左上角的像素设为原点,水平向右方向设为x轴,垂直向下方向设为y轴。
设某种显示器的像素有128X128,即在每条水平线和每条垂直线上都有128个像素。这样,屏幕上的每个像素可用坐标(x,y)来描述其位置,其中x和y都是整数,0≤x≤127,0≤y≤127。
现用一维数组MAP来存储整个一屏显示的位图信息。数组的每个元素有16位二进位,其中每位对应一个像素,“1”表示该像素“亮”,“0”表示该像素“暗”。数组MAP的各个元素与屏幕上的像素相对应后,其位置可排列如下:
MAP(0),MAP(1),……,MAP(7)
MAP(8),MAP(9),……,MAP(15)
……
MAP(1016),MAP(1017),……,MAP(1023)
下述算法可根据用户要求,将指定坐标(x,y)上的像素置为“亮”或“暗”。
在该算法中,变量X,Y,V,S,K都是16位无符号的二进制整数。数组BIT中的每个
元素BIT(K)(K=0,…,15)的值是左起第K位为1,其余位均为0的16位无符号二进制整
数,即BIT(K)的值为2^l5-k。
[算法]
第1步根据用户指定像素的位置坐标(x,y),算出该像素的位置所属的数组元素MAP(V)。这
一步的具体实现过程如下:
1、将x送变量X,将y送变量Y;
2、将Y左移 (1) 位,仍存入变量Y;
3、将X右移 (2) 位,并存入变量S;
4、计算Y+S,存入变量V,得到像素的位置所属的数组元素MAP(V)。
第2步算出指定像素在MAP(V)中所对应的位置K(K=0,…,15)。这一步的具体实现过程如下:
将变量X与二进制数 (3) 进行逻辑乘运算,并存入变量K。
第3步根据用户要求将数组元素MAP(V)左起第K位设置为”1”或”0”。这一步的具体实现过程
如下: ,
1、为在指定像素置“亮”,应将MAP(V)与BIT(K)进行逻辑 (4) 运算,并存入MAP(V)。
2、为在指定像素置“暗”, 应先将BIT(K)各位取反,再将MAP(V)与BIT(K)进行逻辑 (5) 运算,并存入MAP(V)。


哪个会做。请说出理由。
 
(1) 3
(2) 4
(3) 1111
(4) 或
(5) 与

 
说出理由啊。说答案谁不会啊。[:(]
 
请注意,为什么数据用Map(1)?
而不是Map[1]?
是VB的代码吗?
 
1)y*8 8= 2的3次方 Y左移3位就是y*8
2)x/16 16=2的4次方 x右移4位就是y/16
3) x and 1111 就知道為0的 bit是哪一位
4)元素BIT(K)(K=0,…,15)的值是左起第K位为1,與1 或,那一位就成1 ,1即亮。
5) 元素BIT(K)(K=0,…,15)的值是左起第K位为1,其余位均为0,與0與,那一位成0,0即暗。

 
這個題是考算法,跟語言無關。
注意 一點
128*128=1024*16
就是把這128*128個點放入數組中,左移右移幾位是作2的n (或-n)次方的運算。
1111就是15呀與它作邏輯乘運算的結果大家都知道。其他的沒什麼好說的。
 
dedema:
它不是嚴格的代碼,是偽代碼。
 
第三步不明白,为什么X AND 1111就是它所在的位置?
 
X AND 1111實際上就是對X mod 16 的結果
 
樓主還有什麼問題嗎
 
有人有高程的试题吗?
01年,02年
 
x and 1111 实际就是截取 x 低 4位的数据,相当于 x mod 16
 
顶部