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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Решение СЛУ методом Дулитла

Ответить
Настройки темы
Разное - [решено] Решение СЛУ методом Дулитла

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


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

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


Вот нашлась программа, подскажите пожалуйста для чего здесь используется массив int ?
Код: Выделить весь код
Program laba4;
uses crt;
const N=3;
type typ_matr=array[1..N,1..N] of real;
type typ_mas=array[1..N] of real;
type typ_m=array[1..N] of integer;
var a: typ_matr;
    b,a0,x: typ_mas;
    int: typ_m;
    i,j,p,k: integer;
    macheps,s: real;
    retcod: byte;
function machineeps: real;
var mach: real;
begin
     mach:=1;
     while 1+mach>1 do
           mach:=mach/2;
     machineeps:=mach*2;
end;
procedure vvod_matr(var Z:typ_matr);
begin
    writeln;
    for i:=1 to N do
      for j:=1 to N do
          begin
             writeln('a[',i,',',j,']');
             readln(Z[i][j]);
          end;
end;
procedure vvod_mass(var Y:typ_mas);
begin
    writeln;
    for i:=1 to N do
    begin
        writeln('b[',i,']');
        read(Y[i]);
    end;
end;
procedure vivod_matr(var Z:typ_matr);
begin
    writeln;
    for i:=1 to N do
    begin
      for j:=1 to N do
      begin
          write(Z[i][j]);
          write('');
      end;
    writeln;
    end;
end;
procedure normmatr(var z0:typ_mas;var Z:typ_matr);
begin
    for i:=1 to N do
    begin
        z0[i]:=Z[1,i];
        for j:=2 to N do
            if abs(Z[j,i])>z0[i] then  z0[i]:=abs(Z[j,i]);
        for j:=1 to N do
            Z[j,i]:=Z[j,i]/z0[i];
    end;
    write('matr A!!!:');
    vivod_matr(A);
end;
procedure dulitdecomp(var Z:typ_matr;
           var z0:typ_mas;
           var int:typ_m;
           var mach:real;
           var ret:byte);
var amax,dd:real;
var imax: integer;
begin
    normmatr(z0,z);
    for i:=1 to N do
        int[i]:=i;
    for k:=1 to N do
    begin
        amax:=abs(Z[int[k],k]);
        for i:=k+1 to N do
         if abs(Z[int[k],k])>amax then
        begin
        amax:=abs(Z[int[k],k]);
        imax:=i;
        end;
      if imax<>k then
      begin
         j:=int[k];
         int[k]:=int[imax];
         int[imax]:=j;
      end;
      if abs(Z[int[k],k])<n*mach
      then begin
      ret:=1; break;
      end;
      for i:=1 to k do
      begin
          for j:=1 to k do
            begin
            A[int[k],i]:=A[int[k],i]-A[int[k],j]*A[int[j],i];
            end;
      end;
      for i:=k+1 to n do
      begin
          for j:=1 to k-n do
          begin
              A[int[k],i]:=A[int[k],i]- A[int[k],j]*A[int[j],i];
          end;
          A[int[k],i]:=A[int[k],i]/A[int[k],k];
       end;
      end;

    end;
procedure dulitslu(var A: typ_matr;
           var b:typ_mas;
           var int: typ_m;
           var x: typ_mas);
begin
    for i:=1 to N do
       x[i]:=b[i];
    for i:=1 to N do
    begin
       if int[i]<>i
       then begin
          s:=x[i];
          x[i]:=x[int[i]];
          x[int[i]]:=s;
       end;
    end;
    for i:=1 to N do
    begin
       s:=0;
       for j:=1 to i-1 do
         s:=s+A[i,j]*x[j];
       x[i]:=(x[i]-s)/A[i,i];
    end;
    for i:=N downto 1 do
    begin
        s:=0;
        for j:=i+1 to N do
            s:=s+A[i,j]*x[i];
         x[i]:=x[i]-s;
    end;
    for i:=1 to N do
        x[i]:=x[i]/a0[i];
   end;
   {Osnovnaya proga}
begin
  clrscr;
   retcod:=0;
macheps:=machineeps;
writeln('macheps=',macheps);
vvod_matr(A);
vvod_mass(b);
vivod_matr(A);
for i:=1 to N do
    write(b[i],'');
dulitdecomp(A,a0,int,macheps,retcod);
if retcod=0 then
     write('Razlozhenie uspechno');
dulitslu(A,b,int,x);
writeln;
writeln('matr A:');
vivod_matr(a);
writeln('MATS A0;');
for i:=1 to n do
      begin
      write(a0[i]);
      write('');
      end;
writeln('reshenie x:');
for i:=1 to n do
      begin
      write(x[i]);
      write('');
      end;
readkey;
end.

Отправлено: 07:10, 05-12-2010

 

Старожил


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

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


Бред какой-то... Одни и те же имена глобальных переменных и параметров процедур явно не способствуют корректной работе программы.

Отправлено: 09:46, 05-12-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


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


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

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


По заданию нужно составить программу в процедурах

Отправлено: 10:18, 05-12-2010 | #3


Старожил


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

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


Это Вы сами написали? Или нашли в инете?

Отправлено: 14:07, 05-12-2010 | #4


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


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

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


Написали) но не это важно, просто подскажите "для чего здесь используется массив int" ну или вообще такие массивы применяются с какой целью

Отправлено: 16:04, 06-12-2010 | #5


Старожил


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

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


Если писали сами - сами и должны знать. Я не пойму, как поведёт себя компьютер, ибо нельзя, чтобы имена параметров функций совпадали с именами глобальных переменных.

Отправлено: 17:28, 06-12-2010 | #6


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


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

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


Дело даже не в программе, уже жалею что ее написал(
Я задаю общий вопрос "В алгоритме Дулитла используется массив Int, i-ый элемент которого фиксирует порядок перестановки строк на i-ом шаре алгоритма "
Впринципе можно обойтись и без этого массива, но вчем удачность его использования? в чем минусы? в чем плюсы?
Так то он занимает лишнюю память в программе, тогда какой смысл в его использовании?

Отправлено: 14:38, 09-12-2010 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Решение СЛУ методом Дулитла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Решение СЛУ Аx=b с нижней треугольной матрицей dasha131 Программирование и базы данных 12 01-12-2010 12:31
VBS/WSH/JS - Считать Установить IP программным методом overlocker Скриптовые языки администрирования Windows 1 30-12-2008 15:19
Вопрос - Не проходят запросы с методом GET snake-as Защита компьютерных систем 2 09-06-2008 02:54
Сжатие страниц методом gzip benya Вебмастеру 13 03-05-2006 02:35
Решение СЛАУ методом квадратного корня JCooper Программирование и базы данных 2 27-11-2003 02:35




 
Переход