Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Нахождение обратной матрицы методом Гаусса и рассширенной матрицы (http://forum.oszone.net/showthread.php?t=109721)

D.Y. 22-06-2008 01:29 832091

Нахождение обратной матрицы методом Гаусса и рассширенной матрицы
 
Мне срочняк надо прогу нахождения обратной матрицы методом гаусса и при помощи расширенной матрицы я написал но она требует доработки а сдавать в среду
если у кого есть напишите пожалуйста заранее благодарен (иначе сессия продлится до сентября)

Admiral 22-06-2008 13:16 832246

Цитата:

Цитата D.Y.
я написал но она требует доработки »

Ну и где код в теме?
Математика процесса
определитель матрицы методом Гаусса
Обратная матрица методом Гаусса

Drongo 22-06-2008 13:20 832249

D.Y.,
Цитата:

Цитата D.Y.
я написал но она требует доработки »

А где исходники, которые требуют доработки?
Метод Гаусса, ещё смотри тут (не всё конечно, но про Гаусса есть.)

D.Y. 22-06-2008 13:22 832250

Код:


//вот метод гаусса
 #include <vcl.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
#pragma hdrstop
#pragma argsused
//using namespace::std;
const int dim=20;
int InvMatrG(int n, float(*a)[dim], float e,float d)
{int i,j,k;
float y,w;
float b[dim],c[dim];
int z[dim];
d=1;
for(j=0;j<n;j++)
x[j]=j;
for (i=0;i<n;i++)
{k=i;
y=a[i][i];
if (fabs(w)>fabs(y))
{k=j;
y=w;}}
d*=y;
if (fabs(y)<e)
{cout<<"matrica virojdena";
getch();
}
for (j=0;j<n;j++){
        c[j]=a[j][k];
        a[j][k]=a[j][i];
        a[j][i]=-c[j]/y;
        a[i][j]=a[i][j]/y;
        b[j]=a[i][j];}
a[i][j]=1/y;
j=z[i];
z[i]=z[k];
z[k]=j;
for (k=0;k<n;k++)
if(k!=i)
for(j=0;j<n;j++)
if (j!=i)
a[k][i]-=b[j]*c[k];}
for (i=0;i<n;i++){
        k=z[i];
        if (k!=i){
                  for (j=0;j<n;j++)
                  {w=a[i][j];
                  a[i][j]=a[k][j];
                  a[k][j]=w;}
                  j=z[i];
                  z[i]=z[k];
                  d=-d;
        }}}
        int MatrIn (int n,float(*a)[dim]){
                  int i,j;
                  for(i=0;i<n;i++)
                            for (j=0;j<n;j++)
                                      cin>>a[i][j];}
        int MatrOut(intn,float(*a)[dim]){
                  int i,j;
                  for (i=0;i<n;i++)
                            for (j=0;j<n;j++)
                                      cout<<a[i][j]<<" ";}
        void main()
        {int n;
        float matr[dim][dim];
        float d;
        cout<<"\n vvedite razmernost'";
        cin>>n;
        cout<<"\n vvedite elemeti";
        MatrIn(n,(*matr)[n]);
        cout"\n tochnost'";
        cin>>e;
        InvMatrG(n,matr[][n],e,d);
        cout"\n obratnaya matrica";
        MatrOut(n,matr[][n]);
        getch();
        }

 
 
 
 
 
 //а вот
 
//Нахождение обратной матрицы методом расширенной матрицы

#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
int MatrIn()
{int i,j;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
cin>>a[i][j];
}
//obraschenie matrici
int 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";
                  gatch();
        }
        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
int MatrOut()
{
        int i,j;
        for (i=0;i<n;i++)
for (j=0;j<n;j++)
cout<<a1[i][j]<<" ";
}
//glavnaya proga
void main()
{
        float e;
        cout<<"vvedite razm matrici";
        cin>>n;
        cout<<"vvedite cherez probel elementi metrici";
        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();
}


Drongo 22-06-2008 13:29 832256

D.Y., Выдели код и оформи тегом [code], на панельке инструментов, над полем ввода есть изображение решётки - # Отредактируй своё сообщение, Через ссылку Редактировать выдели весть текст и щёлкни по ней или вручную пропиши сначала перед кодом [code] потом в конце [/code] Теги

Ты хоть этот код сам писал? Мне кажется не сам. Что именно не получается там? Где искать ошибку? Я вот только что загрузил в комплятор, 10 ошибок и 3 предупреждения

D.Y. 22-06-2008 13:56 832270

использовал книгу "решение инженерных задач при помощи С++"
у меня не находило библиотеку "vcl.h" когда я ее комментировал
выбивало ошибки на счет директив препроцессора "argsused" & "hdrstop"
я их тоже комментировал но выбило ошибку что функции ввода и вывода должны возвращать значения

Drongo 22-06-2008 13:57 832272

Цитата:

Цитата D.Y.
z[i]=z[k];
d=-d;
}}}
int MatrIn (int n,float(*a)[dim]){ »

Одну скобку } нужно убрать точно.

Цитата:

Цитата D.Y.
for(j=0;j<n;j++)
x[j]=j; »

Непонятное присвоение?

D.Y. 22-06-2008 14:05 832276

У меня Visual Studio 2008 вот что выдает
Курсач.cpp
.\Курсач.cpp(7) : fatal error C1083: Cannot open include file: 'vcl.h': No such file or directory
Build log was saved at "file://c:\Documents and Settings\Женя\Мои документы\Visual Studio 2008\Projects\Курсач\Курсач\Debug\BuildLog.htm"
Курсач - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Drongo 22-06-2008 14:17 832281

D.Y., А у меня Borland C++ Builder 6.0



D.Y., В этой функции
Код:

int InvMatrG(int n, float(*a)[dim], float e, float d)
подразумевается возвращение результата, но она ничего не возвращает!

Та же функция, что и выше.
Код:

for(j = 0; j < n; j++)  // нехватает скобки {
    x[j] = j;

