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