有几个程序。。我没看懂,能请看懂了的朋友帮我解释一下吗?
呵呵。。一直认为自己不适合学程序。。但是因为一些原因没办法。。必须得学。。
几个程序。。我没看懂,能请看懂了的朋友帮我解释一下吗?(当然是越详细越好,嘻嘻~~)
谢谢了~~
第一个:
这个程序是求一个英文句子中所含的单词数(单词间用1个或数个空格分格)。
set talk off
clear
num=0
word=0
accept "请输入一个英文句子:" to s
for i=1 to len(s)
w=subs(s,i,1)
if w=space(1) &&这里的意思是不是说,如果是空字符串,就表示没有任何英文单词呢?
word=0
else
if word=0 &&关键就是不知道这里为什么条件是word=0。。?是不是还有别的填法呢?
word=1 &&word=1又是代表什么呢?。。。
num=num+1
endif
endif
endfor
?num
return
这个题目的问题在句子后面的&&。。
第二个:
以下程序的功能是,输入一个数n,随机产生n个0-99之间的整数,并从小到大排序。现从键盘上输入一个整数,要求把它插入到该数据中,插入后仍按原规律排序且不换行输出。
set talk off
clear
input "n=" to n
dime A(n+1) &&这里为什么是定义成A(n+1)呢?
for i=1 to n
a(i)=int(rand()*100) &&好像对于随机函数我还不是很了解,这个是代表什么意思呢?
endfor
for k=1 to n-1
for j=n to k+1 step -1
if a(j)<a(j-1)
x=a(j)
a(j)=a(j-1)
a(j-1)=x &&这里好像看懂了,就是说如果前一个数大于后面的数,就互换,只是 不懂k和j都分别代表什么呢。。?
endif
endfor
endfor
input "请输入一个数:" to b
for i=1 to n &&从这里好像就看不懂了。。
if b<a(i)
for j=n to i step -1
a(j+1)=a(j)
endfor
a(i)=b
exit for
endif
if b>a(n)
a(n+1)=b
endif
endfor
for i=1 to n+1
??a(i)
endfor
return
呵呵,辛苦大家了~~第二个程序,偶干脆看不懂了。。谢谢大家~麻烦帮我解释一下好吗?~
问题点数:60、回复次数:14Top
1 楼apple_8180(十豆三)回复于 2006-03-14 10:48:38 得分 0
这种作业题,多看看书就明白了。
对不起,这里禁止发作业帖!Top
2 楼apple_8180(十豆三)回复于 2006-03-14 10:51:39 得分 0
对不起,忘记了,你的老师,一会看看。Top
3 楼apple_8180(十豆三)回复于 2006-03-14 11:15:09 得分 20
set talk off
clear
num=0
word=0
accept "请输入一个英文句子:" to s
for i=1 to len(s)
w=subs(s,i,1)
if w=space(1) &&空字表示一个单词的结束
word=0
else
if word=0 &&如果为0计一个单词
word=1 &&设为1表示这个空格是上一个单词的后面空格
num=num+1
endif
endif
endfor
?num
return
不过上面代码有点麻烦,改为:
set talk off
clear
num=0
word=0
accept "请输入一个英文句子:" to s
s=alltrim(s)
NUM=OCCURS(SPACE(1),S)+1
?num
returnTop
4 楼apple_8180(十豆三)回复于 2006-03-14 11:19:09 得分 0
今天看球,回复慢一点!Top
5 楼TERRYYRRET(命运)回复于 2006-03-14 12:02:30 得分 0
十豆三兄终于现身了,身手很快了,呵呵Top
6 楼apple_8180(十豆三)回复于 2006-03-14 12:06:37 得分 10
SET TALK OFF
CLEAR
INPUT "n=" TO N
DIME A(N+1) &&防止输入了0,定义数组失败
for i=1 TO N
a(i)=INT(RAND()*100) &&随机函数,参考帮助中的RAND()函数
endfor
FOR k=1 TO N-1
FOR j=N TO k+1 STEP -1
IF a(j)<a(j-1)
x=a(j)
a(j)=a(j-1)
a(j-1)=x &&J和K均为变量
ENDIF
ENDFOR
ENDFOR
INPUT "请输入一个数:" TO b
FOR i=1 TO N &&比较输入的数与随机抽出的数的大小,然后重新排序。
IF b<a(i)
FOR j=N TO i STEP -1
a(j+1)=a(j)
ENDFOR
a(i)=b
EXIT FOR
ENDIF
IF b>a(N)
a(N+1)=b
ENDIF
ENDFOR
FOR i=1 TO N+1
??a(i)
ENDFOR
RETURNTop
7 楼TERRYYRRET(命运)回复于 2006-03-14 15:19:59 得分 0
豆三兄的回答问题1中的改进似乎有些欠妥吧?
如果句子前面有空格怎么办?
如果单词间有多个空格怎么办?
你的程序只是理想化的方法,看球看的太入迷了吧,理解理解。
Top
8 楼TERRYYRRET(命运)回复于 2006-03-14 15:24:23 得分 10
这两个题其实是很基础的算法程序。经常出现在教科书的例题上,
建议楼主自己反复看一下,自然会理解其中道理,当然你不能连基本语法都不会啊。
向十豆三兄的无私奉献精神致敬!Top
9 楼apple_8180(十豆三)回复于 2006-03-14 15:33:08 得分 0
如果单词间有多个空格怎么办?
这个我考虑了,如果输入多了一个空格,那属于手误。
前面如果有空格,用ALLTRIM()去掉了。Top
10 楼guywei(测试)回复于 2006-03-14 21:09:32 得分 10
用GETWORDCOUNT不是来得更直接些Top
11 楼TERRYYRRET(命运)回复于 2006-03-14 21:33:50 得分 0
那如果有手误的话,你的程序不就错了.
算法不健壮,我的个人意见啊.
其实十豆三兄这种举一反三的做法是很值得我去学习的.
Top
12 楼mick729(浩子)回复于 2006-03-14 22:23:34 得分 0
今天一天的课~我来了。。
嗯。。偶是一个很惭愧的老师啦。。一讲到程序。。我就会头脑打结,尤其是循环。。顺序结构和分支结构还好。。一循环。。我就不知道它是个什么运行法了。。
5555~~~真对不起,都有损老师在大家心目中的美好形象。
我在职高教高一、高二、高三的计算机专业,包括FLASH,计算机基础、WINDOWS2000和VFP,我们学校计算机专业老师太少了。。。
谢谢大家帮助我~不是我不懂基本的语法哦。。是真的我就看不懂循环。。尤其是那种有数组的循环。。怎么办啊?。。谁能好心教教我这个学习的方法也好。。
Top
13 楼apple_8180(十豆三)回复于 2006-03-15 09:24:54 得分 0
还是 guywei(测试) 的最简单
?GETWORDCOUNT('ADFSD SDFSADFD FDFDF')
即使中间多了几处空格,结果也是3Top
14 楼dfwxj(清风)回复于 2006-03-23 00:39:12 得分 10
在看了第一题时,我就想到了apple_8180(十豆三)方案,不过我还考虑了容错,修改一句:
s=alltrim(s)
改为:
s=alltrim(strt(s,' ',' '))
****************************
另外:
DIME A(N+1) &&防止输入了0,定义数组失败
万一他高兴输入了-10呢?呵~~~~ABS吧
******************
至于“?GETWORDCOUNT('ADFSD SDFSADFD FDFDF')”,确实很好,但不通用Top