В общем, я точно уверен, что вы не писали эту программу, там такие ошибки... Что вряд ли бы вы не заметили.

В общем, что смог и знаю, подправил, в остальном я не компетентен.
метод гаусса

Код:

#include <vcl.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
#pragma hdrstop
#pragma argsused
//using namespace::std;
const int dim = 20;
void InvMatrG(int n, float(*a)[dim], float e, float d)
{
  int i,
      j,
      k,
      x;
  float y,
        w;
  float b[dim], c[dim];
  int z[dim];
  d = 1;

  for(j = 0; j < n; j++){
    x[j] = j;
    for (i = 0; i < n; i++){
      k = i;
      y = a[i][i];
      if(fabs(w) > fabs(y)){
        k = j;
        y = w;
      }
  }
    d *= y;
    if(fabs(y) < e){
      cout<<"matrica virojdena";
      getch();
    }

    for(j = 0; j < n; j++){
      c[j] = a[j][k];
      a[j][k] = a[j][i];
      a[j][i] -= c[j]/y;
      a[i][j] = a[i][j] / y;
      b[j] = a[i][j];
    }

    a[i][j] = 1 / y;
    j = z[i];
    z[i] = z[k];
    z[k] = j;
    for(k = 0; k < n; k++)
      if(k != i)
        for(j = 0; j < n; j++)
          if(j != i)
            a[k][i] = -b[j] * c[k];
  }

    for(i = 0; i < n; i++){
      k = z[i];
      if(k != i){
        for(j = 0; j < n; j++){
          w = a[i][j];
          a[i][j] = a[k][j];
          a[k][j] = w;
        }
      j = z[i];
      z[i] = z[k];
      d = -d;
    }
  }
}
//----------------------------------------
void MatrIn (int n,float(*a)[dim])
{
  int i,
      j;

  for(i = 0; i < n; i++)
    for(j = 0; j < n; j++)
      cin>>a[i][j];
}
//-----------------------------------------------------
void MatrOut(int n,float(*a)[dim])
{
  int i,
      j;

  for(i = 0; i < n; i++)
    for(j = 0; j < n; j++)
        cout<<a[i][j]<<" ";


}
void main()
{
  int n, e;
  float matr[dim][dim];
  float d;

  cout<<"\n vvedite razmernost'";
  cin>>n;
  cout<<"\n vvedite elemeti";

  MatrIn(n,(*matr)[n]);  // Проверьте синтаксис и правильность принимаемых параметров
  cout<<"\n tochnost'";
  cin>>e;
  InvMatrG(n, matr[][n], e, d); // Проверьте синтаксис и правильность принимаемых параметров
  cout<<"\n obratnaya matrica";
  MatrOut(n, matr[][n]); // Проверьте синтаксис и правильность принимаемых параметров

  getch();
}


D.Y. 22-06-2008 14:51 832306

Спасибо и за это!

Drongo 22-06-2008 15:39 832323

Нахождение обратной матрицы методом расширенной матрицы
Код:

//Нахождение обратной матрицы методом расширенной матрицы
#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];  // эта строка
А так всё комплируется и до этой строки работает.

D.Y. 22-06-2008 16:04 832328

Вопрос, что делает эта строка кода:
a=new float*[n]; // эта строка
MatrIn();
a1=new float*[n]; // И эта строка
это создается новая матрица типу float

Drongo 22-06-2008 17:32 832385

D.Y.,
Цитата:

Цитата D.Y.
это создается новая матрица типу float »

Динамическое выделение
Код:

float *array = new float[size];

Drongo 22-06-2008 18:01 832407

D.Y., Тогда, что делает эта строка в главной функции main()?
Код:

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

У меня просто у самого знаний нехватает.

Эти строки не используются в программе
Код:

const int dim1=20;
const int dim2=40;

В общем, ошибка где-то здесь:
Код:

...
  a1 = new float* [n];

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


Admiral 22-06-2008 22:36 832580

D.Y., в первом посте неплохо бы было указать сразу тему с другого форума есть рабочая прога(содрана с книги) не могу понять под какую среду писалась так сказать доложить о проделанных попытках по преодолении сложности, здесь бы дублей по догадкам не было.
А книга именно так называется, может всё же полное название Языки Си С++ для решения инженерных и экономических задач?

Цитата:

Цитата D.Y.
if (j!=i)
a[k][i]-=b[j]*c[k];}
for (i=0;i<n;i++){ »

Выделенная скобка закрывает функцию int InvMatrG(int n, float(*a)[dim], float e,float d) всё что дальше в кодовом космосе находится.

Drongo 22-06-2008 23:22 832604

Admiral,
оффтоп
Цитата:

Цитата Admiral
бы было указать сразу тему с другого форума »

А как вы его нашли там?

D.Y.,
оффтоп
Цитата:

Цитата D.Y.
D.Y., так поставь себе задачу: выбрось этот жуткий, кривой код и напиши свой, красивый и работающий

и
Цитата:

Цитата D.Y.
Придется так и сделать но я хотел не напрягаясь содрать:)

Не обессудьте, но таки придётся написать самому. Хоть бы сказали, что вам его подправили здесь на OSZone, а то: "я подправил." Всё-таки первое впечатление
Цитата:

Цитата Drongo
В общем, я точно уверен, что вы не писали эту программу »

правильное.

Admiral 23-06-2008 02:59 832670

Drongo, уточнял книгу и главу в которой сабж и вышел на ту тему.
http://www.google.com/search?hl=ru&c...1%83%D0%BA&lr=

Drongo 23-06-2008 11:47 832830

Код:

...
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];
      }
    }
}
...

Как я понял в первом куске кода выполняется присвоение массиву размером n * n если n равна 2, то получается 4, в то время, как в куске кода ниже, память выделяется только под n = 2
Код:

...
cin>>n;

  a = new float* [n];

  MatrIn();

  a1 = new float* [n];

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

Хотя если честно я не знаю, проверил этот способ, но всё равно ошибка.

