Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Сохранение массива/матрицы


Автор: Fitoooooooood 28.12.2014, 15:06
Есть delphi7-считалка обратных матриц, нужно после завершения расчета сохранять в текстовик исходную матрицу и получившуюся обратную, я никак не въеду в это (_сдыд_), прошу помощи у знающих людей. Код прилагается 
Код

unit Main;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    StringGrid1: TStringGrid;
    Label1: TLabel;
    SpinEdit1: TSpinEdit;
    Button1: TButton;
    Button2: TButton;
    StringGrid2: TStringGrid;
    Splitter1: TSplitter;
    Button3: TButton;
    btn1: TButton;
    btn2: TButton;
    procedure Button3Click(Sender: TObject);
    procedure SpinEdit1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  kol: integer;
  obr: array[0..300, 0..300] of real;

implementation

uses Unit1;

{$R *.dfm}

procedure Obratis;
var k, i, j: integer;
    b: array[0..300, 0..300] of real;
begin
 for k:=0 to kol - 1 do
 begin
      for i:=0 to kol - 1 do
       for j:=0 to kol - 1 do
       begin
            if (i=k) and (j=k) then
               b[i,j] := 1/obr[i,j];
               if (i=k) and (j<>k) then
                  b[i,j] := -obr[i,j]/obr[k,k];
               if (i<>k) and (j=k) then
                  b[i,j] := obr[i,k]/obr[k,k];
               if (i<>k) and (j<>k) then
                  b[i,j] := obr[i,j] - obr[k,j] * obr[i,k]/obr[k,k];
       end;
      for i:= 0 to kol - 1 do
       for j:= 0 to kol - 1 do obr[i, j]:= b[i, j];
 end;
end;

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

procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
 kol:= SpinEdit1.Value;
 StringGrid1.ColCount:= kol;
 StringGrid1.RowCount:= kol;
 StringGrid2.ColCount:= kol;
 StringGrid2.RowCount:= kol;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i, j: integer;
begin
 randomize;
 for i:= 0 to kol - 1 do
  for j:= 0 to kol - 1 do
    StringGrid1.Cells[i, j]:= IntToStr(random(100) - 50);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 kol:= 1;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i, j: integer;
    i1, j1: integer;
begin
 i1:= 1;
 j1:= 1;
 try
  for i:= 0 to kol - 1 do
    for j:= 0 to kol - 1 do
    begin
      i1:= i;
      j1:= j;
      obr[i, j]:= StrToFloat(StringGrid1.Cells[j, i]);
    end;
 except
  ShowMessage('Ошибка при вводе числа в столбце ' + IntToStr(j1 + 1) + ' строке ' + IntToStr(i1 + 1) + '!');
  exit;
 end;

 Obratis;
 for i:= 0 to kol - 1 do
  for j:= 0 to kol - 1 do
    StringGrid2.Cells[i, j]:= FloatToStr(Round(1000*obr[j, i])/1000);
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
aboutbox.show;
end;

end.


Автор: imageman 29.12.2014, 23:45
читай тут теорию
http://www.codenet.ru/progr/delphi/Object-Pascal/files.php

вот тут пример (не очень удачный, но понять можно)
http://www.delphisources.ru/pages/faq/faq_delphi_basics/ReadLn.php.html

а вот тут более продвинуто (и правильнее)
http://www.gunsmoker.ru/2011/10/pascal.html

Главное не стесняйся, читай внимательно и вдумчиво :)




Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Sokhraneniye-massiva-matritsy-id549ff2deae201509118b4567#findElement_E7045_54a1bd56ae2015524b8b48e1_0

Автор: imageman 29.12.2014, 23:59
Заодно тебе понадобятся динамические массивы
читай http://rsdn.ru/article/Delphi/Delphi_7_02.xml#ENLCI
и
http://pascalabc.net/downloads/pabcnethelp/LangGuide/Types/dynamicarrays.htm


Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Sokhraneniye-massiva-matritsy-id549ff2deae201509118b4567#findElement_E7045_54a1c0b2ae2015f04e8b47fe_0

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)