IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Уравнивани реакции.проблема с чтением данных, С++
Tribunal
сообщение 4.11.2007 11:02
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


Здравствуйте.
Мне нужно написать программу , которая будет уравнивать химическую реакцию.
Соответственно нужно прийти к СЛАУ, по которой и находить коэффициенты реакции.
В этом и состоит сейчас моя проблема.Написанный мною код в C++Builder 6 выдаёт ошибку о типе integer.
Вот собственно код.Надеюсь на какие-то идеи и вашу помощь.

На форме Edit'ы для введения элементов веществ и их индексов с расчетом на 3 вещества в левой части и 4- в правой.А так же-StringGrid для выведения полученной матрицы.

{

char *element[10][2];
int index[10][7];

//==x1==//
int x=0;
int i=0;
AnsiString a;

a=Edit1->Text;
*element[i]=Edit1->Text.c_str();
index[i][x]=StrToInt(Edit2->Text);


a=Edit3->Text;

for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{ index[j][x]=StrToInt(Edit4->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=StrToInt(Edit4->Text);
};
}

a=Edit5->Text;
for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{
index[j][x]=StrToInt(Edit6->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=StrToInt(Edit6->Text);
};
}
//==x1==//

//==x2==//
x++;
a=Edit7->Text;
for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{ index[j][x]=StrToInt(Edit8->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=StrToInt(Edit8->Text);
};
}

a=Edit9->Text;
for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{
index[j][x]=StrToInt(Edit10->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=StrToInt(Edit10->Text);
};
}

a=Edit11->Text;
for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{ index[j][x]=StrToInt(Edit12->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=StrToInt(Edit12->Text);
};
}
//==x2==//

//==x3==//
x++;
a=Edit15->Text;
for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{ index[j][x]=StrToInt(Edit16->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=StrToInt(Edit16->Text);
};
}

a=Edit17->Text;
for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{
index[j][x]=StrToInt(Edit18->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=StrToInt(Edit18->Text);
};
}

a=Edit19->Text;
for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{ index[j][x]=StrToInt(Edit20->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=StrToInt(Edit20->Text);
};
}
//==x3==//

//==x4==//
x++;
a=Edit22->Text;
for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{ index[j][x]=-StrToInt(Edit23->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=-StrToInt(Edit23->Text);
};
}

a=Edit24->Text;
for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{
index[j][x]=-StrToInt(Edit25->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=-StrToInt(Edit25->Text);
};
}

a=Edit26->Text;
for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{ index[j][x]=-StrToInt(Edit27->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=-StrToInt(Edit27->Text);
};
}
//==x4==//

//==x5==//
x++;
a=Edit28->Text;
for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{ index[j][x]=-StrToInt(Edit29->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=-StrToInt(Edit29->Text);
};
}

a=Edit30->Text;
for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{
index[j][x]=-StrToInt(Edit31->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=-StrToInt(Edit31->Text);
};
}

a=Edit32->Text;
for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{ index[j][x]=-StrToInt(Edit33->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=-StrToInt(Edit33->Text);
};
}
//==x5==//

//==x6==//
x++;
a=Edit34->Text;
for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{ index[j][x]=-StrToInt(Edit35->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=-StrToInt(Edit35->Text);
};
}

a=Edit36->Text;
for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{
index[j][x]=-StrToInt(Edit37->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=-StrToInt(Edit37->Text);
};
}

a=Edit38->Text;
for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{ index[j][x]=-StrToInt(Edit39->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=-StrToInt(Edit39->Text);
};
}
//==x6==//

//==x7==//
x++;
a=Edit40->Text;
for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{ index[j][x]=-StrToInt(Edit41->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=-StrToInt(Edit41->Text);
};
}

a=Edit42->Text;
for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{
index[j][x]=-StrToInt(Edit43->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=-StrToInt(Edit43->Text);
};
}

a=Edit44->Text;
for (int j=0;j<10;j++)
{ if (a.c_str()==*element[j])
{ index[j][x]=-StrToInt(Edit45->Text);
}
else
{ i++;
*element[i]=a.c_str();
index[i][x]=-StrToInt(Edit45->Text);
};
}
//==x7==//

for (int i=0;i<10;i++)
{ for (int j=0;j<7;j++)
{ StringGrid1->Cells[j][i]=IntToStr(index[i][j]);
}
}
}


Сообщение отредактировано: Tribunal - 4.11.2007 11:08


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Tribunal
сообщение 18.11.2007 10:45
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