D.Y. 23-06-2008 15:09 832949

Код:

а не моглибы вы прокомментировать(что в какой строке делается) программу я взял у паренька но он кудато пропал и я не пойму что в ней творится особенно в конце
было задание решение СЛАУ методом Крамера
#include <iostream.h> 
#include <stdio.h>
#include <math.h>
double DET (unsigned int columns);
bool PROVCOL(unsigned int num, char colNum);
unsigned int Column1(unsigned int num, char colNum);
unsigned int Column0(unsigned int num, char colNum);
double **Matrix;
int n;
main()
{
    int i, j;
    double mainDET;
    cout<<"Vvedite kolichestvo uravneniy "<<endl;
    cin>>n;
    while (n > 10 || n < 1)
    {
          cout<<"Vu ne mogete vvesti bol'she 10 ili men'she 1 uravneniya, vvedite esche raz ";
          cin>>n;
    }
   
    Matrix = (double**) new double[n];
    for (i=0; i<= n-1; i++)
    {Matrix[i] = new double[n+1];}
    for (i = 0; i <= n-1; i++)
              for (j = 0; j <= n; j++)
              {
                    cout<<"Vvedite element matricu s koordinatami ("<<i<<","<<j<<") ";
                    cin>>Matrix[i][j];
              }
    cout<<"Vasha matrica:\n";
    for (i = 0; i <= n-1; i++)
    {for (j = 0; j <= n; j++)
          cout<<Matrix[i][j]<<"\t";
          cout<<endl;
    }
    mainDET = DET(pow(2,n));
    if (mainDET == 0)
    {
                cout<<"Net resheniy!\n";
    }
    else
    {
      printf ("Korni sistemu:\n");
              for (i=0; i <= n-1; i++)
              printf ("%.3f ", -pow(-1,n+i)*DET(pow(2,i))/mainDET);
          printf ("\n");
    }
        cout<<"Detrmenant sistemu raven: "<<mainDET<<endl;
    for (i = 0; i <= (n-1); i++)
    delete Matrix[i];
    delete Matrix;
    cout<<"Vuchisleniya zakonchenu. Spasibo chto vubrali nas!\n";
    return 0;
}


double DET (unsigned int columns)
{double det = 0;
    int i, numCols = 0, lastFalse, cntr = 0;
    for (i=0; i<=n; i++)
    {
          if (PROVCOL(columns, i))
      numCols++;
      else lastFalse = i;
    }
    if ((n - numCols) == 0) det = Matrix[n-1][lastFalse];
    else
        for (i = 0; i <= n; i++)
              if (!PROVCOL(columns, i))
              {
                                        columns = Column1(columns, i);
                    det += pow(-1,(cntr))*Matrix[numCols-1][i]*DET(columns);
                    columns = Column0(columns, i);
                    cntr++;
              }
    return det;
}
bool PROVCOL(unsigned int num, char colNum)
{
    _asm
    {
          xor eax, eax;
          xor ebx, ebx;
          mov bl, colNum;
          bt num, ebx;
          jnc none;
          inc eax;
          none:
    }
}
unsigned int Column1(unsigned int num, char colNum)
{
    _asm
    {
          xor eax, eax;
          mov al, colNum;
          bts num, eax;
    }
    return num;
}
unsigned int Column0(unsigned int num, char colNum)
{
    _asm
    {
          xor eax, eax;
          mov al, colNum;
          btr num, eax;
    }
    return num;
}


Drongo 23-06-2008 16:56 833012

D.Y.,
в этих строках

Код:

