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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2016, 18:45   #11
Camelot_2012
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 90
По умолчанию

Код:
Uses crt;
var 
    a:array of array of integer;
    k,ww,s,n,SumW,SumC:integer;
    
    names : array of string;
    w,p : array of integer;
    isNoFirst : boolean;     
      
procedure Print(s,n:integer);
begin
  if (A[s,n]<>0) then
    if (A[s-1,n] = A[s,n])
      then Print(s-1,n)
      else begin
        if isNoFirst then Write(', ')
        else isNoFirst  := true;
        write(names[s]);

        SumW:=SumW+w[s];
        SumC:=SumC+p[s];
      end;
end;

var i : integer;

begin
 SumW:=0;
 SumC:=0;
 isNoFirst := false;
 Write('Количество товара: ');
 ReadLn(k); 
 Write('Введите размер рюкзака: ');
 ReadLn(ww);
 WriteLn;
 SetLength(names, k+1);
 SetLength(w, k+1);
 SetLength(p, k+1);
 
 
 for i:=1 to k do begin
   Write('Название ',i,'-го товара:'); 
   ReadLn(names[i]);
   Write('Введите вес товара:'); 
   ReadLn(w[i]);
   Write('Введите цену товара:'); 
   ReadLn(p[i]);
 end;
 
 SetLength(A, k+1);
 for i:=0 to k do
   SetLength(A[i], ww+1);
 
 
 for n:=0 to ww do A[0,n]:=0;
 for s:=1 to k do
    for n:=0 to ww do
    begin
        A[s,n]:=A[s-1,n];
        if  (n>=w[s]) and (A[s-1,n-w[s]]+p[s] > A[s,n])
          then A[s,n]:= A[s-1][n-w[s]]+p[s];
    end;
 WriteLn;   
 print(k,ww);

 WriteLn;
 WriteLn('Суммарный вес: ',SumW);
 WriteLn('Суммарная стоимость: ',SumC);
end.
Camelot_2012 вне форума Ответить с цитированием
Старый 14.12.2016, 21:28   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

точно. Вы угробили процедуру расчёта.

попробуйте сравнить свою процедуру Print
Цитата:
Код:
procedure Print(s,n:integer);
begin
  if (A[s,n]<>0) then
    if (A[s-1,n] = A[s,n])
      then Print(s-1,n)
      else begin
        if isNoFirst then Write(', ')
        else isNoFirst  := true;
        write(names[s]);

        SumW:=SumW+w[s];
        SumC:=SumC+p[s];
      end;
end;
с корректной:
Код:
procedure Print(s,n:integer);
begin
  if (A[s,n]<>0) then
    if (A[s-1,n] = A[s,n])
      then Print(s-1,n)
      else begin
        Print(s-1,n-w[s]);

        if isNoFirst then Write(', ')
        else isNoFirst  := true;
        write(names[s]);

        SumW:=SumW+w[s];
        SumC:=SumC+p[s];
      end;
end;
никакой разницы не видно?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.12.2016, 21:42   #13
Camelot_2012
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 90
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
никакой разницы не видно?
Извиняюсь, видно конечно же. Спасибо Вам огромное!!!
Camelot_2012 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
dateTimePicker а можно ли сделать беспрерывный ввод? Lord_Jesus_ Windows Forms 1 14.10.2016 14:25
Нахождение детерминанта матрицы и её ручной ввод Chester751 Помощь студентам 1 03.05.2016 10:37
Как реализовать ручной ввод данных? maxim43k Помощь студентам 5 07.09.2011 22:49
как сделать быстрый ввод ??? Alex6474 Microsoft Office Excel 1 27.03.2011 14:48
Можно ли сделать ввод формул в примечании? motorway Microsoft Office Excel 1 11.07.2009 16:55