Показать сообщение отдельно
Старый 14.10.2011, 21:45   #1
Averakot
AnyKey`щик
 
Регистрация: 14.10.2011
Сообщений: 1
Написано 0 полезных сообщений
(для 0 пользователей)
Вопрос Помогите написать прогу для решения матриц)

Да, я знаю на просторах интернета такие есть, но мне хочется написать с выводом хода решения, просто чисто для себя. В паскале смогла сделать это без проблем двумя способами (Обратная матрица и метод Крамера), с помощью самых простых операторов, которые мы вот вот выучили в этом месяце.
Помогите пожалуйста переписать в MidletPascal метод крамера, а уж по образцу я и разберусь со вторым, а потом может и гаусса запихну в одно приложение.
program pr1;
var 
a,b,c,d,e,f,g,i,p,m,n,v,as,at,ak,ad:integer;
per,vto,tre:real;
begin
write 
('Vvedite A11= ');
readln (a);
write ('Vvedite A12= ');
readln (b);
write ('Vvedite A13= ');
readln (c);
write ('Vvedite A21= ');
readln (d);
write ('Vvedite A22= ');
readln (e);
write ('Vvedite A23= ');
readln (f);
write ('Vvedite A31= ');
readln (g);
write ('Vvedite A32= ');
readln (i);
write ('Vvedite A33= ');
readln (p);
write ('Vvedite B1= ');
readln(m);
write ('Vvedite B2= ');
readln (n);
write ('Vvedite B3= ');
readln (v);
  as:=(
a*e*p)+(b*f*g)+(d*i*c)-(g*e*c)-(d*b*p)-(a*f*i);
  
ak:=(m*e*p)+(b*f*v)+(n*i*c)-(v*e*c)-(n*b*p)-(m*f*i);
  
ad:=(a*n*p)+(m*f*g)+(d*v*c)-(g*n*c)-(d*m*p)-(a*f*v);
  
at:=(a*e*v)+(b*n*g)+(d*i*m)-(g*e*m)-(d*b*v)-(a*n*i);
per:=ak/as;
vto:=ad/as;
tre:=at/as;
writeln ('Opredelitel=',a*e*p,'+',b*f*g,'+',d*i*c,'-',g*e*c,'-',d*b*p,'-',a*f*i,'=',as);
writeln ('delta x1=',m*e*p,'+',b*f*v,'+',n*i*c,'-',v*e*c,'-',n*b*p,'-',m*f*i,'=',ak);
writeln ('delta x2=',a*n*p,'+',m*f*g,'+',d*v*c,'-',g*n*c,'-',d*m*p,'-',a*f*v,'=',ad);
writeln ('delta x3=',a*e*v,'+',b*n*g,'+',d*i*m,'-',g*e*m,'-',d*b*v,'-',a*n*i,'=',at);
writeln ('X1=',per:2:1,'  X2=',vto:2:1,'  X3=',tre:2:1);
end
Пока что из выше написанного кода я смогла реализовать только ввод переменных потом дело стопорится на том что мне нужна кнопка "ок" чтобы он посчитал по вот этим формулам
as:=(a*e*p)+(b*f*g)+(d*i*c)-(g*e*c)-(d*b*p)-(a*f*i);
  ak:=(m*e*p)+(b*f*v)+(n*i*c)-(v*e*c)-(n*b*p)-(m*f*i);
  ad:=(a*n*p)+(m*f*g)+(d*v*c)-(g*n*c)-(d*m*p)-(a*f*v);
  at:=(a*e*v)+(b*n*g)+(d*i*m)-(g*e*m)-(d*b*v)-(a*n*i);
per:=ak/as;
vto:=ad/as;
tre:=at/as;
а дальше в новом окне вывел решение:
writeln ('Opredelitel=',a*e*p,'+',b*f*g,'+',d*i*c,'-',g*e*c,'-',d*b*p,'-',a*f*i,'=',as);
writeln ('delta x1=',m*e*p,'+',b*f*v,'+',n*i*c,'-',v*e*c,'-',n*b*p,'-',m*f*i,'=',ak);
writeln ('delta x2=',a*n*p,'+',m*f*g,'+',d*v*c,'-',g*n*c,'-',d*m*p,'-',a*f*v,'=',ad);
writeln ('delta x3=',a*e*v,'+',b*n*g,'+',d*i*m,'-',g*e*m,'-',d*b*v,'-',a*n*i,'=',at);
writeln ('X1=',per:2:1,'  X2=',vto:2:1,'  X3=',tre:2:1);
p.s.
и не да убейте меня за количество переменных, по другому как написать я не знаю пока что, да и сдается мне тогда я не смогу вывести решение так как мне нужно =)
(Offline)
 
Ответить с цитированием