извините....пожалуйста! помогите сделать,чтобы этот код работал с моими матрицами...
у меня никак не получается=((
заранее спасибо!
Код
static const int maxsvditerations = 30;
double extsign(double a, double b);
double mymax(double a, double b);
double pythag(double a, double b);

void svdsolvefundamental([b]ap::real_2d_array a[/b],
     int m,
     int n,
    [b] ap::real_2d_array& solutions[/b],
     int& dimension)
{
    int nm;
    int minmn;

     ////........

    ap::real_1d_array rv1;
    ap::real_1d_array w;
    ap::real_2d_array v;
    bool flag;
    double epsilon;

    rv1.setbounds(1, n);
    w.setbounds(1, n);
    v.setbounds(1, n, 1, n);
    if( m<n )
    {
        minmn = m;
    }
    else
    {
        minmn = n;
    }
    g = 0.0;
    vscale = 0.0;
    anorm = 0.0;
    for(i = 1; i <= n; i++)
    {
        l = i+1;
        rv1(i) = vscale*g;
        g = 0;
        s = 0;
        vscale = 0;
        if( i<=m )
        {
            for(k = i; k <= m; k++)
            {
                vscale = vscale+fabs(a(k,i));
            }


      /// .....



    epsilon = epsilon*n*ap::machineepsilon;
    dimension = 0;
    for(i = 1; i <= n; i++)
    {
        if( fabs(w(i))<=epsilon )
        {
            dimension = dimension+1;
        }
    }
    solutions.setbounds(1, n, 0, dimension);
    for(i = 1; i <= n; i++)
    {
        solutions(i,0) = 0;
        for(j = 1; j <= m; j++)
        {
            solutions(i,0) = solutions(i,0)+a(j,i)*a(j,n+1);
        }
    }
    k = 1;
    for(j = 1; j <= n; j++)
    {
        if( fabs(w(j))>epsilon )
        {
            for(i = 1; i <= n; i++)
            {
                v(i,j) = v(i,j)/w(j);
            }
        }
        else
        {
            for(i = 1; i <= n; i++)
            {
                solutions(i,k) = v(i,j);
            }
            k = k+1;
        }
    }
    for(i = 1; i <= n; i++)
    {
        a(1,i) = 0;
        for(j = 1; j <= n; j++)
        {
            if( fabs(w(j))>epsilon )
            {
                a(1,i) = a(1,i)+v(i,j)*solutions(j,0);
            }
        }
    }
    for(i = 1; i <= n; i++)
    {
        solutions(i,0) = a(1,i);
    }
}


вот файлы этого алгоритма
Прикрепленный файл  ap.rar ( 4.59 килобайт ) Кол-во скачиваний: 268

Прикрепленный файл  svdsolveunit.rar ( 3.48 килобайт ) Кол-во скачиваний: 278


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Tribunal   Уравнивани реакции.проблема с чтением данных   4.11.2007 11:02
volvo   Можно уточнить, где именно он выдает ошибку? Строк...   4.11.2007 11:18
Tribunal   строку указать не могу. ошибка выдаётся,когда я на...   4.11.2007 16:11
volvo   Пример входных данных тогда уже тоже приведи... (л...   4.11.2007 17:53
Tribunal   вот пример входных данных при этом выдаёт ошибку...   5.11.2007 1:43
Tribunal   а...и подскажите,пожалуйста.. мне нужно найти коэф...   5.11.2007 2:40
volvo   Обрати внимание, что показывает CodeGuard: То ес...   5.11.2007 13:59
Tribunal   я сделала вот так(запоминание текущего размера мас...   5.11.2007 15:06
volvo   Это должно было что-то изменить? Ты что, теперь ув...   5.11.2007 19:14
Tribunal   в описании массивов делать цифры больше тоже не по...   6.11.2007 2:49
volvo   У тебя немного неверна структура программы... Я не...   6.11.2007 12:48
Tribunal   спасибо.. правда как-то странно всё это сейчас про...   7.11.2007 14:59
volvo   а что за FindComponent в 10 строк? :blink: Смотри,...   7.11.2007 16:40
Tribunal   ааа ужас какой :lol: классно!работает)) спас...   8.11.2007 2:18
volvo   Я бы попробовал метод Холецкого: Решение систем (э...   8.11.2007 2:37
Tribunal   вот переделала код(метод Холецкого) под свою задач...   12.11.2007 12:18
volvo   Естественно... Ты хочешь int поделить на указатель...   12.11.2007 16:21
Tribunal   хмм странно теперь ругается на деление на ноль в э...   12.11.2007 16:37
volvo   Это тебе кто сказал? Там БЫЛ не ноль, когда заполн...   12.11.2007 17:04
Tribunal   эээ...и что делать? :unsure:   12.11.2007 17:43
volvo   Скорее всего, твоя система имеет не единственное р...   12.11.2007 18:48
Tribunal   а если система имеет решение, но при этом нужно вз...   13.11.2007 1:20
Tribunal   извините....пожалуйста! помогите сделать,чтобы...   18.11.2007 10:45
volvo   По-моему, было бы проще добавить в код пару строк,...   18.11.2007 11:33
-Tribunal-   вот например для уравнивания KMnO_4+KNO_2+H_2SO_4-...   18.11.2007 13:23


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 9:56
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"