На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS

Дорогие друзья! Поздравляем вас с Новым 2025 годом!

Всем удачи, успеха и благополучия!

msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
  
> Мин.элемент
    Помогите написать рекурсивную процедуру нахождения минимального элемента в массиве.
        Ну я знаю,что есть рекурсия и массивы )
        просто мне не понятно как применить рекурсию для поиска мин.элемента.
          Ну как.. выделяешь первый элемент массива и сравниваешь его с минимальным из остальных елементов. Возвращаешь минимум из них. Если в массиве один элемент, возвращаешь его.
            Че-т не то:
            ExpandedWrap disabled
              const N=3;
              procedure FindMin(a:array of integer;i,j:integer;var min:integer);
              begin
                if ((i=1) and (j=1)) then min:=a[1,1];
                if (min>a[i,j]) then
                begin
                  min:=a[i,j];
                  FindMin(a,i-1,j-1,min);
                end;
              end;
              begin
              end.
            Сообщение отредактировано: Monster -
              Брр.. а зачем тебе два счетчика i и j?

              Добавлено
              Вообще, рекурсивный вызов FindMin нужно ставить перед сравнением min и теущего элемента.

              Добавлено
              А еще, лучше оформи подпрограмму как функцию, а не процедуру.
                Ну а если массив двумерный?
                Все равно не так:
                ExpandedWrap disabled
                  const N=3;
                  function FindMin(a:array of integer;i,j:integer):integer;
                  var min:integer;
                  begin
                    if ((i=1) and (j=1)) then FindMin:=a[1,1];
                    min:=FindMin(a,i-1,j-1);
                    if (min>a[i,j]) then
                    begin
                      FindMin:=min;
                    end;
                  end;
                  begin
                  end.
                  Цитата Monster @
                  Ну а если массив двумерный?
                  А не все равно? Все, что тебе надо знать при использовании открытых массивов - это последовательность данных, и ее общая длина... Как организованы эти данные тебя не должно интересовать, и твою программу тоже. К примеру, ей должно быть неважно, или переданные данные означают массив
                  <1, 2, 3, 4, 5, 6>
                  или это
                  <1, 2, 3>
                  <4, 5, 6>
                  или
                  <1, 2>
                  <3, 4>
                  <5, 6>
                  Минимум все равно будет один и тот же...
                    volvo877 ты прав.
                    Пишет Stack overflow:
                    ExpandedWrap disabled
                      const N=3;
                      function FindMin(a:array of integer;i:integer):integer;
                      begin
                        if (i=1) then FindMin:=a[1];
                        FindMin:=a[i];
                        if (FindMin(a,i)>a[i-1]) then FindMin:=a[i-1];
                      end;
                      var i:integer;a:array [1..N] of integer;
                      begin
                        writeln('Enter array: ');
                        for i:=1 to N do
                          readln(a[i]);
                        writeln('Min = ',FindMin(a,N));
                        readln;
                      end.
                      А так:
                      ExpandedWrap disabled
                        const n = 6;
                         
                        function FindMin(const a: array of integer;
                                         const n: integer): integer;
                        var min: integer;
                        begin
                          if n = 1 then FindMin := a[0]
                          else
                            min := FindMin(a[1], pred(n));
                            if a[0] < min then min := a[0];
                            FindMin := min;
                        end;
                         
                        const
                          a: array[1 .. n] of integer = (10, 20, 3, 4, 5, 6);
                         
                        begin
                          writeln(findmin(a, n));
                        end.
                      ?

                      Добавлено
                      Ты не учел, в частности, что открытые массивы индексируются с 0, а не с 1...
                        Да.Я просто с Си работал:там все с 0,а здесь то с 1,то с 0 ;-)
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0551 ]   [ 15 queries used ]   [ Generated: 22.01.25, 00:41 GMT ]