bool PROVCOL(unsigned int num, char colNum)
{
    _asm
    {
          xor eax, eax;
          xor ebx, ebx;
          mov bl, colNum;
          bt num, ebx;
          jnc none;
          inc eax;
          none:
    }
}
unsigned int Column1(unsigned int num, char colNum)
{
    _asm
    {
          xor eax, eax;
          mov al, colNum;
          bts num, eax;
    }
    return num;
}
unsigned int Column0(unsigned int num, char colNum)
{
    _asm
    {
          xor eax, eax;
          mov al, colNum;
          btr num, eax;
    }
    return num;

Ассемблерная вставка _asm

В остальном, чужой код комментировать трудно. Простой ещё можно, а тут, поможет только автор.
Вот тут добавь строку cin>>i; иначе будет программа закрываться после выполнения
Код:

...
 delete Matrix;
    cout<<"Vuchisleniya zakonchenu. Spasibo chto vubrali nas!\n";
    cin>>i;
    return 0;
...


D.Y. 23-06-2008 21:07 833153

А как эта вставка будет выглядеть на С++???

Drongo 23-06-2008 21:46 833178

D.Y.,
Цитата:

Цитата D.Y.
А как эта вставка будет выглядеть на С++??? »

А вот так и будет, как она есть.
Код:

_asm
    {
          xor eax, eax;
          xor ebx, ebx;
          mov bl, colNum;
          bt num, ebx;
          jnc none;
          inc eax;
          none:
    }


Admiral 24-06-2008 19:24 833925

Drongo, наверное D.Y. хочет знать как ассемблерные вставки написать на языке более высокого уровня.
Примерное пояснение
Код:

    {
          xor eax, eax; //в данном случаи обнуляет eax
          xor ebx, ebx; //тоже самое но для ebx
          mov bl, colNum; //bl=colNum
          bt num, ebx; //считываем ebx бит из num в регистр флагов
          jnc none; //был перенос(ответ в флаге переноса)? Нет (флаг переноса 0), тогда переход на метку none
          inc eax; //увеличить eax
          none: //просто метка
    }

Ещё по сравнению Ассемблера с языком более высокого уровня
http://mirror.sweon.net/z0mbie/asm.html

Но всё же проще написать программу изначально на С/С++, чем переводить с Ассемблера.

Drongo 24-06-2008 20:28 833976

Admiral,
Цитата:

Цитата Admiral
http://mirror.sweon.net/z0mbie/asm.html »

У меня по ссылке открывается, но вместо символов, квадратики.
:dont-know
Цитата:

Цитата Admiral
Примерное пояснение »

Я не настолько хорошо знаком с ассемблером, как вы! Моё вам уважение! Спасибо за "рассшифровку" :up
Цитата:

Цитата Admiral
Но всё же проще написать программу изначально на С/С++, чем переводить с Ассемблера. »

Вот с этим я соглашусь! :up

Admiral 24-06-2008 22:18 834054

Необходимо вручную установить кодовую страницу Cyrillic -> Windows 1251. Ассемблерный код и его аналог на языке высокого уровня С отображается и без установки нужной кодировки.
Весьма почтён, я профессионально на нём не писал, так учебные программы, в написании которых мне помогал DillerInc за что я ему весьма благодарен. Если есть интерес к ассемблеру, то рекомендую тему ASSM | Моё первое ассемблироание, в которой до сих пор не решён вопрос от bes1de. Собственно его вопрос требует более основательных знаний.
А по большому счёту и с помощью компиляторов С можно получить весьма быстрый код, причём бинарник будет весьма маленького размера.

Drongo 25-06-2008 13:23 834572

Admiral, Спасибо большое! А какое ваше мнение о статьях Калашникова? (Assembler - Рассылка от Калашникова).
Цитата:

Цитата Admiral
до сих пор не решён вопрос от bes1de »

Я не АС, но по скрину, где нарисова блок-схема, мне кажется, что она бессистемна, конечно, я скорее всего ошибаюсь, так как если бы это было так, то это уже давно бы указал.

Admiral 25-06-2008 14:15 834646

Цитата:

Цитата Drongo
А какое ваше мнение о статьях Калашникова? »

:blush: не приходилось читать его статьи. Так что спасибо, буду знать. :up
Просмотрел я статью Первое приложение. "Hello, world с использованием API MessageBox". вроде вполне доступно.
bes1de не предоставил достаточной информации по объекту, под который программируется, его систему команд (например, какой-то пример под этот batronix для 8051.mc). Если под С по алгоритму ещё можно что-то придумать то под ассемблер такое не пройдёт.

Drongo 25-06-2008 15:04 834699

Admiral,
Цитата:

Цитата Admiral
Если под С по алгоритму ещё можно что-то придумать »

http://img355.imageshack.us/my.php?image=bspn7.gif
1-е условие, например вообще не очень понятно, вроде похоже на цикл do\while, но это явно не оно. Остальное, где нужно нажатие кнопки, непонятно как работает? Я толком не знаю, но будет ли верным для переходов к предыдущему условию использовать операторы goto: ?!

D.Y. 18-07-2008 01:26 854903

Всем Большое спасибо я уже написал и сдал!

Drongo 18-07-2008 02:22 854938

D.Y.,
Цитата:

Цитата D.Y.
я уже написал и сдал! »

Так решение приведите, чтобы и другим легче было. :)

Admiral 18-07-2008 04:27 854961

Drongo, это было бы логично, как бы "строили-строили и наконец построили", а ведь здесь до сих пор...

Drongo 18-07-2008 05:16 854966

Admiral, Да я думаю, и здесь будет продолжение из той же оперы, вряд ли человек появится до следующего задания, а потом эту тему благополучно забудут... Тем более даже за раннии решения "Спасибо" нету и вряд ли будет вообще.

Admiral 18-07-2008 05:28 854970

Drongo, тема уже красно популярна (700 просмотров на текущий момент), а та всего лишь жёлто стандартная (пока 472 просмотра), так что я думаю что математическое название привлекает к себе внимание, чего не скажешь про не популярный Ассемблер.
Дело не столько в Спасибо, а сколько в авторитете самого раздела Программирование, поскольку такие темы без решения конечного результата от самого автора, после того как он сказал что всё ОК, не очень то смотрятся и бросают тень на раздел.

D.Y. 18-07-2008 12:39 855224

Код:

#include "conio.h"
#include <iostream>
#include "math.h"
#include "stdlib.h"
using namespace::std;



void main()
{
        int i,j;
        double С[3][3],В[3][1];
       
        double det,det1,det2,det3,x1,x2,x3;
       
        char z='y';
       
cout<<"Vvedite koefisienti pri neizvestnih x1,x2,x3 v 1-om,2-om,3-em yravneniax"<<endl;
        for(i=0;i<3;i++)//vvod matrici koeficientov pri neizvesnix
                for(j=0;j<3;j++)
                        cin>>С[i][j];
       
        cout<<"\n"<<endl; 
        cout<<"Vvedite cvobodnii chleni v 1-om,2-om,3-em yravneniax"<<endl;
        for (i=0;i<3;i++)// Vvod stolbca svobodnix chlenov
        cin>>В[i][0];



       
       
       
        cout<<"Nahogdenie opredelitelei"<<endl;
   
       
        det=C[0][0]*C[1][1]*C[2][2]+C[1][0]*C[2][1]*C[0][2]+C[0][1]*C[1][2]*C[2][0]-C[0][2]*C[1][1]*C[2][0]-C[1][0]*C[0][1]*C[2][2]-C[0][0]*C[2][1]*C[1][2];
        cout<<"opredelitel="<<det<<endl;//vichislenie opredelitela
       
        det1=D[0][0]*C[1][1]*C[2][2]+D[1][0]*C[2][1]*C[0][2]+C[0][1]*C[1][2]*D[2][0]-C[0][2]*C[1][1]*D[2][0]-D[1][0]*C[0][1]*C[2][2]-D[0][0]*C[2][1]*C[1][2];
        cout<<"opredelitel1="<<det1<<endl;//vichislenie opredelitela1
       
        det2=C[0][0]*D[1][0]*C[2][2]+C[1][0]*D[2][0]*C[0][2]+D[0][0]*C[1][2]*C[2][0]-C[0][2]*D[1][0]*C[2][0]-C[1][0]*D[0][0]*C[2][2]-C[0][0]*D[2][0]*C[1][2];
        cout<<"opredelitel2="<<det2<<endl;//vichislenie opredelitela2
       
        det3=C[0][0]*C[1][1]*D[2][0]+C[1][0]*C[2][1]*D[0][0]+C[0][1]*D[1][0]*C[2][0]-D[0][0]*C[1][1]*C[2][0]-C[1][0]*C[0][1]*D[2][0]-C[0][0]*C[2][1]*D[1][0];
        cout<<"opredelitel3="<<det3<<endl;//vichislenie opredelitela3
        cout<<"\n"<<endl;
       
       
       
                       
        if(det!=0)       
    {x1=det1/det;//vichislenie  x1
        x2=det2/det;//vichislenie  x2
        x3=det3/det;//vichislenie  x3
        cout<<"x1="<<x1<<endl;
        cout<<"x2="<<x2<<endl;
        cout<<"x3="<<x3<<endl;}

       
        else
                cout<<"Sistema ne imeet reshenii, tak kak opredelitel=0"<<endl;

        getch() ;
}
это для матриц 3*3 и меньше по уравнениям крамера


