|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
ЭКСПРЕС задание для профессионалов
Доброго времени суток эксперты)!
Затра сдавать прогу а переделать не успеваю. Помогите пожалуйста. программа на С+ а надо на дельфи. программа о загрузке рюкзака любым методом но лучше матодом динамического программирования. еще прикреплю unit . просто горю. если будит плохая оценка то свободные посещение не дадут (((( помогите плиз. могу даже купить хорошую прогу icq=390431607 типо поиском альтернатив но это не гравное. Сють вопроса: вводится вес рюкзака, количество предметов со стоимостью и весом. надо отобрать самые лучше предметы в заданный рюкзак. ( прикреплю вот фрагмент на C+: |
#2
|
|||
|
|||
это код на С+ но выполнен не особо. нужно код преобразовать на дельфи
Код:
#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, 23.05.2010 в 20:06. |