Другие языки программирования и технологии

Помогите с решением задачи (в Лазарусе) Паскаль

Дан одномерный числовой массив. Заменить каждый элемент массива средним арифметическим предыдущих нечетных элементов, включая заменяемый элемент, если он нечетный.
Немного некорректное задание, так как среднее арифметическое - это в общем случае число с плавающей запятой, а нечётные числа могут быть только целыми. Но и те, и другие должны храниться в одном и том же массиве.

unit N196390634;
{$mode objfpc}{$H+}
interface

uses
  Classes, SysUtils, Forms, Controls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1, Button2, Button3: TButton;
    Label1, Label2: TLabel;
    ListBox1, ListBox2: TListBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    a: array of double;
  end;

var
  Form1: TForm1;

implementation
{$R *.lfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize;
  Button3Click(Button3)
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: byte;
begin
  setlength(a, random(11) + 10);
  for i := Low(a) to High(a) do
  begin
    a[i] := random(50) + 1;
    ListBox1.Items.Add('A['+IntToStr(i + 1)+'] = '+IntToStr(trunc(a[i])))
  end
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  k, i: byte;
  Sum: double;
begin
  k := 0;
  Sum := 0;
  for i := Low(a) to High(a) do
  begin
    if odd(trunc(a[i])) then
    begin
      inc(k);
      Sum := Sum + a[i]
    end;
    a[i] := Sum / (k + ord(k = 0))
  end;
  for i := Low(a) to High(a) do
    ListBox2.Items.Add('A['+IntToStr(i + 1)+'] = '+FloatToStr(a[i]))
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  ListBox1.Clear;
  ListBox2.Clear
end;

end.

Алексей !!!!!!!!!!!!!!!!
Алексей !!!!!!!!!!!!!!!!
51 590
Лучший ответ
Где вопрос?