D.Y. 18-07-2008 12:57 855244

Код:

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <math.h>
#include "matr_in_gause.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
//Нахождение обратной матрицы методом Гаусса
//Входные данные: double *a - исходная матрица;
//                int n    - размерность матрицы[n*n];
//    Sring name_file_save  - имя файла для записи результатов счета.
//Выходные данные: double *a - обратная матрица, вычисленная по методу Гаусса, [n*n].
int matr_inv_gause(double *a, int n)
{
  double e1, d, *b, *c, y, w, p; ;
  int i, j, k, *z;

  e1=1.e-6;
  d=1;

  z= new int[n];
  c= new double[n];
  b= new double[n];


  for(i=0; i<n; i++)
    *(z+i)=i;

  for(i=0; i<n; i++)
  {
    k=i;
    y=*(a+i*n+i);
    if(i+1 <= n )
      for(j=1+i; j<n; j++)
      {
        w=*(a+n*i+j);
        if(fabs(w)>fabs(y))
        {
          k=j;
          y=w;
        }
      }
    d=d*y;
//проверка на близость к вырождению матрицы 
  if(fabs(y)<e1) return 2;
  y=1./y;
  for(j=0; j<n; j++)
    {
      *(c+j)=*(a+n*j+k);
      *(a+n*j+k)=*(a+n*j+i);
      *(a+j*n+i)=-(*(c+j))*y;
      *(b+j)=*(a+i*n+j)*y;
      *(a+i*n+j)=*(b+j);
    }
  j=*(z+i);
  *(z+i)=*(z+k);
  *(z+k)=j;
  *(a+i*n+i)=y;

  for(k=0; k<n; k++)
    if(k != i)
      for(j=0; j<n; j++)
        if(j != i)
        *(a+k*n+j)=*(a+k*n+j)-(*(b+j))*(*(c+k));
  }
  for(i=0; i<n; i++)
    while(1)
    {
      k=*(z+i);
      if(k == i) break;
      for(j=0; j<n; j++)
        {
        w=*(a+i*n+j);
        *(a+i*n+j)=*(a+k*n+j);
        *(a+k*n+j)=w;
        }
      p=*(z+i);
      *(z+i)=*(z+k);
      *(z+k)=p;
      d=-d;
    }

 delete[] z;
 delete[] b;

 delete[] c;

 return 0;
}
 а вот по гауссу но здесь я еще использовал собственные директивы и прога писалась не консольная если немного переделать то можно сделать консольную кому нужна полностью пишите могу прислать ехешник а самому переделывать не охота каникулы ведь


Admiral 18-07-2008 13:21 855275

D.Y., другое дело :clapping:

Drongo 18-07-2008 16:45 855541

D.Y., :yes: :up

Drongo 18-07-2008 18:03 855656

D.Y., Ещё один маленький нюанс, а где содержимое заголовочного файла matr_in_gause.h его тоже нужно, бо непонятно много.

D.Y. 18-07-2008 18:39 855692

Код:

#ifndef matr_in_gauseH
#define matr_in_gauseH
//---------------------------------------------------------------------------
#endif

Вот но врядли он поможет
Вот как выглядит главная программа
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <string.h>
#include <Sysutils.hpp>
#include "main_matr_gause.h"
#include "matr_in_gause.h"
#include <stdio.h>
#include "form_help.h"
#include "form_rez.h"
#include "form_save_rez.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"

