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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2020, 15:00   #1
h4dye
Новичок
Джуниор
 
Регистрация: 22.09.2020
Сообщений: 3
По умолчанию Разработайте класс для работы с матрицами.

Необходимо разработать класс для работы с матрицами.

Какой конструктор лучше создать для данной задачи? И как?

В procedure TMatrix.LoadFromFile(FName: string); выдает ошибку для readln(F);Если я убираю эту строчку, то ошибка во время выполнения программы на строке: Reset(F); (не понимаю почему)

Основная программа:
Код:
{$mode objfpc}{$H+}
program lab1_5;
 
uses uMatrix;
 
var M1: TMatrix;
  FName: string;
begin
   write('Name of source file: ', FName);
   readln(FName);
   writeln(M1.LoadFromFile(FName));
   M1.showscreen;
   writeln(M1.NumMul);
   Writeln(M1.Transp);
   readln;
end.
Модуль:
Код:
{$mode objfpc}{$H+}
unit umatrix;
interface
uses Classes;
type
  TMatrix = class(TComponent)
  private
    N: integer; // Размерность матрицы
  public
    Matrix: array of array of real; // Элементы матрицы
    property Razmer: integer read N;
    procedure Init(Num: integer = 3);
    procedure ShowScreen;  //вывод матрицы
    procedure LoadFromFile(FName: string);   //загрузка из файла
    function Transp(): Tmatrix;         //транспонирование матрицы
    function NumMul(Num: real): TMatrix;     //умножение матрицы на число
    function getMatrix(M: TMatrix; Row, Col: integer): TMatrix;
  end;
 
implementation
 
procedure TMatrix.Init(Num: integer = 3);
var
  i: integer;
begin
  N := Num;
  SetLength(Matrix, N);
  for i := 0 to N - 1 do
   SetLength(Matrix[i], N);
end;
 
procedure TMatrix.ShowScreen;
var
  i, j: integer;
begin
  for i := 0 to N - 1 do
    for j := 0 to N - 1 do
      Writeln(Matrix[i, j]);
end;
 
procedure TMatrix.LoadFromFile(FName: string);
var
  i, j: integer;
  F: File of real;
begin
  AssignFile(F, FName);
  Reset(F);
  for i := 0 to N - 1 do
  begin
    for j := 0 to N - 1 do
    begin
      Read(F, Matrix[i, j]);
    end;
    Readln(F);
  end;
  CloseFile(F);
end;
 
function TMatrix.NumMul(Num: real): TMatrix;
var
  i, j: integer;
  M: TMatrix;
begin
  M := TMatrix(Self);
  M.Init(Razmer);
  for i := 0 to N - 1 do
  begin
    for j := 0 to N - 1 do
    begin
      M.Matrix[i, j] := Num * Matrix[i, j];
    end;
  end;
  Result := M;
end;
 
function TMatrix.Transp: TMatrix;
var
  M: TMatrix;
  i, j: integer;
begin
  M := TMatrix.Create(Self);
  M.Init(Razmer);
  for i := 0 to Razmer - 1 do
  begin
    for j := 0 to Razmer - 1 do
    begin
      M.Matrix[i, j] := Matrix[j, i];
    end;
  end;
  Result := M;
end;
 
function TMatrix.getMatrix(M: TMatrix; Row, Col: integer): TMatrix;
var
  Res: TMatrix;
  i, j: integer;
  ii, jj: integer;
begin
  Res := TMatrix.Create(nil);
  Res.Init(M.Razmer - 1);
  ii := 0;
  jj := 0;
  for i := 0 to Res.Razmer - 1 do
  begin
    if i >= Row then
      ii := i + 1
    else
      ii := i;
    for j := 0 to Res.Razmer - 1 do
    begin
      if j >= Col then
        jj := j + 1
      else
        jj := j;
      Res.Matrix[i, j] := M.Matrix[ii, jj];
    end;
  end;
  Result := Res;
end;
end.
h4dye вне форума Ответить с цитированием
Старый 16.11.2020, 15:14   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Код:
var M1: TMatrix;
  FName: string;
begin
   write('Name of source file: ', FName);
   readln(FName);
   writeln(M1.LoadFromFile(FName));
Прежде чем пользоваться объектом М1 (использовать его методы и т.д. LoadFromFile)
данный объект ДОЛЖЕН быть инициализирован(создан)
Код:
М1:=TMatrix.Create;
M1.LoadFromFile(....);
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработайте класс для работы с матрицами. h4dye Помощь студентам 1 23.09.2020 16:11
Разработайте класс для работы с матрицами. h4dye Lazarus, Free Pascal, CodeTyphon 0 22.09.2020 23:03
Разработайте класс MONEY felicita_091 Visual C++ 1 29.03.2013 17:23
разработать класс для работы с матрицами 2х2 doter Visual C++ 0 13.05.2011 20:38
Класс для работы с матрицами 2х2 doter Общие вопросы C/C++ 2 18.04.2011 19:38