Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2015, 18:55   #1
yurez_orsha
 
Регистрация: 10.01.2014
Сообщений: 6
По умолчанию Метод простых итераций для решения СЛАУ (консоль -> форма)

Доброго времени суток. Есть код реализации метода простых итераций для решения СЛАУ в консоли, нужно сделать так, чтобы матрица А заполнялась из одного Стринггрида, B из второго, n бралось из cspinedita, ну и eps из edita.Вот код:
Цитата:
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include <conio.h>
#include <math.h>


const n = 5;

float A[n][n] = {
{ 79.2, 0, 35, 19.8, 24 },
{ 39.6, 85, 0, 19.8, 25 },
{ 19.8, -15, 45, 0, 10 },
{ 49.5, 18, 20, 89.1, 0 },
{ 9.9, 15, 20,-49.5, 95 },
};

float B[n] = { 86, 55, 77, 5, -64};

float X[30][n] = {0};
float TEST[n];
float summ;
float eps;
int k = 0;


bool ExitFunc(float eps)
{
if(k == 0) return true;
for(int i=0; i<n; i++){
if( fabs(X[k][i]-X[k-1][i]) > eps )
return true;
}return false;
}

void main(void)
{
printf("Enter eps:");
scanf("%f",&eps);
do
{
for(int i=0; i<n; i++)
{
summ = 0;
for(int j=0; j<n; j++)
if(i!=j)
summ += A[i][j] * X[k][j];
X[k+1][i] = (1/A[i][i]) * (B[i] - summ);
}
k++;
}while(ExitFunc(eps));

//Проверка
printf("\nResult:\n");
for(int j=0; j<n; j++)
printf("%4.8f ",X[k][j]);

printf("\nTest:\n");
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
TEST[i] +=(A[i][j] * X[k][j]);
printf("%4.8f ", TEST[i]);
}

printf("\nIterations:\n%i",k);
getch();
}
Вот, что получилось, но выводит ошибки:

Цитата:
int n;
n=StrToInt(CSpinEdit4->Value);
double X[30][n]={0};//тут: constant expression required
int k = 0;
bool ExitFunc(float eps);
bool ExitFunc(float eps){// и тут: declaration syntax error
if(k == 0){ return true;}
for(int i=0; i<n; i++){
if( fabs(X[k][i]-X[k-1][i]) > eps){
return true;}
}return false;
}
int i,j;
double** A;
double* B;
float summ;
float eps;
Edit1->Text="0,0001";
B=new double[n];
//float TEST[n];
for(int i=0;i<n;i++){
A[i]=new double[n];
}
for(int i=0; i<n ;i++){
for (int j=0;j<n;j++){
A[i][j]=StrToFloat(StringGrid8->Cells[i][j]);
B[i]=StrToFloat(StringGrid9->Cells[0][j]);
}
}

eps=StrToFloat(Edit1->Text);

do
{
for(int i=0; i<n; i++)
{
summ = 0;
for(int j=0; j<n; j++)
if(i!=j)
summ += A[i][j] * X[k][j];
X[k+1][i] = (1/A[i][i]) * (B[i] - summ);
Memo4->Lines->Add(FloatToStr(k+1)+"-ÿ èòåðàöèÿ:");
Memo4->Lines->Add(X[k+1][i]);

}
k++;
}while(ExitFunc(eps));

for(int j=0; j<n; j++){
StringGrid10->Cells[0][j]=FloatToStr(X[k][j]);}
Помогите пожалуйста.Буду благодарен.
yurez_orsha вне форума Ответить с цитированием
Старый 20.04.2015, 11:59   #2
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Код:
double X[30][n]={0};//тут: constant expression required
Правильно ругается, динамические массивы так не объявляются.

Код:
bool ExitFunc(float eps){// и тут: declaration syntax error
Компилятор не знает, что это за массив такой X[k][i], следствие предыдущей ошибки.
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод Ричардсона для решения СЛАУ антон9319 Помощь студентам 0 09.12.2011 20:31
исследовать метод квадратных корней и метод Холецкого для решения СЛАУ Vит@x@ Помощь студентам 0 22.11.2011 10:47
мой метод простых итераций для СЛАУ nikozavr Общие вопросы C/C++ 0 05.06.2011 15:21
Решение СЛАУ (метод простых итераций) XeN0N Помощь студентам 2 15.02.2009 21:33
текст программы для решения нелинейного уравнения методом простых итераций Dyst Помощь студентам 2 14.05.2008 22:00