Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите отладить прогу, Решение систем линейных уравнений 
:(
    Опции темы
ministr777
Дата 27.12.2007, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Написал прогу решение систем линейных алгебоаических уравнений методом Халецкого. Алгоритм вроде правильный, но есть проблемы в написании кода. Помогите отладить.... Ниже приведен листинг:

Код

class slu
{
    double *a, *b, *x;
    int size, key;
public:
    // Конструктор
    slu (){    
        size=0;
        a=0;

        b=0;
        x=0;
    }
    // Деструктор
    ~slu(){
        if (size!=0){
            delete [] a;
            delete [] x;
        }
    }
    void input(int M); // Ввод системы
    void syst(); // Поиск решения
    void print_x();  // Вывод корней системы
};



Реализация методов:
Код


#include "stdafx.h"
#include <iostream>
#include "slu.h"
#include <math.h>
using namespace std;

void slu::input(int M)
{ 
    int i,j,k,v, j_max;
    double d,r, max;
    size=M;
    double *b;
    //Ввод правой части
    b = new double[M];
    for(i=0;i<M;i++){ 
        cout << "b [ " << i << " ] : ";
        cin >> b [i];
    }

    double *a;
    //Ввод левой части 
    a = new double [M*(M+1)];
    for(i=0;i<M;i++){
        for(j=0;j<M;j++){
            cout << "a [" << i << "]  [ "  << j << "] : ";
            cin >> a[i*(M+1)+j];
        }
    }

    //Формирование матрицы,содеражей коэффициенты системы
    for(i=0;i<M;i++)
        a[i*(M+1)+M]=b[i];
    delete [] b;
}


void slu::syst()
{
    int i,j,k,v,j_max,M;
    double d,r,max;
    M=size;
    key=1;

    for (i=0; i<=M; i++){
        max=a[i*(M+1)+i];
        j_max=i;
        for (j=0; j<=M; j++){
            if (fabs(a[j*(M+1)+i])>fabs(max)){
                max=a[j*(M+1)+i];
                j_max=j;
            }
        }
    }

    if (j_max!=i){
        for (j=0; j<M; j++){
            r=a[j_max*(M+1)+j];
            a[j_max*(M+1)+j]=a[i*(M+1)+j];
            a[i*(M+1)+j]=r;
        }
    }

    for(i=0; i<M; i++){
        if (a[i*(M+1)+i]==0){
        key=0;
        return;
        }
    }

    for(i=0;i<M;i++){
        for(j=i+1;j<M;j++){   
            v=0;
            d=a[i*(M+1)+0]/a[i*(M+1)+j];
            for(k=1;k<M+1;k++){
                if (a[i*(M+1)+k]!=d*a[j*(M+1)+k]){
                    v=1;
                    key=key*v;
                }
            }
        }
    }
    if (key==0){
        return;
    }

    double *bb;
    bb = new double [M*M];
    double *c;
    c = new double [M*M];
    double s;
  //Вычисление 1-ого столбца матрицы b(по формуле(3)1 части)
    for ( i=0; i<M; i++ )
    bb[i*M+0] = a[i*(M+1)+0];
  //Формирование 1-ой строки матрицы c(по формуле(4) 1 части)
    for ( i=0; i<=M; i++ )
        c[0*M+i] = a[0*(M+1)+i] / bb [0*M+0];
  //Формирование остальных столбцов матрицы b и строк матрицы c (по формулам (3) и (4) 2 части) 
    for ( j = 1; j <M;j++)
    {
        for ( i=j; i<M; i++ )
        { 
            s = 0;
            for ( k=0;k<=j+(-1); k++)
                s = s + bb[i*M+k]*c[k*M+j];
            bb[i*M+j] = a[i*(M+1)+j]- s;
        }     ;
        for ( i=j; i<=M; i++ )
        {
            s = 0;
            for ( k =0; k<=j +(-1); k ++)
                s = s + bb[j*M+k] * c[k*M+i];
            c[j*M+i] =  ( a[j*(M+1)+i] +(-s) ) / bb[j*M+j];
        }
  }; 
  
//Вычисление вектора y (по формуле(6))
  double *y;
  y = new double [M];
  

for (i=0;i<M;i++)
  {
   s=0;
   for(k=0;k<=i-1;k++)
         s=s+bb[i*M+k]*y[k];
   y[i]=1/bb[i*M+i]*(a[i*(M+1)+M]-s);
  }
//Вычисление вектора x (по формуле (7))
double *x;
x = new double [M];


for (i=M-1; i>=0 ;i--)
  { s=0;
    for (k=i+1;k<M;k++)
      s=s+c[i*M+k]*x[k];
    x[i]=y[i]-s;
  }
}

void slu::print_x()
//Вывод решения системы
{
    if (key==0){
        cout << "Net resh";
    }
    else{
        int i,M;
        M=size;
        for(i=0;i<M;i++)
            cout <<"x [ " << i << " ] : " << x[i]<< endl;
    }
}


Головная программа:
Код

// SLU.cpp
//

#include "stdafx.h"
#include "slu.h"
#include <conio.h>
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    int M;
    cout << "Input size of system: "; cin >> M;
    slu n;

    n.input(M);
    cout << "\n";
    getch();
    n.syst();
    cout << "\n";
    n.print_x();
    getch();
    return 0;
}

PM MAIL   Вверх
archimed7592
Дата 28.12.2007, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

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



ministr777, "помогите отладить" и "отладьте за меня" - это разные вещи.
Если хочешь, чтобы помогли, то нужно для начала описать симптомы. Во-первых, указать входные данные, на которых программа работает некорректно, во-вторых, указать в чём на твой взгляд заключается эта самая некорректность, ну и, в-третьих, рассказать в чём загвоздка - почему не получается отладить?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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