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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2011, 12:40   #1
cor666
 
Регистрация: 11.12.2011
Сообщений: 4
По умолчанию Разработка программы решения системы линейных уравнений методом Гаусса.

Помогите написать программу в С#
код в паскале
Текст программы
"Решение систем линейных уравнений методом Гаусса"

Program Lin_yravneniya;
uses crt;
const N=3;
eps=0.00001; { all numbers less than eps are equal 0 }
type matr=array [1. n,1. n] of real;
mas=array [1. n] of real;
var
i,j: integer;
b,x: mas;
variant: byte;
a,c: matr;
dt: real;
imx,np: integer;
{*** печать исходной и обратной матрицы*** }
procedure PrintMatr2 (m,m1: matr; n,nz,nd: integer);
var i,j: integer;
begin
for i: =1 to n do
begin
if (i=1) then write (np: 2,': ')
else write (' ');
for j: =1 to n do
write (m [i,j]: nz: nd); write (' ');
for j: =1 to n do
write (m1 [i,j]: nz: nd);
writeln;
end;
inc (np);
end;
procedure MultString (var a,b: matr; i1: integer; r: real);
var j: integer;
begin
for j: =1 to n do
begin
a [i1,j]: =a [i1,j] *r;
b [i1,j]: =b [i1,j] *r;
end;
end;
procedure AddStrings (var а,b: matr; i1, i2: integer; r: real);
{ процедура прибавляет к i1 строке матрицы а i2-ю умноженную на r}
var j: integer;
begin
for j: =1 to n do
begin
a [i1,j]: =a [i1,j] +r*a [i2,j] ;
b [i1,j]: =b [i1,j] +r*b [i2,j] ;
end;
end;
procedure MultMatr (a,b: matr; var c: matr);
var i,j,k: byte;
s: real;
begin
for i: =1 to n do
for j: =1 to n do
begin
s: =0;
for k: =1 to n do
s: =s+a [i,k] *b [k,j] ;
c [i,j]: =s;
end;
end;
function sign (r: real): shortint;
begin
if (r>=0) then sign: =1 else sign: =-1;
end;
{********************************** *****************}
{** вычеркивание из матрицы строки и столбца **}
procedure GetMatr (a: matr; var b: matr; m, i,j: integer);
var ki,kj,di,dj: integer;
begin
di: =0;
for ki: =1 to m-1 do
begin
if (ki=i) then di: =1;
dj: =0;
for kj: =1 to m-1 do
begin
if (kj=j) then dj: =1;
b [ki,kj]: =a [ki+di,kj+dj] ;
end;
end;
end;
{*** метод Гаусса *******}
procedure gauss (a: matr; b: mas; var x: mas; n: integer);
Var k: byte;
m, s: real;
begin
{ приведение к треугольному виду}
For k: =1 to N-1 do
For i: =k+1 to n do
begin
m: =a [i,k] /a [k,k] ;
a [i,k]: =0;
For j: =k+1 to N do
a [i,j]: =a [i,j] -m*a [k,j] ;
b [i]: =b [i] -m*b [k] ;
end;
{расчет неизвестных х в обратном порядке}
x [n]: =b [n] /a [n,n] ;
writeln;
writeln ('Вывод результатов решения системы уравнений методом Гаусса');
writeln ('x [',n,'] =',x [n]: 6: 2);
for i: = (n-1) downto 1 do
begin s: =0;
For j: =i+1 to n do
s: =s-a [i,j] *x [j] ;
x [i]: = (b [i] +s) /a [i, i] ;
writeln ('x [', i,'] =',x [i]: 6: 2);
end;
end;

Последний раз редактировалось cor666; 11.12.2011 в 12:48.
cor666 вне форума Ответить с цитированием
Старый 11.12.2011, 14:17   #2
cor666
 
Регистрация: 11.12.2011
Сообщений: 4
По умолчанию

вот начало
int n, k, i, j;
//Ввод размерности матрицы
Console.WriteLine("Введите размерность матрицы");
Console.Write("Введите количество строк n:");
n = Convert.ToInt32(Console.ReadLine()) ;
Console.Write("Введите количество столбцов k:");
k = Convert.ToInt32(Console.ReadLine()) ;
//Объявление и ввод элементов матрицы
int[,] M = new int[n, k];
Console.WriteLine("Введите матрицу:");
for (i = 0; i < n; i++)
{
for (j = 0; j < k; j++)
M[i, j] = Convert.ToInt32(Console.ReadLine()) ;
}
//Вывод матрицы
for (i = 0; i < n; i++)
{
Console.WriteLine();
for (j = 0; j < k; j++)
Console.Write(M[i, j] + "\t");
}
Console.ReadLine();
cor666 вне форума Ответить с цитированием
Старый 11.12.2011, 16:15   #3
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

