博文
QBASIC 替换递归的快速排序(2005-08-18 18:28:00)
摘要:m% = 16000
DIM SHARED s(m%)
RANDOMIZE TIMER
FOR i% = 1 TO m%
s(i%) = RND
NEXT
QSort3 1, m%
调用排序
---------------------------------------------------
第一种: 标准的递归形式
SUB QuickSort (l%, h%)
IF l% < h% THEN
IF h% - l% = 1 THEN
IF s(l%) > s(h%) THEN SWAP s(l%), s(h%)
ELSE
r% = INT(RND * (h% - l% + 1)) + l%
SWAP s(h%), s(r%)
p = s(h%)
i% = l%
j% = h%
DO
DO WHILE (i% < j%) AND (s(i%) <= p)
i% = i% + 1
LOOP
DO WHILE (j% > i%) AND (s(j%) >= p)
......
密码的单向函数(2005-08-17 15:06:00)
摘要:我对密码没有什么研究,只是听说有单向检测的密码函数,我就从字面上的解释去试试凭空想一个出来了.
1. 用键盘输入一串密码
2. 利用它的ASC码做运算
3. 利用ASC码乘上一个质数来计算一个值作为保存
初步的试算是:比如密码 "ABC"
储存一个密码值= A*2 + B*5 + C*7 +......
检查密码的时候依此计算与密码值比较是否相符.
但具体如何降低巧合的机率,还需要进一步的优化
input "请输入密码:",a$
m&=1
n$=" 2 3 5 7 13 17 19 23 29 31 37 39 41 ......"
for i%=1 to len(a$)
m&=m&+asc(mid$(a$,i%,1)*val(mid$(n$,i*3,3))
next
密码值=m&......
关于文本方式下屏幕内容的保存(2005-08-05 13:38:00)
摘要:我很少搞图形的,图形屏幕也就用那两句get,put来保存了,
我只是说说文本方式的保存。
因为以前为自己做程序的时候老是不知道该怎么办,
因为全屏幕需要处理的数据比较少,就先说说全屏幕处理了.
A 我第一次做的程序是用screen语句的
保存
dim s(25,80,1)
for i=1 to 25
for j=1 to 80
s(i,j,0)=screen(i,j,0)
s(i,j,1)=screen(i,j,1)
next j,i
恢复
locate 1,1
for i=1 to 25
for j=1 to 80
color s(i,j,1) mod 16, s(i,j,1)\16
print chr$(s(i,j,0);
next j,i
B 后面,我知道了&HB800,我就利用BSAVE,BLOAD了
sub scrf(f$)
def seg =&HB800
......
关于日期(公历)和星期几的问题(2005-08-03 11:47:00)
摘要:print "今天是星期";mid$("日一二三四五六",(Date2Number&(date$) mod 7)*2+1,2)
DEFLNG A-Z
FUNCTION Date2Number& (d$)
y = VAL(MID$(d$, 7, 4))
m = VAL(d$)
d = VAL(MID$(d$, 4, 2))
r = ((y MOD 4 = 0 AND y MOD 100 <> 0) OR (y MOD 400 = 0))
y = y - 1
Date2Number& = (y * 365 + y \ 4 - y \ 100 + y \ 400 + VAL(MID$(" 0 31 59 90120151181212243273304334", m * 3, 3)) + r * (m > 1) + d)
END FUNCTION
deflng a-z
FUNCTION Number2Date$ (day&)
d$ = "00-00-0000"
y = day& / 365.254
DO
n = day& - (y * 365 + y \ 4 - y \ 100 + y \ 400)
IF n < 0 THEN y = y - 1
LOOP WHILE n < 0
y = y + 1
r = ((y MOD 4 = 0 AND y MOD 100 <> 0) OR (y MOD 400 = 0))
FOR m = 12 TO 1 STEP -1
k = VAL(MID$(" 0 31 59 90120151181212243273304334", m * 3, 3)) + r * (m > 1)
......
关于质数(素数)(2005-08-03 11:39:00)
摘要:do
input Q&
if Q&=IsZhiShu&(Q&) then print Q&;"是质数"
loop while Q&
FUNCTION IsZhiShu& (a&)
f% = FREEFILE
OPEN "质数表" FOR RANDOM AS #f% LEN = LEN(a&)
IF LOF(f%) = 0 THEN
z& = 2
PUT #f%, 1, z&
z& = 3
PUT #f%, 2, z&
END IF
e& = LOF(f%) \ LEN(a&)
GET #f%, e&, z&
SELECT CASE a&
CASE IS <= 2
IsZhiShu& = 2
CASE IS >= z&
DO UNTIL z& >= a&
DO
z& = z& + 2
q& = SQR(z&)
i& = 2
DO
GET #f%, i&, k&......