Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с одномерными массивами [D7]


Страницы:   1 2

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]

Отсортируй, перемножь первую и вторую половины.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо