求平均值问题(50分)

  • 主题发起人 主题发起人 junye--li
  • 开始时间 开始时间
J

junye--li

Unregistered / Unconfirmed
GUEST, unregistred user!
在memo1中输入一组数,如:1 2 2 4 5 3 6 ,求和在求平均值;要求:1+2+2,2+2+4,2+4+5,5+3+6,在memo2中返回平均值.

procedure TForm1.Button1Click(Sender: TObject);
var
s,t,w:string;
i,n:integer;
begin
s:=memo1.Text;
for i:=1 to n do
begin
t:=s[i-1]+s+s[i+1];
w:=floattostr(strtofloat(t)/3);
memo2.Text:=w;
end;
end;
   用此程序,运行时出错;应用数组,我也没有调用明白!请各位帮忙!
 
这段代码不出错才怪。
procedure TForm1.Button1Click(Sender: TObject);
var
s,t,w:string;
i,n:integer;
begin
s:=memo1.Text;
for i:=1 to n do//n的值是多少?看样子想取text中字符个数,错
begin
t:=s[i-1]+s+s[i+1];//当i=n时这s[i+1]是哪个字符呢?这样加出来是个122这样的串而不是5,如果想得到5必须把s[]一个一个地转换成整型数再相加
w:=floattostr(strtofloat(t)/3);//这一行不知所云,如果上一行正确了直接引用过来除好了再floattostr就行了
memo2.Text:=w;
end;
end;
 
你是不是想这样?
procedure TForm1.Button1Click(Sender: TObject);
var
s,w:string;
i,n,t:integer;
begin
s:=memo1.Text;
for i:=2 to length(s)-1 do
begin
t:=strtoint(s[i-1])+strtoint(s)+strtoint(s[i+1]);
w:=floattostr(t/3);
memo2.Text:=w;
end;
end;
 
是不是这个?
procedure TForm1.Button1Click(Sender: TObject);
var
S, t: String;
i, Sum, TempSum: Integer;
begin
S := memo1.Text;
Sum := 0;
for i := 1 to Length(S)-2 do
begin
TempSum := StrToInt(S) + StrToInt(S[i+1]) + StrToInt(S[i+2]);
Sum := Sum + TempSum;
end;
t := FloatToStr(Sum/3);
Memo2.Text := t;
end;
 
array[0..x] of integer;
 
谢谢各位!只是输入字符串(数)有空格,以上程序运行时出错.改成2i-1 2i+1 2i+3,还有问题!怎样调试成功?
 
procedure TForm1.Button1Click(Sender: TObject);
var strs:TStrings;
i,t:Integer;
begin
strs:=TStringList.Create;
try
strs.Delimiter:=' ';
strs.DelimitedText:='1 2 2 4 5 3 6';//memo1.text;
for i:=0 to strs.Count-3 do
begin
t:=strtointdef(strs,0)+strtointdef(strs[i+1],0)+strtointdef(strs[i+2],0);
memo1.Lines.Append(floattostr(t/3));
end;
finally
freeandnil(strs);
end;
end;
 
var
s,t:string;
d:real;
i:Integer;
begin
S := memo1.Text;
for i := 1 to length(s)-5 do
begin
d:= StrTofloat(S[2*i-1])+StrTofloat(S[2*i+1])+StrTofloat(S[2*i+3]);
end;
t:=FloatToStr(d/3);
Memo2.Text:= t;
end;

   for i := 1 to length(s)-5 do  这句话 当s是1 2 3 4时,为length(s)-5,循环2次,7-2;s为1 2 3 4 5时,为length(s)-6,循环3次,9-6;s为1 2 3 4 5 6时,为length(s)-7,循环4次,11-7;帮我找下规律,谢谢!
 
for i:=1 to (length(s+' ')div 2)-2 do
//其实你的字符串的规律是一个数字+一个空格,然后循环,最后一个没有没有空格,
1、所以s+' '为补齐循环规律;
2、length(s+' ')求出字符的长度;
3、因为每个规律都是“一个数字+一个空格”,所以(length(s+' ')div 2)是有效的数字字符;
4、因为最后的两个字符不用循环,所以-2
5、结果就是for i:=1 to (length(s+' ')div 2)-2 do这么多次循环了,你就可以用你的
d:= StrTofloat(S[2*i-1])+StrTofloat(S[2*i+1])+StrTofloat(S[2*i+3]);
来求顺序三个数字的和了。

另:也可以for i:=1 to ((length(s)+1)div 2)-2 do
解释你的循环规律:
当s是1 2 3 4时,为length(s)-5,循环2次,7-2;(7+1)div 2 -2=2
s为1 2 3 4 5时,为length(s)-6,循环3次,9-6;(9+1)div 2 -2=3
s为1 2 3 4 5 6时,为length(s)-7,循环4次,11-7;(11+1)`div 2 -2=4
 
谢谢!最后一个小问题:当输入1 2 3 4 5,应输出2 3 4,但结果只有4,把2 3覆盖掉了,帮忙再解决一下.
 
你不能用 Memo2.Text:= t;这样每次都要清空memo的所有内容,应该是
Memo2.lines.append(t);
 
Memo2.lines.append(t)
这个方法运行结果还是4,而不是2 3 4,还有其他的好方法吗?
 
如果你是想将结果放在一行上,那么是:
Memo2.Text:= Memo2.Text + t + ' ';
 
多人接受答案了。
 
后退
顶部