#define N 5
double mas3[N][N];
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------
void __fastcall TForm1::N1Click(TObject *Sender)
{
 //Проверка на наличие элементов в матрице
 //Если элементов нет , ф-я завершает работу
  int i, j, w, v;
  double mas1[N][N],mas2[N][N];
  TForm3* ID3 = new TForm3(this);
//задание положения Form3 на экране
  ID3->Left=179;
  ID3->Top=113;
  ID3->Height=180;
  ID3->Width=356;

//формирование входной матрицы a[n*n]
 a=new double[StringGrid1->ColCount*StringGrid1->ColCount];
 for(i=0; i < StringGrid1->ColCount; i++)
  for(j=0; j< StringGrid1->RowCount; j++)
    {
      if(StringGrid1->Cells[j][i]!="")
                *(a+i*StringGrid1->RowCount+j)=StrToFloat(StringGrid1->Cells[j][i]);
            else *(a+i*StringGrid1->RowCount+j)=0;
            //Если не ввести элемент, то ему присваивается 0

      mas1[i][j]=*(a+i*StringGrid1->RowCount+j);
    }

//вычисление обратнй матрицы методом Гаусса
 pr= matr_inv_gause(a,StringGrid1->RowCount);

//отображение результатов вычисления обратной матрицы
if(pr==0)
 {
  for(i=0; i < StringGrid2->ColCount; i++)
    for(j=0; j< StringGrid2->RowCount; j++)
      {
        StringGrid2->Cells[i][j]=FloatToStrF(*(a+j*StringGrid2->RowCount+i),ffFixed,10,4);
        mas2[i][j]=*(a+i*StringGrid2->RowCount+j);
      }
//нахождение матрицы умножения исходной на обратную.
        for(v=0; v < StringGrid3->ColCount; v++)
          {
        for(w=0; w< StringGrid3->RowCount; w++)
          {
            mas3[v][w]=0;
        for(i=0; i < StringGrid1->ColCount; i++)
          {
            mas3[v][w]=mas3[v][w]+mas1[v][i]*mas2[i][w];
          }
            StringGrid3->Cells[v][w]=FloatToStrF(mas3[v][w],ffFixed,10,4);
              StringGrid3->Cells[i][j]="";
            }

            }

  }
//анализ корректности вычисления обратной матрицы
 if(pr==2)
    {
      for(i=0; i < StringGrid2->ColCount; i++)
        for(j=0; j< StringGrid2->RowCount; j++)
          {
            StringGrid2->Cells[i][j]="";
            StringGrid3->Cells[i][j]="";
          }
      ID3->ShowModal();
    }
 ID3->Free();



//

//



}
//---------------------------------------------------------------------------
void __fastcall TForm1::CSpinEdit1Change(TObject *Sender)
{
int i;

 if (CSpinEdit1->Value > 5 ) return;

//pедактированиe таблицы
 StringGrid1->EditorMode=true;

//задание размерности входной матрицы
 StringGrid1->ColCount=CSpinEdit1->Value;
 StringGrid1->RowCount=CSpinEdit1->Value;

//редактированиe таблицы
 StringGrid2->EditorMode=false;

//задание размерности выходной матрицы
 StringGrid2->ColCount=CSpinEdit1->Value;
 StringGrid2->RowCount=CSpinEdit1->Value;




 StringGrid3->EditorMode=false;
 
//задача выходной матрицы умножения обратной на исходную
 StringGrid3->ColCount=CSpinEdit1->Value;
 StringGrid3->RowCount=CSpinEdit1->Value;



//очистка ячеек таблицы
 for(int i = 0; i < StringGrid1->ColCount; i++)
  for(int j = 0; j < StringGrid1->ColCount; j++)
    StringGrid2->Cells[i][j] ="";





 for(int i = 0; i < StringGrid1->ColCount; i++)
  for(int j = 0; j < StringGrid1->ColCount; j++)
    StringGrid3->Cells[i][j] ="";



    for(int v = 0; v < StringGrid3->ColCount; v++)
  for(int w= 0; w < StringGrid3->ColCount; w++)
    StringGrid3->Cells[v][w] ="";



//очистка ячеек таблицы
 for(int i = 0; i < StringGrid2->ColCount; i++)
  for(int j = 0; j < StringGrid2->ColCount; j++)
    StringGrid2->Cells[i][j] ="";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  delete[] a;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{ float
 x=450,y=750;

//задание положения MainForm (Form1) на экране
Form1->Left=23;
Form1->Top=83;
Form1->Height=x;
Form1->Width=y;

}

//---------------------------------------------------------------------------


void __fastcall TForm1::N6Click(TObject *Sender)
{
  TForm2* ID2 = new TForm2(this);
//задание положения Form2 на экране
  ID2->Left=56;
  ID2->Top=118;
  ID2->Height=264;
  ID2->Width=290;
//отображение Form2 на экране
  ID2->ShowModal();

  ID2->Free();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N2Click(TObject *Sender)
{
  FILE *h;

 String name_file_save;
 int i, j;

 TForm4* ID4 = new TForm4(this);
//задание положения Form4 на экране
  ID4->Left=189;
  ID4->Top=112;
  ID4->Height=159;
  ID4->Width=364;

//выбор имени файла для записи результатов счета
 SaveDialog1->Title="Введите или выберите имя файла для записи результатов счета";
 SaveDialog1->Filter= "Text. files (*.txt)|*.txt";

 if(SaveDialog1->Execute())
  {
    name_file_save = SaveDialog1->FileName;
  }

//открытие файла для записи результатов счета
  if ((h = fopen(name_file_save.c_str(),"w"))
      == NULL)
  {
      fprintf(stderr, "Cannot open input file.\n");
      return ;
  }

 if(pr == 0)
  {
  fprintf(h,"Обратная матрица, вычисленная методом Гаусса\n");
//запись в файл обратной матрицы
  for(i=0; i<StringGrid1->RowCount; i++)
    {
      for(j=0; j<StringGrid1->RowCount; j++)
      fprintf(h,"%20.12g",*(a+i*StringGrid1->RowCount+j));
      fprintf(h,"\n");
    }
  }
  if(pr==2)
    fprintf(h,"Матрица близка к вырождению.\n");

//закрытие файла для записи результатов счета
 fclose(h);

 ID4->ShowModal();

 ID4->Free();

}
//---------------------------------------------------------------------------

void __fastcall TForm1::N4Click(TObject *Sender)
{
Application->Terminate();
}
//---------------------------------------------------------------------------


Drongo 18-07-2008 19:26 855719

D.Y., Не, дружище, не то, у этого файла расширение .ccp, a надо .h
Код:

#include "main_matr_gause.h  // Вот этот"
#include "matr_in_gause.h"  // И вот этот


D.Y. 18-07-2008 21:31 855777

Не-е дружище у меня расширение этого файла main_matr_gause.h
а .сср это вообще не из языка С++ (может .срр)?Создавался как Header File (.h) Давай я тебе выложу архивчик с файлами а ты уже сам посмотриш(только куда его выложить?)

Drongo 18-07-2008 22:35 855812

D.Y.,
Цитата:

Цитата D.Y.
а .сср это вообще не из языка С++ (может .срр) »

Всё правильно :) это я малость тормознул, конечно же .cpp.
Цитата:

Цитата D.Y.
Давай я тебе выложу архивчик с файлами а ты уже сам посмотриш »

Давай, а тут сбоку есть панель Прикрепить файл - щёлкай по ней, а дальше раберёшься, если не поймёшь, выложи через файлообменник какой?

D.Y. 18-07-2008 23:24 855842

Вложений: 1
вот

D.Y. 18-07-2008 23:24 855845

http://forum.oszone.net/attachment.p...1&d=1216408949
Matr_Gause 1.1.zip

Drongo 19-07-2008 00:08 855875

D.Y., Браво! :up Отличная программа, и главное компилится и работает! Вот это ты молоток! :yes:

D.Y. 19-07-2008 00:39 855898

Я просто забросил ту книгу(мне старшекурсники говорили что там вообще ничего не компилится) и взял пару других проконсультировался с преподом и написал (не с первого раза пару раз клава страдала от этого) но всетаки чтото получилось и курсач сдан!

Drongo 19-07-2008 01:09 855923

D.Y.,
Цитата:

Цитата D.Y.
но всетаки чтото получилось и курсач сдан! »

Ну, не скромничайте, это "что-то", весьма хорошая программа с интерфейсом. Так что, забегайте к нам на форум. :)

