Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi]методы решения Слау


Автор: valentos 9.5.2007, 12:34
Я бы конечно и сам бы сделал прогу, тока не фурычу я в этих методах(Краммер,Гаус),
так что плз кто-нибудь сделайте прогу, и выложите ее сдесь. Или хотяб обьясните как решать этими 2 методами СЛАУ

1.    В среде Delphi методом Крамера и Гауса, написать приложение, осуществляющее решение СЛАУ.
2.    При разработке интерфейса приложения использовать компоненты  TPageControl.
3.    Создать новый тип объекта TDesSLAU и объект, содержащий:
свойства: 
1)    основную матрицу системы, 
2)    столбец свободных членов, 
3)    вектор неизвестных значений;
     методы
1)    вычисления определителя 3-го порядка, 
2)    соответствующий метод решения СЛАУ.

Вот прога, надо ее закончить!!!!!!!(17kb)

Автор: valentos 9.5.2007, 13:13
Цитата(keenara @  9.5.2007,  12:57 Найти цитируемый пост)
Если мозги есть - сообразишь родить прогу

Для человека, который в первый раз видит эти методы, я думаю сложновато родить! smile 

Автор: valentos 9.5.2007, 14:30
Занимательно, а как считать определитель по правилу треугольника? smile 

Автор: valentos 9.5.2007, 14:55
Там в коде(прога в 1 сообщении(17kb)) вроде что-то пахожее есть, тока я не знаю, допустим пользователь введет массив больше чем 3х3, что тогда?

Автор: valentos 9.5.2007, 16:24
ТОгда, другой вопрос: следующее задание у меня такое же, тока с Дин.Массивом?--спрашивается нафига там Дин.Массив?

Автор: valentos 9.5.2007, 16:49
НЕА,
1.    Выполнить задания из лабораторной работы №4 с использованием динамических массивов.
2.    Методы решения СЛАУ оформить отдельные процедурами и разметить в DLL.
3.    Разработать тесты для верификации созданного приложения
И усе  smile 

Автор: keenara 9.5.2007, 16:57
Странное задание. Скорее всего сказали юзать динамические массивы просто чтобы задачу усложнить. Потому что произвольной матрица у нас быть не может, так как вычисление ее определителя - отдельная геморройная задача, решения которой простым и нерекурсивным способом я не вижу. А поскольку глубина рекурсии в нашем случае будет весьма значительной, от этой идеи стоит отказаться.
Поэтому давай все же раз в лабе 4 сказано что матрица 3 на 3 а в 5 сказано что делать то же самое, будем считать что у нас и в данной лабе массив 3 на 3. Вот и все. Просто замени массив на динамический.

Автор: valentos 9.5.2007, 17:17
Цитата(keenara @  9.5.2007,  16:57 Найти цитируемый пост)
Просто замени массив на динамический

Я так и сделаю когда заработает первая прога!

Автор: valentos 9.5.2007, 20:51
ПЛЗ, помогите не знаю че делать smile  smile 
Скачайте мою лабу и родите там чего нибудь, Плиз!!!!

Автор: Romkin 10.5.2007, 16:58
Цитата(keenara @  10.5.2007,  15:00 Найти цитируемый пост)
вы не подскажете как в Паскале передать двумерный массив в функцию?

Код

type 
  TMatrix = array of array of Double;

procedure Det(M: TMatrix): Double;

и тд. Смысл в том, что нужно объявлять тип. Инициализация: SetLength(M, 3, 3); Нумерация от 0. По сути - smart pointer

Автор: valentos 11.5.2007, 08:59
А Гауса-- кто нибудь знает?

Автор: Romkin 11.5.2007, 09:17
http://sources.ru/pascal/math/gauss.htm

Автор: valentos 11.5.2007, 21:38
Может все таки кто нибудь доделает(сделает) прогу, Вот она:

Автор: Zanoza 14.5.2007, 13:14
Valentos, вот метод Гаусса, правда на паскале, может поможет  smile 
Код

program Method_Gaussa;

uses crt;

const  N=4;

var    A:array[1..N,1..N] of real;
       b:array[1..N] of real;
       x:array[1..N] of real;
       i,j:integer;

{///////////////////////////////////////////////////////////////////////////}
procedure Vvod;
begin
    writeln ('Vvedite elementi rasshirennoi matrici koefficientov:');
    writeln;
    for i:=1 to N do
        begin
        for j:=1 to N do
            begin
            write('a[' ,i:2, ',' ,j:2, ']=');
            readln(A[i,j]);
            end;
        write('b[' ,i:2, ']=');
        readln(b[i]);
        end;
end;

{///////////////////////////////////////////////////////////////////////////}
procedure vivod_A;
begin
     for i:=1 to N do
         for j:=1 to N do
             begin
             writeln;
             for j:=1 to N do
             write (A[i,j]:8);
             end;
         writeln;
         writeln;
end;

{///////////////////////////////////////////////////////////////////////////}
procedure Reformation;
var k,r:integer;
    mx,c,M:real;
begin
    for k:=1 to N do
        begin
        mx:=abs(A[k,k]);
        r:=k;
        for i:=k+1 to N do
            if abs(A[i,k])>mx then
               begin
               mx:=abs(A[i,k]);
               r:=i;
               end;
        for j:=1 to N do
            begin
            c:=A[k,j];
            A[k,j]:=A[r,j];
            A[r,j]:=c;
            end;
        c:=b[k];
        b[k]:=b[r];
        b[r]:=c;
        for i:=k+1 to N do
            begin

            M:=(A[i,k]/A[k,k]);
            for j:=k to N do
            A[i,j]:=A[i,j]-(M*A[k,j]);
            b[i]:=b[i]-(M*b[k]);
            end;
        end;
end;

{////////////////////////////////////////////////////////////////////////////}
procedure Reverse;
var s:real;
begin
    if A[N,N]=0 then
        if b[N]=0
               then writeln('Besconechnoe mnojestvo reshenii')
               else writeln('Reshenii net')
       else for i:=N 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:2, ']=',x[i]);
               end;

end;

{////////////////////////////////////////////////////////////////////////////}
begin
clrscr;

      Vvod;

      Reformation;

      {Vivod_A;}

      Reverse;

readln;
end.

Автор: valentos 14.5.2007, 18:26
Zanoza, вроде то что надо! Надеюсь правильно работает алгоритм?!
СПСБ! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)