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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2009, 19:05   #1
oblachko
Пользователь
 
Регистрация: 04.12.2008
Сообщений: 55
По умолчанию Ручной режим Задачи о Рюкзаке в Delphi

Подскажите пожалуйста, как реализовать ручной режим в этой проге?!?!?

Вот сам код проги:


Код:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, Mask, Grids, ExtCtrls, DBCtrls, ComCtrls;

type
  TformMain = class(TForm)
    MainMenu: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    Label1: TLabel;
    Label2: TLabel;
    EditWidth: TEdit;    
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Label3: TLabel;
    EditN: TEdit;          
    Goods: TStringGrid;  
    Label4: TLabel;
    Label5: TLabel;
    Bevel1: TBevel;
    Label6: TLabel;
    Solve: TEdit;          
    Label7: TLabel;
    TakenGoods: TEdit;      
    OpenDialog: TOpenDialog;
    CheckBox1: TCheckBox;
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure EditNChange(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
 MAXW = 500;                 
MAXN = 25;                 

var
  formMain: TformMain;

  val:array[0..MAXW,0..MAXN] of integer; 
  take:array[0..MAXW,0..MAXN] of boolean;
  v,w:array[1..MAXN] of integer; 
  n, TotalW:integer; 
  z:integer;
  weight,i:integer; 
  taken:string;      
  InputFile:TextFile;

implementation

{$R *.dfm}

procedure TformMain.Button2Click(Sender: TObject);
begin
EditWidth.Text:='';
for i:=1 to Goods.RowCount-1 do
 begin
  Goods.Cells[1,i]:='';
  Goods.Cells[2,i]:='';
 end;
EditN.Text:='3';
Solve.Text:='';
TakenGoods.Text:='';
taken:='';
end;

procedure TformMain.Button3Click(Sender: TObject);
begin
TotalW:=StrToInt(EditWidth.Text);
for i:=1 to n do
 begin
  w[i]:=StrToInt(Goods.Cells[1,i]);
  v[i]:=StrToInt(Goods.Cells[2,i]);
 end;

 for i:=0 to n do begin
 val[0,i] := 0;
 take[0,i] := false;
 end;
 for weight:=1 to TotalW do val[weight,0] := 0;
 for weight := 1 to TotalW do
 for i := 1 to N do
  if (w[i]>weight) 
   
   or ( val[weight, i-1] >= val[weight-w[i],i-1] + v[i] )
  then begin 
  val[weight,i] := val[weight,i-1]; 
  take[weight,i] := false; 
  end
  else 
  begin
  
  val[weight,i] := val[weight-w[i],i-1] + v[i];
  take[weight,i] := true;
  end;

Solve.Text:=IntToStr(val[TotalW,N]);
weight:=TotalW;
for i:=N downto 1 do
 if take[weight,i] then
  begin
   taken:=taken+' '+IntTostr(i);
   weight:=weight-w[i];
  end;
TakenGoods.Text:=taken;
end;

procedure TformMain.EditNChange(Sender: TObject);
begin
n:=StrToInt(EditN.Text);
Goods.RowCount:=n+1;

formMain.Repaint;
end;

procedure TformMain.FormPaint(Sender: TObject);
var i:integer;
begin
Goods.Cells[1,0]:='Вес';
Goods.Cells[2,0]:='Цена';
for i:=1 to Goods.RowCount do
 Goods.Cells[0,i]:=IntToStr(i);
end;

procedure TformMain.Button1Click(Sender: TObject);
var tmp:string;
    w,c:integer;
    n:integer;
begin
if OpenDialog.Execute then
 AssignFile(InputFile, OpenDialog.FileName);
Reset(InputFile);

readln(InputFile,tmp);
EditWidth.Text:=tmp;

readln(InputFile,tmp);
EditN.Text:=tmp;
n:=StrToInt(tmp);
Goods.RowCount:=n+1;
formMain.Repaint;
for i:=1 to n do
 begin
  readln(InputFile,w,c);
  Goods.Cells[1,i]:=IntToStr(w);
  Goods.Cells[2,i]:=IntToStr(c);
 end;
CloseFile(InputFile);
end;

procedure TformMain.N2Click(Sender: TObject);
begin
FormMain.Close;
end;
end.

Доселе мне говорили, что ручной режим нужно сделать следуюшим образом:
1)Устанавливаем вместимость рюкзака(уже есть)
2)Устанавливаем кол-во предметов(уже есть)
3)К каждому предмету устанавливаем вес и цену(уже есть)
4)А вот ручной режим:Нужно из списка, который формируется в Goods, выбрать те предметы, которые мы хотим.По этим вещам должен идти весь процесс решения задачи!!Т.Е. к примеру:
Вместимость ранца-100 кг Всего вещей-4
Вес Цена
15 12 -выбираем эту строку
25 421
10 124
50 566 -выбираем эту строку

Эти вещи у нас пойдут в ранец, так как ранец вмещает 100кг, а мы взяли вещей на 66 кг!!!Дак вот нужно ещё создать Solve, в котором,после нажатия на кнопку решить, пропишется остаток кг, которые можно было бы поместить в ранец))

В общем:Нужно реализовать выбор вещей.А во-вторых определить остаток места в ранце, который появится в Solve))

Пробовал создать CheckBox, и реализовать его по-принципу создания строк Таблицы, но ничего не получалось(

Одним словом:ПОМОГИТЕ)
oblachko вне форума Ответить с цитированием
Старый 07.06.2009, 23:26   #2
oblachko
Пользователь
 
Регистрация: 04.12.2008
Сообщений: 55
По умолчанию

АУУУУУ!!!ГДЕ все БЛАТНЫЕ программисты?!?!

НЕУЖЕЛИ НИКТО НЕ ПОМОЖЕТ?!?!
oblachko вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачи по Delphi Ruska882009 Помощь студентам 6 05.11.2010 15:10
Домино ручной режим INCIC Помощь студентам 1 31.05.2009 19:31
Delphi(консольный режим) спрятать окно Air Помощь студентам 4 02.07.2008 14:21
полноэкранный режим в Delphi deadh5n1 Общие вопросы Delphi 1 27.06.2007 09:18