Показать сообщение отдельно
  #2  
Старый 23.05.2010, 19:47
sinnop sinnop вне форума
Прохожий
 
Регистрация: 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: Пользуемся тегами!
Ответить с цитированием