Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.12.2011, 19:40
xrumas xrumas вне форума
Прохожий
 
Регистрация: 01.12.2011
Сообщения: 15
Репутация: 10
По умолчанию Найти произведение элентов массива от мин до макс элемента

Есть массив, одномерный, нужно найти произведение элементов между максимальным и минимальными элементами. Так вот, не знаю как сделать так, что бы если минимальный элемент стоит перед максимальным в массиве, произведение находилось от минимального до максимального, то есть наоборот. Вроде написал правильно, сначало находим максимальный элемент, присваиваем переменной, потом минимальный, то же присваиваем, потом уже произведение находим, но почиму то выводиться только 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;
Вложения
Тип файла: zip code.zip (210.0 Кбайт, 3 просмотров)
Ответить с цитированием
  #2  
Старый 04.12.2011, 20:04
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

баг легче отловить если код разбить на функции
Ответить с цитированием
  #3  
Старый 04.12.2011, 20:13
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Как-то так:
Код:
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  
Старый 04.12.2011, 21:45
xrumas xrumas вне форума
Прохожий
 
Регистрация: 01.12.2011
Сообщения: 15
Репутация: 10
По умолчанию

Вообщем вот, работает, выполняеться, выкладываю с заданием
В одномерном массиве, состоящем из 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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:54.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025