![]() |
|
|
Регистрация | << Правила форума >> | 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; |