Имя пользователя:
Пароль:
 

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

Аватара для D.Y.

Новый участник


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

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


Код: Выделить весь код
а не моглибы вы прокомментировать(что в какой строке делается) программу я взял у паренька но он кудато пропал и я не пойму что в ней творится особенно в конце
было задание решение СЛАУ методом Крамера
#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; 
}

Отправлено: 15:09, 23-06-2008 | #19