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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2008, 21:27   #1
Karabas
Пользователь
 
Регистрация: 22.11.2008
Сообщений: 15
По умолчанию Найти максимальное число.Паскаль.

Задана непустая последовательность положительных целых чисел,за которой следует 0.Описав подходящую рекурсивную функцию или процедуру, найти наибольшее из этих чисел.
Я в рекурсии не особо разбираюсь.Попробовал решить,но программа выдаёт неправильный ответ.Помогите пожалуйста.

Код:
 program abc(input,output);
 var a,b:integer;
 function max(a,b:integer):integer;
 begin
  if b=0 then max:=a else
  begin
   a:=b;read(b);
   max:=max(a,b);
  end;
  if a>b then max:=a else max:=b;
 end;
 begin
  read(a,b);
  writeln(max(a,b));
 end.

Последний раз редактировалось Karabas; 06.12.2008 в 21:40.
Karabas вне форума Ответить с цитированием
Старый 07.12.2008, 22:29   #2
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Цитата:
Сообщение от Karabas Посмотреть сообщение
Задана непустая последовательность положительных целых чисел,за которой следует 0.Описав подходящую рекурсивную функцию или процедуру, найти наибольшее из этих чисел.
Я в рекурсии не особо разбираюсь.Попробовал решить,но программа выдаёт неправильный ответ.Помогите пожалуйста.
Для начала эту последовательность нужно определить...
Итак, смотрим правку кода:

Код:
program abc;
var
  a,b,c :integer;
  Arr: array[0..1023] of Integer; //Это и будет наша последовательность из 1024 элементов типа Integer
Далее эту последовательность нам нужно откуда-то взять.
Код:
begin
c:=0; a:=0;
writeln('Vvedite chisla posledovatelnosti po odnomu. 0 - konec posl-ti.');
repeat
  read(a);
  writeln(',');
  if a>0 then
  begin
    arr[c]:=a;
    inc(c);
  end;
until a=0;
Теперь время взяться за саму функцию...
Код:
function max(a,b:integer):integer; //здесь a-число, b- порядковый номер сравниваемого числа последовательности
begin
  if b=c then //если предыдущий элемент- последний в последовательности, то завершаем рекурсию
    Result:=a
  else //иначе
  begin
    if a>arr[b] then
      Result:=max(a,b+1)
    else
      Result:=max(arr[b],b+1);
  end;
end;
Знаю, вариант полностью отличается от предложенного, однако должен работать.
Итого мы имеем:
Код:
program abc;
var
  a,b,c :integer;
  Arr: array[0..1023] of Integer;

function max(i,n:integer):integer;
begin
  if n=c then
    Result:=i
  else
  begin
    if i>arr[n] then
      Result:=max(i,n+1)
    else
      Result:=max(arr[n],n+1);
  end;
end;

begin
  c:=0; a:=0;
  writeln('Vvedite chisla posledovatelnosti po odnomu. 0 - konec posl-ti.');

  repeat
    read(a);
    writeln(',');
    if a>0 then
    begin
      arr[c]:=a;
      inc(c);
  until a=0;

  b:=max(arr[0],1);
  Writeln;
  writeln('Maksimalnoe chislo posl-ti=',b);
end;
P.S. Код не компилил, но работать должен.
Познавая других, мы познаем себя.
С'est la vie...

Последний раз редактировалось SuperVisor; 07.12.2008 в 22:43. Причина: Недочет =)
SuperVisor вне форума Ответить с цитированием
Старый 16.12.2008, 21:13   #3
Karabas
Пользователь
 
Регистрация: 22.11.2008
Сообщений: 15
По умолчанию

Всё работает,но у меня возник вопрос.А можно ли вообще сделать так,как я хотел, то есть без массивов.Просто рекурсия сама по себе ест память,а тут ещё масссив.

Последний раз редактировалось Karabas; 16.12.2008 в 21:34. Причина: описка
Karabas вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос - нужно найти по каждому ид максимальное сальдо, и просуммировать их za4ot SQL, базы данных 6 19.09.2008 15:09
Найти и вывести все слова,у котоpых число гласных букв пpевышает число согласных. Briz Помощь студентам 2 11.05.2008 00:56
Как найти большее число из имеющихся значений в Паскале? Auditor Помощь студентам 7 05.05.2008 21:57
В целочисленном массиве найти самое часто повторяющееся число Алена Помощь студентам 2 01.11.2007 19:46