回 帖 发 新 帖 刷新版面

主题:请教在Turbo pascal的一道题

今天在学习中有一道题:
(1)输入一个加法的式子,求它的结果。
         输入样例           输出样例
      5+85=               5+85=90
     1258+65=          1258+65=1323
(2)判断输入的字符除了“+、-、*、/”、数字以及“=”以外,是否还有其它字符(如字母),如果有,则请求重新输入。
(1)这个不难,关键是把字符串中的数提取出来,然后相加就行。
但是(2)无论如何做都出现错误,想法是这样的:
假设将输入的字符变量是zf,flag是布尔类型变量,在提取的字符中判断其ASCII值是不是小于48或大于57,并且不等于61和42。当flag为真时就请求重新输入,当flag为假时就重复。
这一步的编程以下:
 
……(前面省略不写)
repeat
s:=length(sw);
flag:=true;
for j:=1 to s do 
  begin
    ch1:=copy(sw,j,1);
    od:=ord(ch1);   [size=3] {就是这里老是出错,错误提示是:Error 39: Ordinal    [/size]
[size=3]                        expression expected。意思好象是“缺有序表达式”。}[/size]
    if (od<48 or od>57) and (od<>61) and (od<>42) then flag:=false;
  end;
  until flag;
……(省略不写)
 
请大家帮忙分析错误的原因,如何改正?
最好写一个完整的程序学习一下,谢谢。

回复列表 (共2个回复)

沙发

ch1:=copy(sw,j,1);
    od:=ord(ch1);
你用CH1取出的是一个字符窜,当然不能用ORD了,ORD只对字符进行操作~~~

板凳

偶写的
&ccedil;onst
  a1:set of ['+','-','*','/','='];
  a2:set of ['0','1','2','3','4','5','6','7','8','9'];
......
begin
  repeat
  ok:=true;
  readln(s);
  for i:=1 to length(s) do
    if (not(s[i] in a1))or(not(s[i] in a2))
     then ok:=false;
  until ok;
  i:=1;
  while s[i] in a2 do
  i:=i+1;
  val(copy(s,1,i),a,o);
  i:=i+1;
  j:=i+1;
  while s[j] in a2 do
  j:=j+1;
  val (copy(s,i+1,j-(i+1)+1),b,o);
  case s[i] of
  '+':a:=a+b;
  '_':a:=a-b;
  '*':a:=a*b;
  '/':a:=a/b;
  end;
write(s);
writeln(a);
end.

我来回复

您尚未登录,请登录后再回复。点此登录或注册