
23.05.2010, 19:47
|
Прохожий
|
|
Регистрация: 23.05.2010
Сообщения: 2
Репутация: 10
|
|
это код на С+ но выполнен не особо. нужно код преобразовать на дельфи
Код:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include <algorithm>
#include <iostream>
#include <functional>
using namespace std;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
#define MAXWEIGHT 100
int a[MAXWEIGHT];
int last_added[MAXWEIGHT]; // для вычисления добавленного объекта
int i, j;
int aux;
int c[100]; // вес
int v[100]; // цена
int n=0; // количество предметов
int W; // вместимость рюкзака
int Lenght; // количество предметов, длина массива q
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Form1->Memo2->Clear();
Form1->Memo4->Clear();
Form1->Memo3->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ AnsiString buf,s;
AnsiString buffer,st;
AnsiString _buf,_s;
{ // ввод объема рюкзака
st = Edit3->Text;
W = StrToInt(st);
}
{
s = Edit1->Text;
_s = Edit2->Text;
}
if(W<100 && Edit1->Text != "" && Edit2->Text != "")
{
{ // заполняем массив q
int i, k =0;
for(i=1,buf="";i<=s.Length()+1;i++)
{
if(i==s.Length()+1)
{
c[k++] = StrToInt(buf);
n++;
break;
}
if(s[i]==' ')
{
c[k++] = StrToInt(buf);
n++;
buf = "";
}
buf += s[i];
}
}
{ // заполняем массив c
int i, k =0;
for(i=1,_buf="";i<=_s.Length()+1;i++)
{
if(i==_s.Length()+1)
{
v[k++] = StrToInt(_buf);
break;
}
if(_s[i]==' ')
{
v[k++] = StrToInt(_buf);
_buf = "";
}
_buf += _s[i];
}
}
}
else { ShowMessage("Некорректно введены исходные данные!"); }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
for (i = 0; i <= W; ++i)
{
a[i] = 0;
last_added[i] = -1;
}
a[0] = 0;
for (i = 1; i <= W; ++i) // прямой ход
for (j = 0; j < n; ++j)
if ((c[j] <= i) && (a[i] < a[i - c[j]] + v[j])) {
a[i] = a[i - c[j]] + v[j];
last_added[i] = j;
}
aux = W;
while ((aux > 0) && (last_added[aux] != -1)) // пока рюкзак не пуст и есть элементы выводим их на экран
{
Form1->Memo2->Lines->Add(last_added[aux] + 1); // номера предметов
Form1->Memo3->Lines->Add(v[last_added[aux]]); // стоимости предметов
Form1->Memo4->Lines->Add(c[last_added[aux]]); // веса предметов
aux -= c[last_added[aux]];
}
Form1->Edit4->Text=(aux - c[last_added[aux]]); // оставшееся место
Edit5->Text=(a[W]); // общая стоимость
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N1Click(TObject *Sender)
{
Form2->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{
Form1->Close();
}
Admin: Пользуемся тегами!
|