ваш код на паскале не компилируется даже если исправить все: = на: =
rUs_LAN вне форума Ответить с цитированием
Старый 11.12.2011, 17:00   #4
cor666
 
Регистрация: 11.12.2011
Сообщений: 4
По умолчанию

значит источник не верен.не могли бы вы помочь мне с написанием алгоритма решения этой задачи
cor666 вне форума Ответить с цитированием
Старый 11.12.2011, 20:45   #5
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

PHP код:
// result - указатель на буффер правой части СЛАУ
// mtx - указатель на первый элемент матрицы
// n - размер системы
static bool _Solve_square_system(doubleresultdoublemtxint n)
{
    
doublemtx_u_iimtx_ii_j;
    
double a;
    
doublemtx_end mtx nresult_imtx_u_ii_j null;
    
double mx;
    
int d 0;
    
// mtx_ii - указатель на 'ведущий' диагональный элемент матрицы
    
for (doublemtx_ii mtxmtx_ii_end mtx nmtx_ii mtx_endresult++, mtx_ii += 1mtx_ii_end += nd++)
    {
        
// Смотрим под ведущим элеменом, значение максимальное по модулю
        
{
            
mx System.Math.Abs(*(mtx_ii_j mtx_ii));
            for (
mtx_u_ii mtx_ii nresult_i result 1mtx_u_ii mtx_endmtx_u_ii += nresult_i++)
            {
                if (
mx System.Math.Abs(*mtx_u_ii))
                {
                    
mx System.Math.Abs(*(mtx_ii_j mtx_u_ii));
                    
mtx_u_ii_j result_i;
                }
            }
            
// если максимальный по модулю элемент равен 0 - система вырождена и не имеет решения
            
if (mx == 0) return false;
            
// если максимальный элемент не является ведущим, делаем перестановку строк, чтобы он стал ведущим
            
else if (mtx_ii_j != mtx_ii)
            {
                
= *result;
                *
result = *mtx_u_ii_j;
                *
mtx_u_ii_j a;
                for (
mtx_u_ii mtx_iimtx_u_ii mtx_ii_endmtx_ii_j++, mtx_u_ii++)
                {
                    
= *mtx_u_ii; *mtx_u_ii = *mtx_ii_j; *mtx_ii_j a;
                }
            }
        }
        
//'обнуляем' элементы над ведущим
        
for (mtx_u_ii mtx_ii nresult_i result 1mtx_u_ii mtxmtx_u_ii -= n)
        {
            
= *(mtx_u_ii) / *mtx_ii;
            for (
mtx_ii_j mtx_ii 1mtx_u_ii_j mtx_u_ii 1mtx_ii_j mtx_ii_end; *(mtx_u_ii_j++) -= *(mtx_ii_j++) * a) ;
            *(
result_i--) -= *(result) * a;
        }
        
//'обнуляем' элементы под ведущим
        
for (mtx_u_ii mtx_ii nresult_i result 1mtx_u_ii mtx_endmtx_u_ii += d)
        {
            
= *(mtx_u_ii++) / *mtx_ii;
            for (
mtx_ii_j mtx_ii 1mtx_ii_j mtx_ii_end; *(mtx_u_ii++) -= *(mtx_ii_j++) * a) ;
            *(
result_i++) -= *(result) * a;
        }
    }
    
//матрица приведена к дигональному виду
    //приводим ее к единичному, получая права решение
    
for (; mtx_end mtx; *(--result) /= *(--mtx_end), mtx_end -= n) ;
    return 
true;
}
public static 
bool SolveSquare(double[] outResultdouble[,] Adouble[] x)
{
    
int n outResult.Length;
    if (
== x.Length && == A.GetLength(0) && == A.GetLength(1))
    {
        if (
0)
        {
            Array.
Copy(xoutResultn);
            
fixed(doublepresult = &outResult[0])
            
fixed (doublepmtx = &A[0,0])
                return 
_Solve_square_system(presultpmtxn);
        }
        else return 
true
    }
    throw new 
IndexOutOfRangeException();

не проверял
rUs_LAN вне форума Ответить с цитированием
Старый 11.12.2011, 22:36   #6
cor666
 
Регистрация: 11.12.2011
Сообщений: 4
По умолчанию

проверю)))
cor666 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение системы линейных уравнений методом Гаусса. maliyusha Помощь студентам 16 18.02.2013 15:44
Решение системы линейных уравнений методом Гаусса wizion Фриланс 4 20.11.2011 22:05
Решения системы уравнений методом Гаусса на Dev С++ Денис999 Помощь студентам 0 22.10.2011 20:18
Решение системы линейных уравнений. методы Крамера и Гаусса Lumos Помощь студентам 3 05.12.2010 12:22
РЕШЕНИЕ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ МЕТОДОМ ГАУССА Unkind03 Паскаль, Turbo Pascal, PascalABC.NET 0 01.12.2010 17:10