Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2011, 13:21   #1
Alexandr000006
Пользователь
 
Регистрация: 08.03.2011
Сообщений: 20
По умолчанию операции с матрицами

Не работает Button9---поиск определителя матрицы!!помогите найти ошибку пожалуйста,вот код программы


Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, Buttons,Xpman;

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    Matrix_A: TStringGrid;
    Matrix_B: TStringGrid;
    Matrix_C: TStringGrid;
    Edit1: TEdit;
    Label1: TLabel;
    Button1: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button9: TButton;
    Edit2: TEdit;
    procedure BitBtn1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure vivod;
    procedure vivodA;
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;
  const max=10;
type Matrix= array[1..max,1..max] of Real;


var
  Form1: TForm1;
  N,i,j,k:Integer;
  A,B,C,D:Matrix;

implementation

{$R *.dfm}
procedure TForm1.vivod;
begin
// формирование матрицы А
      for i:=1 to N do
           for j:=1 to N do
           try
               A[i,j]:=strToFloat(Matrix_A.Cells[j-1,i-1]);
               except
               showmessage('Матрица А записанна не верно');
                Matrix_A.Cells[j-1,i-1]:='';
                end;
// формирование матрицы B
      for i:=1 to N do
           for j:=1 to N do
           try
               B[i,j]:=strToFloat(Matrix_B.Cells[j-1,i-1]);
               except
               showmessage('Матрица B записанна не верно');
                Matrix_B.Cells[j-1,i-1]:='';
                end;
               end;
procedure TForm1.vivodA;
begin
// формирование матрицы А
      for i:=1 to N do
           for j:=1 to N do
               try
               A[i,j]:=strToFloat(Matrix_A.Cells[j-1,i-1]);
               except
               showmessage('Матрица А записанна не верно');
                Matrix_A.Cells[j-1,i-1]:='';
                end;
                end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
try
N:=StrToInt(Edit1.Text);
except
showmessage('Неправильный ввод');
Edit1.SelectAll;
Edit1.Text:='';
end;
// задание размеров матрицы А,В,C
Matrix_A.RowCount:=N;
Matrix_A.ColCount:=N;
Matrix_B.RowCount:=N;
Matrix_B.ColCount:=N;
Matrix_C.RowCount:=N;
Matrix_C.ColCount:=N;
end;





procedure TForm1.Button5Click(Sender: TObject);
begin
vivodA;
for i:=1 to N do
  for j:=1 to N do
  C[i,j]:=A[j,i];
  for j:=1 to N do
  for i:=1 to N do
  Matrix_C.Cells[j-1,i-1]:=FloatTostr(C[i,j]);
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
randomize;
for i:=1 to N do
for j:=1 to N do
begin
A[i,j]:=random(111);
Matrix_A.Cells[j-1,i-1]:=FloatToStr(A[i,j]);
end;
for i:=1 to N do
for j:=1 to N do
begin
B[i,j]:=random(111);
Matrix_B.Cells[j-1,i-1]:=FloatToStr(B[i,j]);
end;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
// формирование матрицы D
      for k:=1 to N do
           for i:=1 to N do
               D[k,i]:=0;
 vivod;
 for k:=1 to N do
 for i:=1 to N do
 begin
  for j:=1 to N do
  D[k,i]:=D[k,i]+A[k,j]*B[j,i];
  end;
  for i:=1 to N do
  for j:=1 to N do
  Matrix_C.Cells[j-1,i-1]:=FloatTostr(D[i,j]);
end;

procedure TForm1.Button9Click(Sender: TObject);
procedure Per(k,n:integer;var A:Matrix; var p:integer);
//перестановка строк, если главный элемент=0
var z:Real;j,i:integer;
begin
z:=abs(a[k,k]);i:=k;p:=0;
for j:=k+1 to n-1 do
   begin
     if abs(a[j,k])>z then
        begin
          z:=abs(a[j,k]);i:=j;
          p:=p+1;//счетчик перестановок
        end;
   end;
if i>k then
for j:=k to n-1 do
   begin
     z:=a[i,j];
     a[i,j]:=a[k,j];
     a[k,j]:=z;
   end;
end;
function Znak(p:integer):integer;
//при перестановке меняется знак определителя, надо его отследить
begin
if p mod 2=0 then
result:=1 else result:=-1;
end;
procedure Opr(n:integer;var A:Matrix;var det:real);
var k,i,j,p:integer;r:real;
begin
det:=1.0;
for k:=0 to n-1 do
  begin
    if a[k,k]=0 then Per(k,n,a,p);//перестановка строк
    det:=znak(p)*det*a[k,k];//вычисление определителя
    for j:=k+1 to n-1 do //пересчет коэффициентов
       begin
         r:=a[j,k]/a[k,k];
         for i:=k to n-1 do
         a[j,i]:=a[j,i]-r*a[k,i];
       end;
  end;
end;
var k,j,i:integer;
    A:Matrix;
    det:real;
begin
vivodA;
Opr(n,a,det);//определитель системы
Edit2.Text:=FloatToStr(det);
end;
end.
Alexandr000006 вне форума Ответить с цитированием
Старый 26.07.2011, 13:27   #2
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Код:
var k,j,i:integer;
    A:Matrix;
    det:real;
begin
vivodA;
Opr(n,a,det);//определитель системы
Edit2.Text:=FloatToStr(det);
end;
А что это? И почему оно не в процедуре?
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 26.07.2011, 13:34   #3
Alexandr000006
Пользователь
 
Регистрация: 08.03.2011
Сообщений: 20
По умолчанию

если это поместить в процедуру то выскакивает ошибка ,что нужен begin
Alexandr000006 вне форума Ответить с цитированием
Старый 26.07.2011, 13:45   #4
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Никаких bigin'ов. Вы в процедуру обработчика кнопки поместите Компилятор не понимает что вы от него хотите.
И вообще зачем для поиска определителя матрицы целых 9 кнопок? Что у вас там на форме?
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 26.07.2011, 13:54   #5
Alexandr000006
Пользователь
 
Регистрация: 08.03.2011
Сообщений: 20
По умолчанию

ну вот сама прога

а процедуры до обработчика кнопки вставить тогда?
Вложения
Тип файла: rar операции с матрицами.rar (206.0 Кб, 12 просмотров)

Последний раз редактировалось Stilet; 26.07.2011 в 14:17.
Alexandr000006 вне форума Ответить с цитированием
Старый 26.07.2011, 14:17   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Не работает Button9
Ошибаешся - работает. Просто ее код состоит только из
Код:
Edit2.Text:=FloatToStr(det);
Ты в обработчике не вызываешь процедуру Opr
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.07.2011, 14:34   #7
Alexandr000006
Пользователь
 
Регистрация: 08.03.2011
Сообщений: 20
По умолчанию

вызвал,работает но ответ не правильный!!
Alexandr000006 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операции с матрицами в паскале aKus Паскаль, Turbo Pascal, PascalABC.NET 0 20.05.2010 18:44
Операции с матрицами . Alex_sim Общие вопросы .NET 11 24.04.2010 21:18
Операции с матрицами. Делфи nevnuff Помощь студентам 2 21.12.2009 13:03
C#: операции с матрицами Sianessa Помощь студентам 12 13.05.2009 22:22