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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2010, 21:01   #1
inlove
Новичок
Джуниор
 
Регистрация: 14.12.2010
Сообщений: 2
По умолчанию

Здравствуйте!
Помогите пожалуйста с задачей: дано n предметов, для каждого установлена его цена. Выберете из них m предметов так, чтобы их общая стоимость находилась в пределах от m1 до m2.
Заранее огромное спасибо

вот мои наработки
Код:
program oth_nazad;
uses crt;
type
  mass=array[1..100] of integer;

procedure try(var b:mass; a:mass;i,m,m1,m2,n,s:integer);
var
  j,w:integer;
begin
  for j:=1 to n do
    begin
      if (((a[j]+s)>m1) and ((a[j]+s)<m2)) then
        begin
          b[i]:=a[j];
          s:=s+a[j];
          if i<m then try(b,a,i+1,m,m1,m2,n,s)
          else begin
                 for w:=1 to m do
                   write(b[w]:3);
               end;
        end;
    end;
end;

var
  a:mass;
  b:mass;
  s,n,i,m,m1,m2:integer;
begin
  clrscr;
  write('n=');
  readln(n);
  writeln('massiv');
  for i:=1 to n do
    readln(a[i]);
  write('m1=');
  readln(m1);
  write('m2=');
  readln(m2);
  write('m=');
  readln(m);
  s:=0;
  try(b,a,i,m,m1,m2,n,s);
  readln;
end.

Последний раз редактировалось Stilet; 15.12.2010 в 11:54.
inlove вне форума Ответить с цитированием
Старый 14.12.2010, 21:35   #2
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Цитата:
Сообщение от inlove Посмотреть сообщение
вот мои наработки
...
Что в твоем коде не работает ? Просто у меня нет Паскаля , не могу прогнать его
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 15.12.2010, 10:21   #3
inlove
Новичок
Джуниор
 
Регистрация: 14.12.2010
Сообщений: 2
По умолчанию

когда я запускаю программу, он мне вместо нужного набора m предметов выводит штук 7 нулей((
получается, что он массив b не заполняет..а вот где ошибка понять не могу((
помоги пожалуйста)
inlove вне форума Ответить с цитированием
Старый 15.12.2010, 20:32   #4
rubius2008
Форумчанин
 
Регистрация: 19.03.2010
Сообщений: 409
По умолчанию

вот как то так должно
Код:
procedure try(var b:mass; a:mass;i,m,m1,m2,n,s:integer);
begin
   if (a[i]+s>=m1) and (a[i]+s<=m2) then for i:=1 to m do write(b[i]:3);
   else
   begin
     b[m]:=a[j];
     s:=s+a[j];
     if i<n then try(b,a,i+1,m+1,m1,m2,n,s);
   end;
end;
Но еще надо учесть, тот факт, что допустим если текущая вещь дороговата, то нужно еще посмотреть другие. Это сам добавь.
Есть вопросы, пишите в ЛС.
rubius2008 вне форума Ответить с цитированием
Старый 15.12.2010, 22:57   #5
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Вот твоя программа , я ее подправил , она теперь выдает все возможные варианты , которые она может найти по твоему запросу в введенном массиве :

Код:

uses crt;
type mass=array[1..100] of integer;

procedure recurs(var b:mass;a:mass;m,m1,m2,num,sum,el,n : integer);
var i : integer ;
begin
   if (sum>=m1) and (sum<=m2) and (m=0) then 
     begin
      for i:=1 to el do write(b[i]:3);
      writeln();
     end
   else
   begin
    if (m>0) and (sum<= m2) and (num <= n) then
      for i:=num to n do
        begin
          b[m]:=a[i];          
          recurs(b,a,m-1,m1,m2,i+1,sum+a[i],el,n);
        end;
   end;
end;

var
  a:mass;
  b:mass;
  i,s,n,m,m1,m2:integer;
begin
  clrscr;
  write('n=');
  readln(n);
  writeln('massiv');
  for i:=1 to n do
    readln(a[i]);
  write('m1=');
  readln(m1);
  write('m2=');
  readln(m2);
  write('m=');
  readln(m);
  s:=0;
   
  recurs(b,a,m,m1,m2,1,s,m,n);
  readln;
end.
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Назад и обновить Zloy_Doomer JavaScript, Ajax 7 21.11.2010 19:20
Возвращение назад в меню K[Lanc]N Помощь студентам 5 22.02.2009 11:14
Назад в прошлое Repz О форуме и сайтах клуба 4 14.08.2007 12:56
на шаг назад... malevich Общие вопросы Delphi 9 01.04.2007 20:50