D.Y. 19-07-2008 01:40 855940

Ок только отдохну от учебы!!!

Luzuk 18-09-2008 04:07 902154

Приветствую всех ;)
Хочу поблагодарить участников форума за проделанную работу, так как пол дня потратил в поисках нормального рабочего кода для вычисления обратной матрицы, и смог найти его только здесь.
Сам не хотел его писать, т.к. лень было разбираться в теории расчета, и потом еще свой алгоритм для этого писать, задача то давно известная и зачем дважды изобретать велосипед.

У меня только один вопрос, выложенные выше исходники (точней готовый проект) для какого компилятора? Я работаю на Visual C++ 6.0, ну к нему он явно не подходит.

Так что пришлось их переделывать для своей программы. В итоге написал класс для работы с матрицами. Чуть позже выложу исходники ДОСовской программы с этим классом, хочу сначала немного интерфейс доработать.

Программа поддерживает следующие операции над матрицами: сложение, вычитание, умножение, транспонирование и обращение.

Luzuk 18-09-2008 08:54 902225

Вложений: 1
Ниже прикреплен архив с готовой программой (MATRIX.exe) и ее исходниками.

Описание:
Программа для выполнения различных операций с матрицами.
Возможности:
Сложение, вычитание, умножение, транспонирование, обращение матриц размера N*M.
Реализация:
Программа консольная, написана на MS Visual C++ 6.0.
Исходный код реализован на основе ООП, на классе matrix (его скачал с какого-то сайта).
В код были внесены небольшие изменения, добавлены 2 функции (транспонирование и обращение).

[P.S.]
Если у кого-нибудь будет желание дополнить или модифицировать этот код, можете это делать. Только желательно выложить здесь результат своей работы.

Drongo 18-09-2008 16:30 902575

Luzuk,
Цитата:

Цитата Luzuk
У меня только один вопрос, выложенные выше исходники (точней готовый проект) для какого компилятора? »

У меня такое и всё работает. Загляните в тему Помогите решить начните с сообщения №6, скорее всего, что это не совсем то, что надо, но тоже тема с матрицами и векторами.
Цитата:

Цитата Luzuk
Программа поддерживает следующие операции над матрицами: сложение, вычитание, умножение, транспонирование и обращение. »

У меня программа отработала до возможности выбора действий, сложение, ..., ..., ..., обращение и закрывается... :dont-know А так конечно работы проделано много и программа нужная. :up

D.Y. 18-09-2008 20:51 902782

Моя программа писалась для Borland C++ Builder 6 а под вижуал я думаю вполне реально переделать там основное отличие в библиотеках.

Luzuk 19-09-2008 06:18 903027

Цитата:

Цитата Drongo
У меня программа отработала до возможности выбора действий, сложение, ..., ..., ..., обращение и закрывается...

Хм... у меня все работает... Единственное, что нет обработки введенных символов, если ввести букву вместо цифры программа "накроется". Просто не было время ее так отшлифовывать, задача была, сделать программу для 5ти операция с матрицами, обработку ошибок делать было не обязательно. К тому же ее уже сегодня нужно сдавать, так что время было мало.
Ну, думаю я в ближайшее время смогу ее довести до ума и убрать все "косяки" ;)



А чтобы было понятно, как с программой работать ниже привожу листинг с примером ее работы.
Код:

----[Matrix A(N,M)]----

Enter size  //вводим размер матрицы А//
 N> 3
 M> 3
Enter matrix elements: //вводим элементы матрицы А (вводить можно через пробел или enter)//
1 2 3
6 5 4
8 7 9

Matrix>  1 2 3  //получившаяся матрица А//
          6 5 4
          8 7 9

-----------------------

//дальше аналогично, но для матрицы В//
----[Matrix B(N,M)]----

Enter size
 N> 3
 M> 1
Enter operant elements:
1 5 8

Matrix>  1
        5
        8

-----------------------

//Теперь необходимо выбрать что мы с этими матрицами будем делать//
################################
#  Chouce operation:
#  1. A+B                    //если ввести 1 - сложение А и В//
#  2. A-B                    //если ввести 2 - вычитание В из А//
#  3. A*B                    //если ввести 3 - умножение А на В//
#  4. Transponent A  //если ввести 4 - транспонирование матрицы А//
#  5. Invert A            //если ввести 5 - обращение матрицы А//
#  9. EXIT                  //если ввести 9 - программа зароиться//
#  >3    //здесь нужно указать номер нужно вам действия, я выбрал умножение//

Matrix>  35    //А это результат умножения//
        63
        115


Drongo 19-09-2008 13:56 903250

Luzuk,
Код:

#  >3    //здесь нужно указать номер нужно вам действия, я выбрал умножение//
Вот-вот, ввожу число из меню выбора, от 1 до 5, жму Enter и программа закрывается.

