Уважаемые программисты, помогите, пожалуйста, новичку разобраться! У меня есть StringGrid, пользователь вбивает туда данные, данные из первого столбца записываются в массив v[i] , из второго в p[i]. Массивы типа int. Проблема в том, что компонент StringGrid содержит двумерные массивы, я пытаюсь превратить в одномерный, ничего не получается
| Код | { // array v , array p
int i; for(i=0; i<100; i++) { try{ v[i] = StrToInt(StringGrid1->Cells[0][i]); p[i] = StrToInt(StringGrid1->Cells[1][i]); } catch ( ... ){ v[i] = 0; p[i] = 0; } }
|
Ошибка: EconvertError:..."is not a valid integer value".
Массивы используются для расчета в строчке 78
| Код | //---------------------------------------------------------------------------
#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]; // computing added subject int i, j; int aux; int v[100]; // weight int p[100]; // price int n=0; // quantity int W; // knapsackWeight //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Form1->Memo2->Clear(); Form1->Memo4->Clear(); Form1->Memo3->Clear(); } //---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString buffer,st;
{ // put Knapsack Weight
st = Edit3->Text; W = StrToInt(st); } { // array v , array p
int i; for(i=0; i<100; i++) { try{ v[i] = StrToInt(StringGrid1->Cells[0][i]); p[i] = StrToInt(StringGrid1->Cells[1][i]); } catch ( ... ){ v[i] = 0; p[i] = 0; } } } } //---------------------------------------------------------------------------
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) // dynamic programming for (j = 0; j < n; ++j) if ((v[j] <= i) && (a[i] < a[i - v[j]] + p[j])) { a[i] = a[i - v[j]] + p[j]; last_added[i] = j; }
aux = W;
while ((aux > 0) && (last_added[aux] != -1)) // { Form1->Memo2->Lines->Add(last_added[aux] + 1); // subjects numbers Form1->Memo3->Lines->Add(p[last_added[aux]]); // value for each number Form1->Memo4->Lines->Add(v[last_added[aux]]); // weight for each number
aux -= v[last_added[aux]]; } Form1->Edit4->Text=(aux - v[last_added[aux]]); // free place Edit5->Text=(a[W]); // total value } //---------------------------------------------------------------------------
void __fastcall TForm1::N1Click(TObject *Sender) { Form2->Show(); } //---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender) { Form1->Close(); }
|
|