2015-11-28 80 views
-2

我重拍我的代码和它的外观一样,平均数:在Delphi控制台应用程序

{$APPTYPE CONSOLE} 

type vector = array[1..100] of integer; 
var a:vector; 
var i,n:integer; 
var br:integer; 
var sum,average:real; 

begin 
    write('Enter number elements of the array: '); readln(n); 
    for i:=1 to n do 
     begin 
     write('Enter ' ,i, ' element: '); readln(a[i]); 
     end; 
     br:=0; 
     sum:=0; 
      for i:=1 to n do 
      if not(odd(a[i])) and (odd(i)) then 
      sum:=sum+a[i]; 
      br:=br+1; 
      average:=sum/br; 
      writeln('average= ',average:5:3); 
      readln; 
end. 

但是,当我开始我的计划其只发现的总和,并且计数器(BR)心不是工作,只计算总和。你现在可以帮助我,取决于我的代码:)!

+0

没有在你的程序一个'+'。通过将这些值相加并除以计数来计算平均值。你的问题到底是什么? –

+0

我试过这样,但它有一个问题:不兼容的类型:整数和扩展,如何解决它? – LuXuS

+0

通过寻求不会显示的代码的帮助,您正在浪费我们的时间。我再说一遍,代码中没有一个'+'。请显示您想要帮助的代码。我很容易猜到,但那不是重点。我想教给你的教训是如何正确地问。 –

回答

0

有必要把beginend,所以br正确递增:

if not(odd(a[i])) and (odd(i)) then 
Begin 
     sum:=sum+a[i]; 
     br:=br+1; 
End; 
average:=sum/br; 
-1

试试这个:

program Project1; 

{$APPTYPE CONSOLE} 
{$R *.res} 

uses 
    System.SysUtils; 

type 
    TVector = array of integer; 

var 
    a: TVector; 
    i, n: integer; 
    ElSum, Elements: integer; 

begin 
    write('Enter number of elements: '); 
    readln(n); 
    SetLength(a, n); 
    for i := 1 to n do 
    begin 
    write('Enter ', i, ' element: '); 
    readln(a[i - 1]); 
    end; 
    ElSum := 0; 
    Elements := 0; 
    for i := 1 to n do 
    if not(odd(a[i - 1])) and (odd(i)) then 
    begin 
     inc(ElSum, a[i - 1]); 
     inc(Elements); 
    end; 
    if Elements <> 0 then 
    writeln('The average is: ' + floattostr(ElSum/Elements)) 
    else 
    writeln('Can not divide by 0'); 
    readln; 
end. 

附加

在这种情况下,数据将在输入时进行分析。我假设你将来不需要数组的元素。这就是为什么我不存储数组中的值。我也跳过FloatToStr函数。

program Project1; 

{$APPTYPE CONSOLE} 
{$R *.res} 
//We skip uses System.SysUtils; 
var 
    i, n, CurrentInteger, 
    ElSum, Elements: integer; 

begin 
    ElSum := 0; 
    Elements := 0; 
    write('Enter number of elements: '); 
    readln(n); 
    for i := 1 to n do 
    begin 
    write('Enter ', i, ' element: '); 
    readln(CurrentInteger); 
    if not(odd(CurrentInteger)) and (odd(i)) then 
    begin 
     inc(ElSum, CurrentInteger); 
     inc(Elements); 
    end; 
    end; 

    if Elements <> 0 then 
    begin 
     write('The average is: '); 
     writeln(ElSum/Elements:5:3)//we write it instead of FloatToStr 
    end 
    else 
    writeln('Can not divide by 0'); 
    readln; 

end. 
+0

它显示我的错误:未声明的标识符:floattostr – LuXuS

+0

@LuXuS在类似的情况下添加要使用的单位列表。查看函数声明的位置:'System.SysUtils'(Delphi XE5)中声明'FloatToStr' –

+0

[致命错误] Project1.dpr(7):文件未找到:'System.SysUtils.dcu'(Delphi 7第二版)。 – LuXuS

0

使用内置的例行[System.]Math.Mean

program Project1; 

{$APPTYPE CONSOLE} 

uses 
    System.SysUtils, System.Types, System.Math; 

var 
    Count: Integer; 
    I: Integer; 
    Values: TSingleDynArray; 

begin 
    try 
    Write('Enter number of elements of the array: '); 
    ReadLn(Count); 
    SetLength(Values, Count); 
    for I := 0 to Count - 1 do 
    begin 
     Write('Enter element ', I + 1, ': '); 
     ReadLn(Values[I]); 
    end; 
    WriteLn('Average = ', Mean(Values):5:3); 
    except 
    on E: Exception do 
     Writeln(E.ClassName, ': ', E.Message); 
    end; 
    Readln; 
end. 
+0

可能值得添加D7所需的修改--OP似乎正在使用它的hookey版本,根据评论中引用的错误消息来判断。 – MartynA

相关问题