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

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

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

> Слау методом простых итерации. Не решаемое?
Vitik
сообщение 11.05.2011 10:18
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Vitik
сообщение 12.05.2011 9:38
Сообщение #2





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

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


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

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

Ее результат используется, нужна ли перестановка или нет
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
-Lapp-
сообщение 12.05.2011 11:11
Сообщение #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;
- совершенно никакого действия на последующее выполнение программы не оказывает. Чем возмущаться, лучше проверь.
 К началу страницы 
+ Ответить 
Vitik
сообщение 12.05.2011 14:03
Сообщение #4





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

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


Цитата
Еще раз тебе говорю - вот этот кусок:
     {проверка диоганалей}
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;
- совершенно никакого действия на последующее выполнение программы не оказывает. Чем возмущаться, лучше проверь.

Верно данный кусок в моем примере никакого действия на последующее выполнение программы не оказывает. ОДНАКО, как я говорил, это черновой вариант и пишу под общий тип. Т.е. этот кусок будет у меня подпрограммой и выполнять проверку для других однотипных задач, где требуется перестановка, а где нет.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 12.05.2011 23:46
Сообщение #5


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Vitik @ 12.05.2011 15:03) *
Верно данный кусок в моем примере никакого действия на последующее выполнение программы не оказывает.
Что это верно, я знал с самого начала, мне твое подтверждение не требовалось.

Цитата
ОДНАКО, как я говорил, это черновой вариант и пишу под общий тип. Т.е. этот кусок будет у меня подпрограммой и выполнять проверку для других однотипных задач, где требуется перестановка, а где нет.
Vitik, не надо нести чушь в оправдание.
Я видел только этот твой код и говорил, естественно, только про него.
Я указал на факт, на что ты отреагировал так: "Как не оказывает!?" Верно?
А теперь ты пишешь, это типа была часть плана?..
Простое "спасибо" за указание на ошибку тут было бы ГОРАЗДО уместнее.

Может, ты и научишься программировать. Но ОЧЕНЬ тебе рекомендую научиться признавать свои ошибки и не лезть в бутылку, когда тебе стараются помочь. В этом нет ничего страшного, и - главное - всем будет хорошо.

Успехов тебе.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



- Текстовая версия 18.07.2025 10:10
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"