Уважаемые программисты, помогите, пожалуйста, новичку разобраться!
У меня есть 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"
Весь код задачи
Код:
//---------------------------------------------------------------------------
#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();
}