![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с одномерными массивами [D7]
xrumas © (2011-12-04 19:30:00)Есть матрица, одномерная, нужно найти произведение элементов между максимальным и минимальными элементами. Так вот, не знаю как сделать так, что бы если минимальный элемент стоит перед максимальным в массиве, произведение находилось от минимального до максимального, то есть наоборот. Вроде написал правильно, сначало находим максимальный элемент, присваиваем переменной, потом минимальный, то же присваиваем, потом уже произведение находим.
вот создание массива
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);
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);
end;
if maxi > mini then begin //KAK ETO SDELAT' TO??? NIFIGA NE RABOTAET ZHE!!!!!!
for i:=maxI+1 to minI-1 do begin
pr:=pr*d[i] ;
end;
edit4.Text:=inttostr(pr); //VSEGDA EDINICA!!!!!
end;
end;
Jeer (2011-12-04 22:26:00) [21]
> maxv:=d[1];
> minv:=d[1];
> maxi:=1;
> mini:=1;
> for i:=0 to N-1 do begin
maxi := 0;
mini := 0;
maxv := d[maxi];
minv := maxv;
for i:= 1 to N - 1 do begin
...
xrumas (2011-12-04 21:42:00) [22]Вообщем вот, программа работает, выкладываю с заданием.
В одномерном массиве, состоящем из 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.
MBo (2011-12-04 21:04:00) [23]>в Uses нужно Math дописать ?
да
xrumas (2011-12-04 20:55:00) [24]
> for i:= Min(maxI, MinI)+1 to Max(maxI, MinI)-1
в Uses нужно Math дописать ? Ругаеться что то [Error] Unit1.pas(143): Missing operator or semicolon после Min(
MBo (2011-12-04 20:12:00) [25]for i:= Min(maxI, MinI)+1 to Max(maxI, MinI)-1
Dimka Maslov (2011-12-04 20:11:00) [26]1. Находим индексы минимального и максимального элементов (в одном цикле)
2. Если индекс минимального элемента больше индекса максимального - меняем их местами.
3. Циклом проходим все элементы для получения произведения.
xrumas (2011-12-04 20:11:00) [27]
> > 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);
> > 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;
>
> Достаточно одного цикла
Не получеться так сделать что то.
Я может условие не првильно понял, я понимаю так, что дан массив, например, 2 4 5 63 2 12 3, 6это макс элемент, 1это мин, между ними 3 и 2, вот их произведение нужно найти.
xrumas (2011-12-04 19:56:00) [28]
> Бред какой-то.
В одномерном массиве, состоящем из n целых элементов, вычислить произведение элементов массива, расположенных между максимальным и минимальным элементами.
xrumas (2011-12-04 19:52:00) [29]
А, или произведение максимального и минимального элементов ?
Произведение между максимальным и минимальным.
Ну вот сортировку сделал вроде, теперь нужно от макс до мин найти произведение, но макс и мин не включать, вроде вот так должно быть, а что то не работает все равно.
Вроде так
for i:=maxI+1 to minI-1 do begin
pr:=pr*d[z] ;
Сортировка от минимального до максимального:
procedure TForm1.Button4Click(Sender: TObject);
var i,j,t,z :integer; //sortirovla Massivka
begin
edit5.Clear;
for i:=0 to n-1 do
begin
for j:=i+1 to n-1 do
if d[i] > d[j] then
begin
t:=d[i];
d[i]:=d[j];
d[j]:=t
end;
end;
for z:=0 to n-1 do
edit5.Text:=edit5.text+inttostr(d[z])+' ';
end;
Jeer (2011-12-04 19:48:00) [30]
> Бред какой-то.
Как обычно - попытка из рандом-слов получить программу.
Плохиш (2011-12-04 19:45:00) [31]
> если минимальный элемент стоит перед максимальным в массиве,
> произведение находилось от минимального до максимального,
> то есть наоборот.
Бред какой-то.
Плохиш (2011-12-04 19:44:00) [32]
> 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);
> 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;
Достаточно одного цикла
> if maxi > mini then begin //KAK ETO SDELAT' TO??? NIFIGA
> NE RABOTAET ZHE!!!!!!
> for i:=maxI+1 to minI-1 do begin
> pr:=pr*d[i] ;
> end;
> edit4.Text:=inttostr(pr); //VSEGDA EDINICA!!!!!
Переставь местами или засти условия в сравнении, или начальное и конечное значение в цикле.
PS. Для проверки воспалённых фантазий мозга всегда достаточно реализовать их по шагам с помощью карандаша и бумаги.
Jeer (2011-12-04 19:44:00) [33]А, или произведение максимального и минимального элементов ?
Опять же отсортируй и перемножь первый и последний элементы.
Jeer (2011-12-04 19:42:00) [34]Отсортируй, перемножь первую и вторую половины.