Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить определитель матрицы 
:(
    Опции темы
djoin95
  Дата 14.10.2006, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 13.10.2006

Репутация: нет
Всего: нет



Здавствуйте уважаемые эксперты! думаю вы мне поможете  smile  т.к. я уже не понимаю что мне еще надо сделать что это заработало:
Код

procedure TForm1.Button1Click(Sender: TObject);
label 1;
const n=100;
type matrix=array [1..n,1..n] of real;
var a:matrix;
    i,j,k,n1:integer;
    r,det:real;
    ishora:integer;
    t:boolean;

procedure orin_almash;
var k:integer;
    s:real;
    p:integer;
begin p:=1;
      while (a[i+p,j]=0) and (i+p<=n1) do p:=p+1;
      if i+p<=n1 then begin
      for k:=1 to n1 do begin
      s:=a[i,k];
      a[i,k]:=a[i+p,k];
      a[i+p,k]:=s;
      end;
      ishora:=-ishora;end  else begin t:=true;det:=0;end;
end;

begin

1:ishora:=1;

n1:=strtoint(edit1.Text);
for i:=1 to n1 do
for j:=1 to n1 do begin
a[i,j]:=strtofloat(stringgrid1.cells[i,j]);
end;

det:=1;t:=false;

for i:=1 to n1-1 do
for j:=i to n1-1 do begin
if a[i,i]=0  then orin_almash;

r:=-a[j+1,i]/a[i,i];
for k:=i to n1 do begin
a[j+1,k]:=a[j+1,k]+r*a[i,k];
end;end;

for i:=1 to n1 do
det:=det*a[i,i];
det:=ishora*det;
label1.Caption:=floattostr(det);
end;
end.

Что то я взял с интернета что  то сам написал....

Такая картина - на форме лежит stringgrid, UpDown, Edit, Button, label. при изменении updown(которая связана с edit) меняеться колличество строк и столбцов....  
Программа запускаеться, я ввожу матрицу в стринггрид но когда я нажимаю кнопку вылазит ошибка.... 
Может кто нибудь с этим сталкивался....  smile   
Определить это только вершина айсберга.... мне надо будет еще сделать чтобы эта прога решала систему.... но это уже в другом вопросе  smile 
Помогите мне пожалуйсто! а то я в массивах совсем ДУБ!
 smile 
PM MAIL   Вверх
Alexeis
Дата 14.10.2006, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(djoin95 @  14.10.2006,  00:02 Найти цитируемый пост)
но когда я нажимаю кнопку вылазит ошибка.... 

Какая ошибка?
Ну и страшный код! Да еще и оформлен жутко. Вот хоть привел его в читабельный вид. Что хоть должна делать программа?
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    StringGrid1: TStringGrid;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

label 1;

const n=100;

type
  matrix=array [1..n,1..n] of real;

var a      : matrix;
    i, j,
    k, n1  : integer;
    r, det : real;
    ishora : integer;
    t      : boolean;

procedure orin_almash;

var
  k : integer;
  s : real;
  p : integer;

begin
  p:=1;
  while (a[i+p, j]=0) and (i + p <= n1)
  do
    p := p + 1;

  if i + p <= n1
  then
    begin
      for k := 1 to n1
      do
        begin
          s        := a[i,k];
          a[i,k]   := a[i+p,k];
          a[i+p,k] := s;
        end;
      ishora := -ishora;
    end
  else
    begin
      t   := true;
      det := 0;
    end;
end;

begin
1 : ishora := 1;
  n1 := strtoint(edit1.Text);
  for i := 1 to n1
  do
    for j := 1 to n1
    do
      a[i,j] := strtofloat(stringgrid1.cells[i,j]);

  det := 1;
  t   := false;
  for i :=1 to n1 - 1
  do
    for j:=i to n1 - 1
    do
      begin
        if a[i, i] = 0
        then
          orin_almash;

        r := -a[j+1,i] / a[i,i];
        for k := i to n1
        do
          a[j+1, k] := a[j+1, k] + r * a[i, k];
      end;

  for i:=1 to n1
  do
    det:=det * a[i, i];

  det := ishora * det;
  label1.Caption := floattostr(det);
end;

end.




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
anwe
Дата 14.10.2006, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: нет
Всего: 23



Интересно было бы посмотреть на эту ошибку. Наверное выдает ошибку на строке
Код

a[i,j]:=strtofloat(stringgrid1.cells[i,j]);

типа неправильный формат переменной.
Проверь, чтобы все необходимые ячейки были заполены. И не забудь, что определитель вычисляется для одинакового количества строк и столбцов, то есть если у тебя в edit'е стоит 3, то заполни 3 строки и 3 столбца и проверь.
А вообще, используй пошаговое выполнение программы и тогда сам найдешь где она "спотыкается".
PM MAIL   Вверх
Palladin
Дата 14.10.2006, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

Репутация: 3
Всего: 17



Цитата(anwe @  14.10.2006,  00:45 Найти цитируемый пост)
a[i,j]:=strtofloat(stringgrid1.cells[i,j]);


может во флот не может перевети здесь потомучто нужно вместо , указывать . ну т.е. вместо, допустим, 2,23 писать 2.23



--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
anwe
Дата 14.10.2006, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: нет
Всего: 23



По этому поводу как раз наоборот: надо указывать запятую, а не точку.
PM MAIL   Вверх
Palladin
Дата 15.10.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

Репутация: 3
Всего: 17



Ну почти всегда так и надо, но иногда бывают какие-то лаги(вернее не лаги а системы) допустим у меня в технаре была такая проблема, я вводил с точкой и летела ошибка, потом понял это и начал вводить с запятой и всё заработало, вобщем хз smile  


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
djoin95
Дата 16.10.2006, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 13.10.2006

Репутация: нет
Всего: нет



Понял почему ошибку выдавал... но не понял как её устранить...
В стринг гриде нумерация строк и столбцов начинаеться с 0... а у меня в коде начинаеться с 1 и поэтому программа на один столбец и строку больше пытаеться прочитать... а там нечего нет, вот и ошибка... числа надо вводить с запятой.... (необезательно брать дробные числа)... кто что думает на счет этого.... помогите плиззз.
можно на icq - 206766171. smile 
PM MAIL   Вверх
anwe
Дата 16.10.2006, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: нет
Всего: 23



А! Другими словами ты хочешь сказать, что свойства грида FixedCols и FixedRows равны нулю? Тогда действительно
Цитата

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

Но до этого надо было догадаться, имею ввиду тех, кто читает твой вопрос. Я понял, что если у тебя написано
Код

n1:=strtoint(edit1.Text);
for i:=1 to n1 do
for j:=1 to n1 do begin
a[i,j]:=strtofloat(stringgrid1.cells[i,j]);
end;
 значит фиксированных строк и колоно по одной.
Цитата

кто что думает на счет этого.... помогите плиззз

На счет чего? Где вопрос?
PM MAIL   Вверх
~FoX~
Дата 17.10.2006, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



Код

a[i,j] := strtofloat(stringgrid1.cells[i-1,j-1]);

Хотя проще сделать чтоб массив начинался от нуля...

Это сообщение отредактировал(а) ~FoX~ - 17.10.2006, 14:31


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
djoin95
Дата 17.10.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 13.10.2006

Репутация: нет
Всего: нет



Всем огромное спасибо код заработал!
Но я все же не понял каким образом...

Для чего нужен этот код? 
Код

....
det:=1;t:=false;
{Здесь не посредственно преобразуем  вид матрицы в треугольный}
for i:=1 to n1-1 do
for j:=i to n1-1 do begin
if a[i,i]=0  then orin_almash;

r:=-a[j+1,i]/a[i,i];
for k:=i to n1 do begin
a[j+1,k]:=a[j+1,k]+r*a[i,k];
end;end;
....


А когда я заполняю одну строку нулями вылазит ошибка....
вот здесь:
Код

r:=-a[j+1,i]/a[i,i];


хотя в коде как я понял для этого есть процедура:
Код

procedure orin_almash;
var k:integer;
    s:real;
    p:integer;
begin p:=1;
      while (a[i+p,j]=0) and (i+p<=n1) do p:=p+1;
      if i+p<=n1 then begin
      for k:=1 to n1 do begin
      s:=a[i,k];
      a[i,k]:=a[i+p,k];
      a[i+p,k]:=s;
      end;
      ishora:=-ishora;end  else begin t:=true;det:=0;end;
end;


Это сообщение отредактировал(а) djoin95 - 17.10.2006, 15:02
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0664 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.