Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2013, 16:35   #1
Shadowpuse
Новичок
Джуниор
 
Регистрация: 21.08.2013
Сообщений: 1
По умолчанию Рекурсия delphi

Ребят, в общем нужна помощь в написании программы, нужно найти минимальный элемент и его номер одномерного массива А, состоящего из N элементов. Рекурсию применять для каждой из половин массива отдельно, и заканчивать когда останется один элемент. К сожалению в делфи я не сильно силён, и всё до чего я дошёл перечитав всё о рекурсии это:

Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, StdCtrls, Math;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
function MinElement(a: array of integer; n,l,r: integer): integer;
begin
 if l = r then             // если всего один элемент
    Result := a[l]
  else if r - l = 1 then    // если ищем минимум из двух элементов
    Result := min(a[l], a[r])
  else
  begin
  var
    mid := (l + r) div 2;
    Result := min(MinElem(a, l, mid), MinElem(a, mid+1, r));
  end;
end;
end.

Последний раз редактировалось Stilet; 21.08.2013 в 17:11.
Shadowpuse вне форума Ответить с цитированием
Старый 21.08.2013, 22:38   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

для паскаля... под дельфу адаптируешь
Код:
const
     n = 10;
var
   mas : array [1..n] of integer;
   left, right, i : integer;
   
function rec(l,r : integer): integer;
var
   t1, t2:integer;
begin
     if l=r then
        rec:=mas[l]
     else
         begin
              t1:=rec(l,(l+r) div 2);
              t2:=rec((l+r) div 2 +1, r);
              if t1<t2 then
                 rec:=t1
              else
                  rec:=t2;
         end;
end;

begin
     randomize;
     for i:= 1 to n do
         mas[i] := random(20) +1;

     writeln('Ishodnyj massiv:');
     for i:=1 to n do
         write(mas[i]:3);

         writeln;
         writeln('Min = ', rec(1 , n));
end.
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 22.08.2013, 16:25   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
найти минимальный элемент и его номер
Код:
const
     n = 10;
var
   mas : array [1..n] of integer;
   left, right, i : integer;

function rec(l,r : integer): integer;
var
   t1, t2:integer;
begin
     if l=r then
        rec:=l
     else
         begin
              t1:=rec(l,(l+r) div 2);
              t2:=rec((l+r) div 2 +1, r);
              if mas[t1]<mas[t2] then
                 rec:=t1
              else
                  rec:=t2;
         end;
end;

begin
     randomize;
     for i:= 1 to n do
         mas[i] := random(20) +1;

     writeln('Ishodnyj massiv:');
     for i:=1 to n do
         write(mas[i]:3);

         writeln;
         writeln('Min=',mas[rec(1 , n)],' nom=',rec(1 , n));
end.
puporev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсия (Delphi) Dlk Помощь студентам 0 28.05.2012 20:25
DELPHI(рекурсия) sergi Помощь студентам 0 29.03.2011 15:30
Рекурсия в Delphi! Anton5 Помощь студентам 11 26.06.2010 16:45
Рекурсия в Delphi Ericnex Помощь студентам 2 05.05.2010 19:34