2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Метод Крамера
Сообщение05.02.2008, 16:12 


11/03/06
236
Добрый день!

Хочу написать программу реализующую решение СЛУ методом Крамера.
Споткнулся на первом же шаге - не получается написать алгоритм реализующий
вычисление элементов 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 
Заслуженный участник
Аватара пользователя


01/08/06
3131
Уфа
Поставленная Вама задача называется перебором перестановок.
http://rain.ifmo.ru/cat/view.php/vis/combinations/permutations-2000
http://algolist.manual.ru/maths/combinat/sequential.php

 Профиль  
                  
 
 
Сообщение05.02.2008, 21:06 


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

 Профиль  
                  
 
 
Сообщение06.02.2008, 01:39 
Заслуженный участник
Аватара пользователя


17/10/05
3709
: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 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group