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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 13.07.2011, 21:55   #1
Balloonatic
 
Регистрация: 08.07.2011
Сообщений: 4
По умолчанию Рекурсия в Delphi

Помогите, пожалуйста, найти ошибку.
Задание - найти минимальный положительный элемент массива. Программа не работает если вводить поочередно отрицательные и положительные элементы - например, 1, -5, 10, -15, 20, -25 и т.д.
Код:
//рекурсивная функция
function min_pol (b:array of integer; n:integer) :integer;
begin
begin
Result:=b[n];
   if n>0 then
       begin
         R:=min_pol(b,n-1);
         if Result>R then Result:=R
       end;
   min_pol:=Result;

end;
end;
//процедура обработки нажатия на кнопку "выполнить"
var tmp,k,l,j,jmn,nom:integer;
    b:array of integer;
begin
jmn:=-1;
j:=0;
while (j<n)and(jmn=-1)do  //проверка наличия положительных элементов
if a[j]>0 then jmn:=j
else j:=j+1;
if jmn=-1 then Memo2.Text:=' В массиве нет положительных элементов! '
else
 begin
  k:=0;
  SetLength(b,n);
  for j:=0 to n-1 do
    b[j]:=a[j];

  for j:=0 to n-1 do
    if a[j]>0 then tmp:=j;

  if a[n-1]<0 then
    a[n-1]:=a[tmp];

  for j:=0 to n do
    if a[j]>=0 then
      begin
      k:=k+1;
      a[k-1]:=a[j];
      end;
  rezult:=min_pol(a,n-1); //вызов рекурсивной функции
Balloonatic вне форума
Старый 14.07.2011, 09:45   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы программу сами писали? (у меня создалось впечатление, что она, как Франкенштейн, собрана из разных кусков, написаных разными людьми!)

1) зачем Вы переписываете массив a -> массив b ?! Массив b нигде не используется после этого!!!

2) зачем вот этот кусок кода?!!!
Цитата:
Код:
  for j:=0 to n-1 do
    if a[j]>0 then tmp:=j;

  if a[n-1]<0 then
    a[n-1]:=a[tmp];

  for j:=0 to n do
    if a[j]>=0 then
      begin
      k:=k+1;
      a[k-1]:=a[j];
      end;
3) при проверке на найденный минимум Вы забываете учитывать, что среди элементов могут попадаться (и попадаются!!!) отрицательные!


вот ПОЛНЫЙ рабочий вариант решения.
Код:
//рекурсивная функция
function min_pol (b:array of integer; n:integer) :integer;
var R : integer;
begin
  if n>0 then begin
       if b[n]>=0 then 
         begin
           R := min_pol(b,n-1);
           if (R>=0) and (R<b[n])
             then min_pol := R
             else min_pol := b[n];
         end
       else
         min_pol := min_pol(b,n-1);
  end
  else
     if b[n]<0 then min_pol := -1 {если элемент массива меньше нуля - результат -1}
     else  min_pol := b[n];
end;

procedure TForm1.Button1Click(Sender: TObject);
Const N = 10;
const A : array[0..N-1] of integer = (-11, 5, -10, 15, -20, -25, 1, -77, 30, -3);
var MinResult : integer;
begin
  MinResult := min_pol(A, N-1);
  if MinResult=-1 then
    Label1.Caption := 'В исходном массиве нет положительных элементов!'
  else
    Label1.Caption := IntToStr(MinResult);
end;

Последний раз редактировалось Serge_Bliznykov; 14.07.2011 в 10:13.
Serge_Bliznykov вне форума
Старый 05.12.2011, 23:31   #3
МарияКСергеевна
Новичок
Джуниор
 
Регистрация: 05.12.2011
Сообщений: 1
По умолчанию

Ввести одномерный массив l = {13, 4, -2, 6, 7, -1, -5, 2, -3, 4}.
Вычислить и вывести m[0]n[0]+m[1]n[1]+…+m[k]n[k], где m[0], m[1],…m[p] - отрицательные элементы массива l, взятые в порядке их следования; n[0], n[1],…n[q] – положительные элементы массива l, взятые в обратном порядке их следования; k = min{p,q}.
Помогите мне сделать......у меня ни как не получается....
МарияКСергеевна вне форума
Старый 06.12.2011, 08:36   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

МарияКСергеевна
это называется ФЛУД.

Почитайте правила форума и раздела и создавайте НОВУЮ тему (обязательно с правильным названием).


ДАННАЯ ТЕМА ЗАКРЫТА
Serge_Bliznykov вне форума
Закрытая тема


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



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