![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Собственно есть все: формирование рандомных чисел и запись их в StringGrid, а вот мне нужно вычислить сумму первой половины массива, и второй, а затем сравнить какая половина больше
Что имеется сейчас Код:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
Label1: TLabel;
StringGrid1: TStringGrid;
Edit1: TEdit;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit2: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
N:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
{Формирование таблицы случайных чисел}
var i:integer;
begin
Label3.Caption:='...';
StringGrid1.RowCount:=N;
for i := 0 to N-1 do
StringGrid1.Cells[1,i]:=IntToStr(Random(100));
end;
procedure TForm1.Button2Click(Sender: TObject);
Вот с нею надо и разобраться
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;
procedure TForm1.FormCreate(Sender: TObject);
{Создание формы и изменение данных в Edit1}
var i:integer;
begin
try
if Edit1.Text='' then exit;
Label3.Caption:='...';
randomize;
N:=StrToInt(Edit1.Text);
StringGrid1.RowCount:=N;
for i := 0 to N-1 do
StringGrid1.Cells[0,i]:=IntToStr(i);
except
showmessage('Некорректные данные!');
end;
end;
end.Кол-во элементов - четное число (у меня 100) Хочу получить код процедуры по моей задаче, я был набросал пробно, но что - то не выходит у меня сумма первой половины (до 50 элементов слаживая) Код:
procedure TForm1.Button2Click(Sender: TObject);
const
MaxNumberOfElements = 100;
var i,s1,s2: Integer;
a: array[1.. MaxNumberOfElements] of Integer;
begin
s1:=0;
for i:=1 to 50 do begin
s2:=s1+a[i];
Edit2.Text:=IntToStr(s2);Выдает мне число около 5 миллионов, почему? Загадка. Помогите пожалуйста с полным кодом процедуры кодом. |
|
#2
|
|||
|
|||
|
Да твой код вообще должен мусор возращать.
Полумай сам над тем какие переменные используются при суммировании. Это раз. Два. Вообще, что бы 2 раза не вставать, я бы писал через дин-массив и тип для возвращаемого значения. Код:
type
THalfSumResult = record
LeftHalf : Integer;
RightHalf : Integer;
End;
function GetHalfSum(A : Array Of Integer) : THalfSumResult;
var
I : Integer;
MidIdx : Integer;
begin
Result.LeftHalf := 0;
Result.RightHalp := 0;
MidIdx := (Length(A) div 2) + Low(A);
For I := Low(A) To High(A) Do
If I < MidIdx
Then Result.LeftHalf := Result.LeftHalf + A[i]
Else Result.RightHalf := Result.RightHalf + A[i];
end; |