Luzuk 20-09-2008 06:25 903870

Цитата:

Цитата Drongo
Вот-вот, ввожу число из меню выбора, от 1 до 5, жму Enter и программа закрывается. »

А какие данные ты вводил, и что с матрицами делал? Просто есть один нюанс (не доработал я этот момент), в случаи ошибки какого-либо действия, допустим, если сложить две матрицы разного размера, что в принципе невозможно, обработчик ошибок сразу при этом выдает сообщение об ошибочном действии (Addition isn't possible), после чего программа закрывается.

Попробуй запустить программу в командной строке (cmd), чтобы было видно, что она выводит перед закрытием.
В исходниках, в файле matrix.h можно глянуть список всех ошибок, которые программа обрабатывает.


Еще возможно глюк из-за разных ОС (что вряд ли), у меня в Win XP(2SP) все нормально работает.
Попробуй создать матрицу А и В размером 1*1, с ними по идеи должны выполняться все действия.

Drongo 20-09-2008 15:03 904061

Luzuk,
Цитата:

Цитата Luzuk
две матрицы разного размера »

и
Цитата:

Цитата Luzuk
Попробуй создать матрицу А и В размером 1*1, с ними по идеи должны выполняться все действия »

Вот теперь тебя люблю я, вот теперь тебя хвалю я. :up Правильно, всё правильно, работает.
Нужно бы добавить проверку размера второй матрицы. И добавить счётчик номера вводимого элемента матрицы, а то неудобно, неизвестно какой номер ты вводишь. И перед выполняемым действием, было бы лучше выводить название самого действия - Умножение, или Сложение, так проще будет ориентироваться. :yes:
Цитата:

Цитата Luzuk
Попробуй запустить программу в командной строке (cmd), чтобы было видно, что она выводит перед закрытием. »

Вот этого я или не знаю, или не понял, склоняюсь больше к тому, что не знаю, как её так запустить? :dont-know Поделишься знаниями? Объяснишь?

Admiral 20-09-2008 18:18 904194

Drongo, а я думаю что всё же больше не понимания :wink:
Пуск => Выполнить => cmd указываем путь к откомпилированному файлу.

В программе, которая на скрине, слово Chouce по английски правильно пишется как Choose, но сюда больше подходит Select.

Drongo 20-09-2008 19:14 904231

Ооо, точно Admiral, проверил таким способом, да, если размеры матрицы неправильные, всё правильно, ошибка вылетает. Спасибо за разъяснения. :up

Вопрос как бы уже решён, Luzuk, но если интерес есть, то вот такая ошибка была. Но повторю, размеры матрицы я вводил разные. А в целом всё класс - :up
Код:

################################
#  Chouce operation:
#  1. A+B
#  2. A-B
#  3. A*B
#  4. Transponent A
#  5. Invert A
#  9. EXIT
#  >3
        ERROR! >>> Multiplication isn't possible


Luzuk 22-09-2008 03:00 905291

Цитата:

Цитата Admiral
В программе, которая на скрине, слово Chouce по английски правильно пишется как Choose, но сюда больше подходит Select. »

Ясно, учтем ;) Спасибо за подсказку, поправим.

Drongo, Вот и хорошо. Я так сразу и подумал, что в этом ошибка.

Сейчас думаю тоже самое сделать, только с нормальным интерфейсом. Если за основу возьму то что D.Y. сделал:
Цитата:

Цитата D.Y.
http://forum.oszone.net/attachment.p...1&d=1216408949
Matr_Gause 1.1.zip »

Думаю ни кто против не будет?
Правда из Билдера в Визуал не разу ничего не переделывал, да и вообще графические оболочки только на Win API могу писать, и то на среднем уровне. Посоветуйте, кто знает, с чего лучше начать в этой задачи? Или проще на Билдере ее и продолжить писать и не мучиться с переделкой на Визуал С?

Admiral 22-09-2008 04:12 905301

Luzuk, если со средой Билдера не возникает проблем то лучше проект продолжать писать там же.

Luzuk 25-09-2008 09:02 908233

Вложений: 1
Вроде бы все получилось. Код программы, конечно, не самый красивый, ну это с учетом, что пришлось разбираться с чужим кодом и средой которую я плохо знаю.
Ну, главное что оно работает. Пришлось правда несколько функций убрать, не стал разбираться с сохранением результатов в файл, так что я эту кнопку просто убрал и ещё почему-то Билдер на мой класс Matrix немного ругался, точней на операцию сложение.
Так что там пришлось часть кода закомментировать, ну от этого функционал не пострадал.
Так что, теперь программа по мимо вычисления обратной матрицы, ещё может делать сложение, вычитание, умножение и транспонирование ;)

Ниже прикрепляю архив с готовым проектом, для C++ Builber 6

Drongo 25-09-2008 10:57 908302

Luzuk, Отлично получилось, рульно! :yes: :up

D.Y. 26-09-2008 13:46 909216

RESPECT ТЕБЕ Luzuk, МОЖЕТ ТВОЯ ПРОГА ЕЩЕ КОМУ ПОМОЖЕТ ВООБЩЕ В НАШЕ ВРЕМЯ МАЛО КТО ХОЧЕТ ДЕЛИТСЯ СВОИМИ РАБОТАМИ И КОГДА ЧТОТО НУЖНО ТО ОЧЕНЬ ТЯЖЕЛО НАЙТИ!А ВОТ ЗДЕСЬ ВСЕ БЕСПЛАТНО И В ИСПРАВНОМ СОСТОЯНИИ!

Luzuk 29-09-2008 03:10 911353

Пожалуйста ;) Мне не жалко. Я за эту программу деньги уже получил, хотя кое что еще нуно доработать.. позже может ещё обновленную версию выложу ;)

Quart 06-05-2011 22:59 1671567

А может есть у кого что попроще? чтоб программа состояла из одного .cpp файла ... !?


Время: 02:20.

Время: 02:20.
© OSzone.net 2001-