Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.02.2019, 16:10
somepower somepower вне форума
Прохожий
 
Регистрация: 14.02.2019
Сообщения: 8
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Работа с квадратными матрицами

Здравствуйте ! Помогите пожалуйста с задачей:
Даны две действительные квадратные матрицы порядка n. Получить новую матрицу прибавлением к элементам каждого столбца 1-й матрицы произведения элементов соответствующих строк 2-й матрицы.
Сидел ломал голову, вроде все сделал но в чем-то есть ошибка, числа считает не правильно.
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    G1: TStringGrid;
    Button1: TButton;
    SpinEdit1: TSpinEdit;
    Label1: TLabel;
    G2: TStringGrid;
    Label2: TLabel;
    Label3: TLabel;
    G3: TStringGrid;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure SpinEdit1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private { Private declarations }
    N : integer;
    function UMN(k : integer) : integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Randomize;
end;

procedure TForm1.SpinEdit1Change(Sender: TObject);
var i, j : integer;
    G    : TStringGrid;
begin
 N := SpinEdit1.Value;
 for i := 0 to ControlCount - 1 do
  if Controls[i] is TStringGrid
   then begin
         G := (Controls[i] as TStringGrid);
         G.ColCount := N;
         G.RowCount := G.ColCount;
         for j := 0 to N - 1 do
          begin
           G.Cols[j].Clear;
           G.ColWidths[j] := Round(G.RowHeights[0] * 1.5);
          end;
        end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i, j : integer;
begin
 for i := 0 to N - 1 do
  for j := 0 to N - 1 do
   begin
    G1.Cells[j, i] := IntToStr(RandomRange(1, 10));
    G2.Cells[j, i] := IntToStr(RandomRange(1, 10));
   end;
 Button2.Enabled := true;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i, j, k : integer;
begin
 for i := 0 to N - 1 do
  begin
   k := UMN(i);
   for j := 0 to N - 1 do
     G3.Cells[j, i] := IntToStr(StrToInt(G1.Cells[j, i]) * k);
  end;
end;

function TForm1.UMN(k: integer): integer;
var i:integer;
    pr:real;
begin
   pr:=1;
   For i:=0 to G2.ColCount-1 do
      pr:=pr*StrToFloat(G2.Cells[i,1])
end;

end.
Ответить с цитированием
  #2  
Старый 14.02.2019, 23:30
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну и в чем проблема?
Внешним циклом бежим по столбцам.
Внутри первый внутренний цикл считает произведение элементов i-ой строки.
Второй внутренний цикл бежит по элементам столбца и прибавляет полученный результат.

Вроде вот так:
Код:
type
  TSquareMatrix : Array Of Array Of Integer;
  
var
  A, B, C : TSquareMatrix
  
const
  MatrixSize = 10;
  
var
  I, J, M : Integer;
  
begin
  // Init matrices
  SetLength(A,MatrixSize,MatrixSize);
  SetLength(B,MatrixSize,MatrixSize);
  SetLength(C,MatrixSize,MatrixSize);
  
  // Fill A and B by random values 1..10
  Randomize;
  For I := Low(A) To High(A) Do
    For I := Low(A[i]) To High(A[i]) Do
	  Begin
	    A[I,J] := Random(10) + 1;
		B[I,J] := Random(10) + 1;
      End;
	  
  // Create matrix C
  For I := Low(A) To High(A) Do
    Begin
	  M := 1;
	  For J := Low(A[i]) To High(A[i]) Do
	    M := M * B[J,I];
      For J := Low(A[i]) To High(A[i]) Do
	    C[I,J] := A[I,J] + M;
	End;
end;
Ответить с цитированием
  #3  
Старый 15.02.2019, 11:21
somepower somepower вне форума
Прохожий
 
Регистрация: 14.02.2019
Сообщения: 8
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо за помощь, я нашел ошибку в своем коде и исправил
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:58.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter