IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Слау методом простых итерации. Не решаемое?
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Здравствуйте все!

Есть задание:
Решить систему линейных алгебраических уравнений методом простых итерации с точностью e=0,001.
x1+5*x2-x3=7
x1-x2+5*x3=7
8*x1+x2+x3=26

Вот мое решение:
uses crt;
const n=3;
eps=0.001;
a:array[1..n,1..n] of shortint=(( 1,5,-1),(1,-1,5),( 8,1,1));
b:array[1..n] of shortint=(7,7,26);

var x:array[1..n,1..n] of real;
i,j,p,k:byte;
x1,x2,x3,tmp1,tmp2,tmp3:real;
begin
clrscr;
writeln('система уравнений:');
for i:=1 to n do
begin
for j:=1 to n do write(a[i,j]:3);
writeln(b[i]:3);
end;
{проверка диоганалей}
for i:=1 to n do
begin
p:=0;
for j:=1 to n do
if i<>j then p:=p+a[i,j];
if a[i,i]<p then break;
end;
{перестановка строк}
for i:=n downto 2 do
begin
for j:=1 to n do
begin
p:=a[i,j];
a[i,j]:=a[i-1,j];
a[i-1,j]:=p;
end;
p:=b[i];
b[i]:=b[i-1];
b[i-1]:=p
end;
for i:=1 to n do
begin
for j:=1 to n do write(a[i,j]:3);
writeln(b[i]:3);
end;
writeln;
{искл. диагоналей}
for i:=1 to n do
begin
j:=1;k:=0;
while (k<=n) and (j<=n) do
if j<>i then
begin
inc(k);
x[i,k]:=a[i,j]/-a[i,i];
inc(j);
end
else inc(j);
x[i,n]:=b[i]/a[i,i];
end;
for i:=1 to n do
begin
for j:=1 to n do write(x[i,j]:7:3);
writeln;
end;
x1:=0;x2:=0;x3:=0;k:=1;
repeat
tmp1:=x[k,1]*x2+x[k,2]*x3+x[k,3];
inc(k);
tmp2:=x[k,1]*x1+x[k,2]*x3+x[k,3];
inc(k);
tmp3:=x[k,1]*x1+x[k,2]*x2+x[k,3];
k:=1;
x1:=tmp1;x2:=tmp2;x3:=tmp3;
writeln('x1=',x1:6:3,' x2=',x2:6:3,' x3=',x3:6:3);
until (x1<=eps)or(x2<=eps)or(x3<=eps);
readln;
end.

Проблема заключается в том что последний цикл не решается, т.е. сам пример. Решил проверить в ручную и тоже самое.
Неужели это система не решаемое? или я что-то на путал? Объясните пожалуйста.

П.С. если уж она не решается, подскажите ка закончить программу для сдачи преподу.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Цитата
Я ни секунды не возражаю. Все, что я сказал - это что тот кусок не оказывает ни малейшего воздействия на выполнение программы. Что его нет, что он есть - результат один. Разница только во времени выполнения (без него быстрее)).

Как не оказывает!?
А если в другом примере не нужно переставлять строки, и так все устраивает. Тогда действие перестановки строки будет не нужной и приводящая к неправильному решению.
Цитата
Если делаешь проверку, то:
1. делай ее правильно;
2. используй ее результаты как-то.

Ее результат используется, нужна ли перестановка или нет
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата(Vitik @ 12.05.2011 9:38) *
Как не оказывает!?
Зачем так эмоционально? smile.gif
Компьютер не реагирует на эмоции, криком ничего с ним не добьешься.

Цитата
Ее результат используется, нужна ли перестановка или нет
Еще раз тебе говорю - вот этот кусок:
     {проверка диоганалей}
for i:=1 to n do
begin
p:=0;
for j:=1 to n do
if i<>j then p:=p+a[i,j];
if a[i,i]<p then break;
end;
- совершенно никакого действия на последующее выполнение программы не оказывает. Чем возмущаться, лучше проверь.
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 30.04.2024 13:01
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name