![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Есть массив, одномерный, нужно найти произведение элементов между максимальным и минимальными элементами. Так вот, не знаю как сделать так, что бы если минимальный элемент стоит перед максимальным в массиве, произведение находилось от минимального до максимального, то есть наоборот. Вроде написал правильно, сначало находим максимальный элемент, присваиваем переменной, потом минимальный, то же присваиваем, потом уже произведение находим, но почиму то выводиться только 1 в ответ.
Создание массива Код:
procedure TForm1.Button1Click(Sender: TObject); begin //sozdat' massiv edit2.Clear; n:=strtoint(edit1.Text); setlength(d,n); randomize; for i:=0 to n-1 do begin d[i]:=round(40*random-20); edit2.text:=edit2.text+inttostr(d[i])+' '; end; end; Нахождение произведения Код:
procedure TForm1.Button3Click(Sender: TObject); //pr var max,min,maxi,mini,pr,pr1:integer; begin pr:=1; pr1:=1 ; max:=d[1]; min:=d[1]; maxi:=1; mini:=1; for i:=0 to N-1 do begin //nahodim max element matrici if d[i]>max then begin max:=d[i]; maxI:=i; end; edit6.text:=inttostr(max); //vivodim max end; for i:=0 to N-1 do begin //nahodim min element matrici if d[i]<min then begin min:=d[i]; minI:=i; end; edit7.text:=inttostr(min); //vivodim min end; if maxi > mini then begin //nachinaem shitat' for i:=maxI+1 to minI-1 do begin pr:=pr*d[i] ; end; edit4.Text:=inttostr(pr); end; end; |
|
#2
|
|||
|
|||
|
баг легче отловить если код разбить на функции
|
|
#3
|
|||
|
|||
|
Как-то так:
Код:
uses
Math;
procedure TForm1.Button1Click(Sender: TObject);
var
N : Integer;
I : Integer;
Imin, Imax : Integer;
Vmin, Vmax : Integer;
A : Array Of Integer;
Mul : Integer;
begin
Randomize;
// Build the array
N := StrToInt(Edit1.Text);
SetLength(A, N);
For I := Low(A) To High(A) Do
A[i] := Random(101) - 50; // Value -50..50
// Find Idx of min and max
Imin := Low(A);
Imax := Low(A);
Vmin := A[Low(A)];
Vmax := A[Low(A)];
For I := Low(A)+1 To High(A) Do
Begin
If Vmin > A[i] Then
Begin
Imin := I;
Vmin := A[i];
End;
If Vmax < A[i] Then
Begin
Imax := I;
Vmax := A[i];
End;
End;
// Find multiplication
Mul := 1;
For I := Min(Imin,Imax) To Max(Imin,Imax) Do
Mul := Mul * A[i];
// Show result
ShowMessage('Mul is ' + IntToStr(Mul));
end; |
|
#4
|
|||
|
|||
|
Вообщем вот, работает, выполняеться, выкладываю с заданием
В одномерном массиве, состоящем из n целых элементов, вычислить: 1) сумму отрицательных элементов массива; 2) произведение элементов массива, расположенных между максимальным и минимальным элементами; 3) отсортировать массив по возрастанию элементов. Код:
unit Unit1;
interface
uses
Windows, Math, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Edit3: TEdit;
Label2: TLabel;
Edit4: TEdit;
Label3: TLabel;
Edit5: TEdit;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Button5: TButton;
Button6: TButton;
Label8: TLabel;
Label9: TLabel;
Edit6: TEdit;
Edit7: TEdit;
Label10: TLabel;
Label11: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
a,d: array of integer;
n,i,j:integer;
t,z:integer;
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); //sozdat' massiv
begin
edit2.Clear;
n:=strtoint(edit1.Text);
setlength(d,n);
randomize;
for i:=0 to n-1 do begin
d[i]:=round(40*random-20);
edit2.text:=edit2.text+inttostr(d[i])+' ';
end;
end;
procedure TForm1.Button2Click(Sender: TObject); //summa otrecatel'nih elementov
var s:integer;
begin
s:=0;
for i:=0 to n-1 do begin
if d[i]<0 then
s:=s+d[i];
end;
edit3.Text:=inttostr(s);
end;
procedure TForm1.Button4Click(Sender: TObject); //sortirovla Massivka
var i,j,t,z :integer;
begin
edit5.Clear;
for i:=0 to n-1 do begin
for j:=i+1 to n-1 do begin
if d[i] > d[j] then begin
t:=d[i];
d[i]:=d[j];
d[j]:=t;
end;
end;
end;
for z:=0 to n-1 do
edit5.Text:=edit5.text+inttostr(d[z])+' ';
end;
procedure TForm1.Button5Click(Sender: TObject); //exit
begin
form1.Close;
end;
procedure TForm1.Button6Click(Sender: TObject); //cleanse:)
begin
edit1.Text:=inttostr(0);
edit2.Clear;
edit3.clear;
edit4.clear;
edit5.clear;
edit6.clear;
edit7.clear;
end;
procedure TForm1.Button3Click(Sender: TObject); //proizvedenie
var maxv,minv,maxi,mini:integer;
pr:integer;
begin
maxv:=d[1];
minv:=d[1];
maxi:=1;
mini:=1;
for i:=0 to N-1 do begin
if d[i] > maxv then begin //nahodim max element matrici
maxv:=d[i];
maxI:=i;
end;
if d[i] < minv then begin //nahodim min element matrici
minv:=d[i];
minI:=i;
end;
end;
pr:=1; //proizvedenie mezhdu!
For I:= Min(mini,maxi)+1 To Max(mini,maxi)-1 Do begin
Pr := pr * d[i];
end;
edit7.text:=inttostr(minv);
edit6.text:=inttostr(maxv);
edit4.Text:=inttostr(pr);
end;
end. |