2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Метод Крамера
Сообщение05.02.2008, 16:12 
Добрый день!

Хочу написать программу реализующую решение СЛУ методом Крамера.
Споткнулся на первом же шаге - не получается написать алгоритм реализующий
вычисление элементов S_n. Точнее, я написал алгоритм для вычисления элементов при n=10 в таком виде:

Procedure Perestanovka10;
Label 2,1;
var i1,i2,i3,i4,i5,i6,i7,i8,i9,i10:byte;
t:longint;
Begin
t:=0;
for i1:=1 to N do begin Per[1]:=i1; for i2:=1 to N do begin if i1<>i2 then begin Per[2]:=i2; for i3:=1 to n do begin if (I3<>i1) and (I3<>i2) then
begin Per[3]:=i3; for i4:=1 to n do begin if (i4<>i3)and(i4<>i2)and(i4<>i1) then begin Per[4]:=i4; for i5:=1 to n do
begin if (i5<>i1)and(i5<>i2)and(i5<>i3)and(i5<>i4) then begin Per[5]:=I5; for i6:=1 to n do begin if (i6<>i1)and(i6<>i2)and(i6<>i3)and(i6<>i4) and(i6<>i5) then
begin Per[6]:=I6;for i7:=1 to n do begin if (i7<>i1)and(i7<>i2)and(i7<>i3)and(i7<>i4) and(i7<>i5)and(i7<>i6) then begin Per[7]:=I7; for i8:=1 to n do
begin if (i8<>i1)and(i8<>i2)and(i8<>i3)and(i8<>i4) and(i8<>i5)and(i8<>i6)and(i8<>i7) then begin Per[8]:=I8; for i9:=1 to n do begin if (i9<>i1)and(i9<>i2)and(i9<>i3)and(i9<>i4) and(i9<>i5)and(i9<>i6)and(i9<>i7)and(i9<>i8) then
begin Per[9]:=I9;for i10:=1 to n do begin if (i10<>i1)and(i10<>i2)and(i10<>i3)and(i10<>i4) and(i10<>i5)and(i10<>i6)and(i10<>i7)and(i10<>i8)and(i10<>i9) then begin
Per[10]:=I10;
if ProverkaTopologii(n)=true then begin t:=1;goto 2;end;
end;end;end;end;end;end;end;end;end;end;end;end;end;end;end;end;end;end;end;
goto 1;

2:

1:
end;


Но меня интересует не конкретный, а алгоритм вычисляющий элементы S_nдля произвольного n. Такой вообще возможен?

 
 
 
 
Сообщение05.02.2008, 19:24 
Аватара пользователя
Поставленная Вама задача называется перебором перестановок.
http://rain.ifmo.ru/cat/view.php/vis/combinations/permutations-2000
http://algolist.manual.ru/maths/combinat/sequential.php

 
 
 
 
Сообщение05.02.2008, 21:06 
Благодарю за помошь, обязательно изучу алгоритм в свободное время. У меня сейчас возник немного другой вопрос, связанный уже с программированием. Пока думал над этой задачей, то в голову пришло одно из следующих возможных решений: написать программу которая по заданному n могла бы писать текст самого испоняемого кода т.е. написать программу которая умеет написать код на языке паскаль, реализующий перебор всех перестановок., и сохранить его скажем в текстовом файле, Затем его можно было бы легко вставить в окно исполняемого модуля и запустить программу на выполнение. Но опять же, проблема в том, что этот код вначале нужно сгенерировать в одной программе, затем вставить в окно другой программы и после откомпилировать. Так вот, я хочу спросить -а нет ли в delphi какого либо встроенного механизма, позволяющего изменять текст какой либо из процедур написанных программистом, в процессе выполнения самой программы? То есть, скажем так - программа "знает " - что в момент вызова определённой процедуры, нужно обратиться к определённому файлу, который в свою очередь организован так, что даёт возможность выполнить как бы различнные процедуры. В зависимости от кода этого файла?

 
 
 
 
Сообщение06.02.2008, 01:39 
Аватара пользователя
:evil:
То, что Вы написали, Amigo, прочитать совершенно невозможно. этодажехужечемподобныйтекст.

(1) Обычно никто не обижается, когда указывается, на каком языке программа.

(2) Программы на форуме лучше оформлять при помощи тега [cоde][/cоde]

(3) Обычно программы имеют чётко выраженную скобочную структуру. Каждому открывающему элементу программы соответствует закрывающий. Это скобочную структуру принято подчёркивать отступом:

Код:
procedure myproc;
  var
     p, q: int;
begin
  p := q;
  if p = q then begin
    writeln("good");
  end else begin
    writeln("bad");
  end
end;

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

(4) Полезно давать информативные имена переменным. Скажем, имена row и col для координаты позиции на экране приводят к меньшему числу ошибок, чем j72, j73.

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group