Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 13.02.2011, 16:34   #1 (permalink)
puzinka
Новичок
 
Регистрация: 13.02.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Помогите, пожалуйста, с программой на языке Паскаль

Задание:Программа должна находить численные решения системы линейных уравнений. Программа считывает систему из входного файла (формат которого указан в Приложении 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!- у меня так не получается и не могу понять почему, помогите пожалуйста!!заранее спасибо!
puzinka вне форума   Ответить с цитированием

Старый 13.02.2011, 16:34
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

В этих постах есть много интересного по вашему запросу

Помогите, пожалуйста, с программой
Помогите, пожалуйста, с программой в Паскале
Помогите, пожалуйста, с программой
Помогите пожалуйста с программой
Помогите, пожалуйста, с программой на языке делфи
Помогите, пожалуйста, с программой на языке СИ

Старый 13.02.2011, 17:15   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от puzinka Посмотреть сообщение
Программу делала не я поэтому ничего не понимаю.Нужно сделать 2 матрицы, одну программа должна считать, а 2-я должна быть ошибочная, программа должна выводить 'invalid input matrix!- у меня так не получается и не могу понять почему, помогите пожалуйста!!заранее спасибо!
Ну так задайте в "ошибочном" файле матрицу из 8 или более строк - она и сообщит об ошибке.
Vladimir_S вне форума   Ответить с цитированием
Старый 14.02.2011, 19:21   #3 (permalink)
puzinka
Новичок
 
Регистрация: 13.02.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Пробовала так делать, ничего не получается.
puzinka вне форума   Ответить с цитированием
Старый 14.02.2011, 21:11   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

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

Сразу скажу - помочь с дальнейшей отладкой программы не смогу, и вот почему. Есть общепринятый порядок расположения индексов матрицы A[m,n]: сначала - номер строки (m), потом - номер столбца (n). Автору же программы непременно захотелось повыпендриваться, и он (она) задает обратную нумерацию: столбец-строка. Можно, конечно, и так, но мне, например, чтобы разобрать такую программу нужно вывернуть мозги наизнанку, к чему расположения не чувствую. Извините.
Vladimir_S вне форума   Ответить с цитированием
Старый 15.02.2011, 09:03   #5 (permalink)
puzinka
Новичок
 
Регистрация: 13.02.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

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

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.