forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Помогите написать прогу для решения матриц) (http://forum.boolean.name/showthread.php?t=15656)

Averakot 14.10.2011 21:45

Помогите написать прогу для решения матриц)
 
Да, я знаю на просторах интернета такие есть, но мне хочется написать с выводом хода решения, просто чисто для себя. В паскале смогла сделать это без проблем двумя способами (Обратная матрица и метод Крамера), с помощью самых простых операторов, которые мы вот вот выучили в этом месяце. :rolleyes:
Помогите пожалуйста переписать в MidletPascal метод крамера, а уж по образцу я и разберусь со вторым, а потом может и гаусса запихну в одно приложение.
PHP код:

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.
и не да убейте меня за количество переменных, по другому как написать я не знаю пока что, да и сдается мне тогда я не смогу вывести решение так как мне нужно =)

Reks888 14.10.2011 22:17

Ответ: Помогите написать прогу для решения матриц)
 
Оу щи, это отправляется на govnokod.ru
Шутка, выучи массивы и все станет очень просто.
И к чему все эти описания если все что надо это кнопка ок которая пускает дальше?
ЗЫ Midlet Pascal не знаю, подсказать как это сделать не могу

bormotan 14.10.2011 22:19

Re: Помогите написать прогу для решения матриц)
 
Вложений: 1
а влом было сделать два двумерных массива ???? 3 на 3 каждый

когда я загонялся на паскале с матрицами , я был менее жестокий к своему мозгу . все делал через матрицы . ща поищу старые исходники

Код:

program pr1;
var i,j:integer;
      f:integer;{типа идентификатора формы}
    a:array[1..3,1..3] of integer;{}
    b:array[1..3] of integer;
    ok:command;
begin
showform;
ok:=createcommand('ввод',CM_OK,1);
addcommand(ok);
for i:=1 to 3 do
for j:=1 to 3 do
begin
f:=formaddtextfield('Ввести элемент матрицы','',20,TF_NUMERIC);  //20 - макс количество цифр в каждом элементе
a[i,j]:=stringtointeger(formgettext(f));
repeat
delay(100);
until getclickedcommand=ok;
end;{ввод массива в мидлетпаскале}
delay(2000);
end.

удобством код не отличается , но работает . я проверил. и напиши поподробнее . дальше влом писать , ща скину свои исходники определителя матрицы

вот намного более простые исходники на паскале


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot