Delphi-int.ru: портал программистов

Вход Регистрация | Забыли пароль?

Просмотр кода

Идентификатор: 98668008 Описание: Код загружен: 28 февраля 2011, 08:18 (min@y™)

program pXXXX;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils, Classes;
 
type
  TMatrix = array of array of Integer;
 
procedure FillMatrix(var X: TMatrix; const M, N: Cardinal);
var
  Row, Col: Integer;
begin
  SetLength(X, M, N);
  for Row:= 0 to M - 1 do
    for Col:= 0 to N - 1 do
      X[Row, Col]:= Random(10);
end;
 
procedure PrintMatrix(const X: TMatrix);
var
  Row, Col: Integer;
begin
  for Row:= 0 to High(X) do
    begin
      for Col:= 0 to High(X[0]) do
        Write(X[Row, Col]: 4);
      WriteLn;
    end;
end;
 
// Сохранение матрицы X в файл FileName
function SaveMatrixToFile(const X: TMatrix; const FileName: string): Boolean;
var
  Stream: TFileStream;
  RowCount, ColCount, xSize: Cardinal;
begin
  RowCount:= Length(X); // Кол-во строк
  ColCount:= Length(X[0]); // Кол-во стролбцов
  xSize:= RowCount * ColCount * SizeOf(Integer); // Размер матрицы в байтах
 
  try
    Stream:= TFileStream.Create(FileName, fmCreate or fmShareExclusive);
    try
      Stream.Write(RowCount, SizeOf(Cardinal)); // Запись кол-ва строк
      Stream.Write(ColCount, SizeOf(Cardinal)); // Запись кол-ва столбцов
      Stream.Write(X[0, 0], xSize);             // Запись матрицы
    finally
      Stream.Free();
    end;
 
    Result:= True;
  except
    Result:= False;
  end;
end;
 
// Загрузка матрицы X из файла FileName
function LoadMatrixFromFile(var X: TMatrix; const FileName: string): Boolean;
var
  Stream: TFileStream;
  RowCount, ColCount, xSize: Cardinal;
begin
  try
    Stream:= TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
    try
      Stream.Read(RowCount, SizeOf(Cardinal)); // Чтение кол-ва строк
      Stream.Read(ColCount, SizeOf(Cardinal)); // Чтение кол-ва столбцов
      xSize:= RowCount * ColCount * SizeOf(Integer); // Размер матрицы в байтах
      SetLength(X, RowCount, ColCount);              // Выделение памяти
      Stream.Read(X[0, 0], xSize);             // Чтение матрицы
    finally
      Stream.Free();
    end;
 
    Result:= True;
  except
    Result:= False;
  end;
end;
 
var
  X: TMatrix;
 
const
  FileName = 'D:\Temp\Matrix.bin';
 
begin
  Randomize();
  FillMatrix(X, 5, 6);
  WriteLn('  Source matrix:'#13#10);
  PrintMatrix(X);
 
  if SaveMatrixToFile(X, FileName)
    then WriteLn(#13#10'  Saving to file ', FileName, ' - SUCCESS.')
    else begin
           WriteLn(#13#10'  Saving to file ', FileName, ' - FAIL.');
           ReadLn;
           Exit;
         end;
 
  if LoadMatrixFromFile(X, FileName)
    then begin
           WriteLn(#13#10'  Loading form file ', FileName, ' - SUCCESS.');
           WriteLn(#13#10'  Loaded matrix:'#13#10);
           PrintMatrix(X);
         end
    else begin
           WriteLn(#13#10'  Loading form file ', FileName, ' - FAIL.');
           ReadLn;
           Exit;
         end;
 
  ReadLn;
end.

Ссылка на данный код:

На главную страницу сервиса обмена кодом »