Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание массивов из StringGrid.(задача о рюкзаке), перенести данные из столбца в массив 
:(
    Опции темы
trustno1s
Дата 12.4.2015, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 12.4.2015

Репутация: нет
Всего: нет



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



PM MAIL   Вверх
xvr
Дата 13.4.2015, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(trustno1s @  12.4.2015,  16:21 Найти цитируемый пост)
Ошибка: EconvertError:..."is not a valid integer value".

В StrToInt попало не число. Скорее всего там пустая строка. Так как это exception (в стиле С++), а у вас есть блок try/catch, то он нормально должен отработать эту ситуацию - просто продолжите выполнение программы (F9). Хотя продолжать придется много (до 100 раз)  smile 
Проще запустить программу без отладки (не помню, можно ли это сделать в IDE), или отключить перехват С++ exception'ов в настройках дебагера в IDE

PM MAIL   Вверх
rudolfninja
Дата 13.4.2015, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: нет
Всего: 6



Как вариант, перед вызовом функции StrToInt проверить строку на пустую:

Код

v[i] = StringGrid1->Cells[0][i].IsEmpty() ? 0 : StrToInt(StringGrid1->Cells[0][i]);
p[i] = StringGrid1->Cells[1][i].IsEmpty() ? 0 : StrToInt(StringGrid1->Cells[1][i]);

PM MAIL Skype   Вверх
trustno1s
Дата 14.4.2015, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 12.4.2015

Репутация: нет
Всего: нет



xvr, большое спасибо, что объяснили суть!


rudolfninja, спасибо Вам за способ!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0443 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.