Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите, пожалуйста, с программой на языке Паскаль (http://www.tehnari.ru/f41/t47420/)

puzinka 13.02.2011 16:34

Помогите, пожалуйста, с программой на языке Паскаль
 
Задание:Программа должна находить численные решения системы линейных уравнений. Программа считывает систему из входного файла (формат которого указан в Приложении 1).
При запуске программа запрашивает имя входного и выходного файлов. Затем программа запрашивает переменные с заданными диапазонами. Результат сохраняет в выходном файле.
Количество переменных должно быть не более 7. Количество уравнений не более 7. Программа находит численное решение с точностью до 0,1. Максимальный размер диапазона - 3.
есть программа:
Цитата:

uses crt;
var
i, j, count, k, l, exit : byte;
x, y : array[1..7] of extended;
c : array[1..8,1..7] of real;
matr : array[1..7,1..7] of real;
a, b, buf : real;
z : integer;
min, sum : extended;
f : text;
flag : boolean;
name, str : string;

begin
repeat
flag:=true;
clrscr;

writeln('Input file?');
readln(name);
assign(f,name);
reset(f);
count:=0;

{определение количества сток в текстовом файле}
repeat
readln(f,str);
inc(count);
str:='';
until eof(f);

close(f);


if count >7 then
begin
flag:=false;
writeln('invalid input matrix!');
end
else
begin
reset(f);
for j:=1 to count do
for i:=1 to count+1 do read(f,c[i,j]);
close(f);
end;
until flag;



writeln('output file?');
readln(name);

for j:=1 to count do
for i:=1 to count do
begin
if i=j then
matr[i,j]:=(c[count+1,j] / c[i,j])
else
matr[i,j]:= -(c[i,j] / c[j,j]);
end;

exit:=0;
z:=0;
for j:=1 to count do y[j]:=0;

for i:=2 to count do x[i]:=0;

repeat
for j:=1 to count do
begin
x[j]:=0;
for i:=1 to count do
if i<>j then x[j]:=x[j]+matr[i,j]*x[i];
x[j]:=x[j]+matr[j,j]
end;

exit:=1;
for j:=1 to count do
if (round(x[j]*10))<>(round(y[j]*10)) then exit:=0;

if exit = 0 then
for j:=1 to count do y[j]:=x[j];

inc(z);
if z>100 then exit:=2;
until exit<>0;


if exit = 1 then
begin
assign(f,name);
rewrite(f);
for i:=1 to count do writeln(f,x[i]:0:3);
writeln('finish');
end
else
writeln('System doesn''t converge');

readkey;
close(f);
end.
Программу делала не я поэтому ничего не понимаю.Нужно сделать 2 матрицы, одну программа должна считать, а 2-я должна быть ошибочная, программа должна выводить 'invalid input matrix!- у меня так не получается и не могу понять почему, помогите пожалуйста!!заранее спасибо!

Vladimir_S 13.02.2011 17:15

Цитата:

Сообщение от puzinka (Сообщение 465958)
Программу делала не я поэтому ничего не понимаю.Нужно сделать 2 матрицы, одну программа должна считать, а 2-я должна быть ошибочная, программа должна выводить 'invalid input matrix!- у меня так не получается и не могу понять почему, помогите пожалуйста!!заранее спасибо!

Ну так задайте в "ошибочном" файле матрицу из 8 или более строк - она и сообщит об ошибке.

puzinka 14.02.2011 19:21

Пробовала так делать, ничего не получается.

Vladimir_S 14.02.2011 21:11

Цитата:

Сообщение от puzinka (Сообщение 466588)
Пробовала так делать, ничего не получается.

А - ну всё ясно. Уж так программа написана.
Если матрица "неправильная", то цикл задания имени файла повторяется, но начинается этот цикл с команды clrscr, то есть очистки экрана. Поэтому программа действительно генерирует сообщение 'invalid input matrix!' и... тут же его стирает!
Выход - выведите команду clrscr за цикл, т.е. перетащите её в позицию сразу за первым begin, так, чтобы оператор repeat шел после неё.

Сразу скажу - помочь с дальнейшей отладкой программы не смогу, и вот почему. Есть общепринятый порядок расположения индексов матрицы A[m,n]: сначала - номер строки (m), потом - номер столбца (n). Автору же программы непременно захотелось повыпендриваться, и он (она) задает обратную нумерацию: столбец-строка. Можно, конечно, и так, но мне, например, чтобы разобрать такую программу нужно вывернуть мозги наизнанку, к чему расположения не чувствую. Извините.

puzinka 15.02.2011 09:03

Понятно, я тоже так поняла что с программой что то не так.Спасибо вам за помощь попробую исправить, может быть что-нибудь и получиться.)


Часовой пояс GMT +4, время: 19:36.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.