Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Нахождение обратной матрицы методом расширенной матрицы
Код: Выделить весь код
//Нахождение обратной матрицы методом расширенной матрицы
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
#pragma hdrstop
#pragma argsused

const int dim1=20;
const int dim2=40;
float**a,**a1;
int n;
//vvod matrici
void MatrIn()
{
   int i,
       j;

   for(i = 0; i < n; i++){
     for(j = 0; j < n; j++){
        cout<<"vvedite cherez probel elementi metrici[ "<<i<<" ][ "<<j<<" ] = ";
        cin>>a[i][j];
      }
    }
}
//obraschenie matrici
void invMatr(float e)
{
   int i,
       j,
       k,
       n1;
    float f,
          f1;
    float matr[20][40];
    n1 = 2 * n;

    for(int i = 0; i < n; i++)
      for(j = 0; j < n1; j++)
         if(j < n)
           matr[i][j] = a[i][j];
         else if(j == (n + 1))
           matr[i][j] = 1;
         else
           matr[i][j] = 0;

    for(int i=0;i<n;i++){
       k = i;
       f1 = matr[i][j];
       while(fabs(f1) < e){
          if(k < n){
            k++;
            f1 = matr[k][i];
           }
          else{
            cout<<"matrica virojdena";
            getch();
           }
       for(j = i; j < n1; j++){
         f = matr[k][j];
         matr[k][j] = matr[i][j];
         matr[i][j] = f / f1;
       }

       for(k = 0; k < n; k++)
         if(k != i)
           for(j = n1 - 1; j >= i; j--)
              matr[k][j] = matr[k][j] - matr[i][j] * matr[k][j];
     }

       for(i = 0; i < n; i++)
          for(j = 0; j < n; j++)
            a[i][j] = matr[i][j + n];
  }
}
//vivod obratnoy matrici
void MatrOut()
{
   int i,
       j;

   for(i = 0; i < n; i++)
      for(j = 0; j < n; j++)
         cout<<a1[i][j]<<" ";
}
//glavnaya proga
void main()
{
   int e;

   cout<<"vvedite razm matrici: ";
   cin>>n;

   a = new float* [n];

   MatrIn();

   a1 = new float* [n];

   for(int i = 0; i < n; i++)
      a1[i] = new float[n];

   cout<<"vvedite tochnost' vichisleniya: ";
   cin>>e;
   invMatr(e);
   cout<<"obratnaya matrica: ";
   MatrOut();
   getch();
}
//--------------------------------------------------------------------------

Код: Выделить весь код
Вопрос, что делает эта строка кода:
a=new float*[n];  // эта строка
MatrIn();
a1=new float*[n];  // И эта строка
А так же, что это? Указатель на указатель?
Код: Выделить весь код
float **a,**a1;
Ошибка появляется после ввода данных, на этапе
Код: Выделить весь код
a=new float*[n];  // эта строка
А так всё комплируется и до этой строки работает.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 15:39, 22-06-2008 | #11