algorytm.org

Implementacja w Delphi/Pascal



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Problem załadunku - Implementacja w Delphi/Pascal
Ocena użytkownikóww: *****  / 1
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 31 lipca 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

Zaladunek D/Dynamic.pas:
//www.algorytm.org
//Tomasz Lubiński (c)2001
unit Dynamic;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Edit1: TEdit;
    Label1: TLabel;
    Edit2: TEdit;
    Label2: TLabel;
    ListBox1: TListBox;
    Button1: TButton;
    Button2: TButton;
    Label3: TLabel;
    Label4: TLabel;
    Edit3: TEdit;
    Edit4: TEdit;
    ListBox2: TListBox;
    Label8: TLabel;
    procedure Generuj(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  b,n: Integer;
  a,c,rozw: Array of Integer;
  f,x: Array of Array of Integer;
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Generuj(Sender: TObject);
var i,p,w:Integer;
begin
b:=StrToInt(Edit1.Text);
n:=StrToInt(Edit2.Text);
p:=StrToInt(Edit4.Text);
w:=StrToInt(Edit3.Text);
SetLength(a,n+1);  SetLength(c,n+1);
ListBox1.Clear;
Randomize;
 for i:=1 to n do
  begin
  a[i]:=Random(w)+1;
  c[i]:=Random(p)+1;
  end;
ListBox1.Items.Add('typ    |   ciężar   |   pojemnosc ');
ListBox1.Items.Add('--------------------------------------------------');
 for i:=1 to n do
  ListBox1.Items.Add(IntToStr(i)+'              '+IntToStr(a[i])+'                '+IntToStr(c[i]));
end;

procedure TForm1.Button2Click(Sender: TObject);
var j,l:Integer;
begin
SetLength(rozw, n+1);
SetLength(f,n+1,b+1);  SetLength(x,n+1,b+1);
for l:=0 to b do
 begin
 f[1,l]:=c[1]*Trunc(l/a[1]);
 if f[1,l]=0 then x[1,l]:=0 Else x[1,l]:=1;
 end;
for j:=2 to n do
 for l:=0 to b do
  begin
   if l-a[j]<0 then f[j,l]:=f[j-1,l]
    else if f[j-1,l]>f[j,l-a[j]]+c[j] then f[j,l]:=f[j-1,l]
     else f[j,l]:=f[j,l-a[j]]+c[j];
   if l-a[j]<0 then x[j,l]:=x[j-1,l]
    else if f[j-1,l]>f[j,l-a[j]]+c[j] then x[j,l]:=x[j-1,l]
     else x[j,l]:=j;
  end;
j:=b;
repeat
Inc(rozw[x[n,j]]);  //wyznaczenie ostatecznego rozwiazania
j:=j-a[x[n,j]];
until (j<=0) or (a[x[n,j]]=0);
ListBox2.Clear;               //wypisanie ostatecznego rozwiązania
ListBox2.Items.Add('typ     |    ilosc   ');
 for j:=1 to n do
  ListBox2.Items.Add(IntToStr(j)+'              '+IntToStr(rozw[j]));
Finalize(rozw);
Finalize(f); Finalize(x);
end;

end.
Dodaj komentarz