Ввести одномерный массив a={ 2,35 -4,15 0 -3,1 7,8 6,3 -3,05 1,5}.
Найти и вывести среднее геометрическое положительных элементов массива a и индекс элемента, наиболее близкого к среднему геометрическому. Затем упорядочить массив по убыванию.
(В оконном режиме)
Возникла сложность!!!! С этой процедурой! Помогите пожалуйста!!
Найти и вывести среднее геометрическое положительных элементов массива a и индекс элемента, наиболее близкого к среднему геометрическому
Даю исходный код программы!
тот блок который закомментирован, это набросок процедуры нахождения средн. геометр!
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Memo1: TMemo;
Button3: TButton;
Memo2: TMemo;
Edit1: TEdit;
Button1: TButton;
GroupBox2: TGroupBox;
Label1: TLabel;
Button2: TButton;
Edit2: TEdit;
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var v:array of real;
procedure OutPutMas_Memo(v:array of real;Memo:Tmemo);
var i:integer;
begin
Memo.Lines.Clear;
for i:=0 to Length(v)-1 do
Memo.Lines.Add(FloatToStr(v[i]));
end;
procedure WriteIzMemo(var a:array of real; Memo:TMemo);
var k,i,n:integer;
begin
k:=0 ;
for i:=0 to Length(a)-1 do
a[i]:=StrToFloat(Memo.Lines[i]);
end;
procedure TForm1.Button3Click(Sender: TObject);
var n:integer;
begin
n:=memo1.Lines.Count;
setLength(v,n);
writeIzMemo(v,Memo1);
OutPutMas_Memo(v,Memo2);
Button1.Enabled:=True;
end;
{procedure sred_geom (a:array of real; var sred:real; pribl:integer);
var i:integer;
x,k,p:real;
begin
p:=1;
k:=0;
for i:=0 to 7 do
if a[i]>0 then
k:=k+1;
p=p+a[i];
end;
sred:=exp((1/k)+ln(p)); }
procedure sort(var a:array of real);
var k,t,m:integer;
x:real;
begin
for k:= 0 to 6 do
begin
m:=k;
x:=a[k];
for t:=k+1 to 7 do
if a[t]<x then
begin
m:=t;
x:=a[m];
end;
a[m]:=a[k];
a[k]:=x;
end;
end;
procedure vivod_sort(a:array of real);
var i:integer;
begin
Form1.Edit1.Text:='';
for i:=0 to 7 do
Form1.Edit1.Text:=Form1.Edit1.Text+' '+FloatToStr(a[i]);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
sort(v);
vivod_sort(v);
end;
end.
Админ: Пользуемся тегами для оформления кода!