Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Lab2_4;
- uses
- System.SysUtils;
- type
- Matrix = array of array of Integer;
- var
- MainMatrix: Matrix;
- Order: Integer;
- Path: String;
- Count: Integer;
- Zero: array of Integer;
- function IsFileCorrect(var Path: String; Order: Integer): Boolean;
- var
- ISize, JSize, Num: Integer;
- IsCorrect: Boolean;
- MatrixFile: TextFile;
- begin
- ISize := 0;
- JSize := 0;
- IsCorrect := true;
- AssignFile(MatrixFile, Path);
- Reset(MatrixFile);
- while not(SeekEof(MatrixFile)) and IsCorrect do
- begin
- inc(ISize);
- while not(SeekEoln(MatrixFile)) and IsCorrect do
- begin
- try
- Read(MatrixFile, Num);
- except
- IsCorrect := false;
- end;
- inc(JSize);
- end;
- Readln(MatrixFile);
- if (JSize <> Order) then
- IsCorrect := false;
- JSize := 0;
- end;
- if ISize <> Order then
- IsCorrect := false;
- CloseFile(MatrixFile);
- result := IsCorrect;
- end;
- function FilePath(Order: Integer): String;
- var
- Path: String;
- IsCorrect: Boolean;
- begin
- repeat
- Writeln('Введите абсолютный путь к файлу ');
- Readln(Path);
- IsCorrect := false;
- if FileExists(Path) then
- begin
- if IsFileCorrect(Path, Order) then
- IsCorrect := true
- else
- Writeln('Проверьте данные в файле. Это должны быть числа, записанные в виде матрицы. Порядок матрицы должен соответствовать введённому.');
- end
- else
- Writeln('Файл не найден');
- until IsCorrect;
- result := Path;
- end;
- function InputOrder(): Integer;
- var
- Order: Integer;
- IsCorrect: Boolean;
- begin
- repeat
- Writeln('Введите порядок матрицы: ');
- IsCorrect := true;
- try
- Readln(Order)
- except
- IsCorrect := false;
- Writeln('Порядок матрицы должен быть числом')
- end;
- if ((Order < 1) or (Order > 10000))and IsCorrect then
- begin
- Writeln('Размер матрицы должен принадлежать промежутку от 2 до 10000');
- IsCorrect := false
- end;
- until IsCorrect;
- result := Order;
- end;
- procedure FileToMatrix(var MainMatrix:Matrix; Order: Integer; var Path: String);
- var
- I, J: Integer;
- MatrixFile: TextFile;
- begin
- SetLength(MainMatrix, Order, Order);
- AssignFile(MatrixFile, Path);
- Reset(MatrixFile);
- for I := 0 to Order-1 do
- begin
- for J := 0 to Order-1 do
- Read(MatrixFile, MainMatrix[I, J]);
- Readln(MatrixFile);
- end;
- CloseFile(MatrixFile);
- end;
- function Output(): String;
- var
- Patho: String;
- IsCorrect: Boolean;
- begin
- IsCorrect := false;
- repeat
- Writeln('Введите директорию, в которую хотите сохранить матрицу');
- Readln(Patho);
- if DirectoryExists(Patho) then
- IsCorrect := true
- else
- Writeln('Такой директории не существует.Попробуйте ещё раз');
- until IsCorrect;
- Result := Patho;
- end;
- procedure ConditionToFile(Count: Integer);
- var
- I, J: Integer;
- OutputFile: TextFile;
- Directory: String;
- begin
- Directory := Output();
- AssignFile(OutputFile, Directory + '\output.txt');
- Rewrite(OutputFile);
- Write(OutputFile, 'Количество столбцов матрицы, в которых имеются нулевые элементы: ' , count);
- Writeln(OutputFile);
- Writeln('Матрица сохранена по указанному пути');
- CloseFile(OutputFile);
- Write;
- end;
- procedure PrintMatrix(MainMatrix: Matrix);
- var
- I, J: Integer;
- begin
- for I := 0 to High(MainMatrix) do
- begin
- for J := 0 to High(MainMatrix) do
- Write(MainMatrix[I, J]:6);
- Writeln;
- end;
- Writeln;
- end;
- procedure PrintResult(Count: Integer);
- begin
- Writeln('Количество столбцов матрицы, в которых имеются нулевые элементы: ', count);
- end;
- function Condition(MainMatrix: Matrix; Order: Integer; Count:Integer): Integer;
- var
- I, J:Integer;
- begin
- for I := 0 to Order do
- begin
- J := 0;
- while J < Order do
- begin
- if MainMatrix[J][I] = 0 then
- begin
- Inc(Count);
- J := 3;
- end;
- Inc(J);
- end;
- end;
- PrintResult(Count);
- Result := Count;
- end;
- begin
- Order := InputOrder();
- Path := FilePath(Order);
- FileToMatrix(MainMatrix, Order, Path);
- Writeln('Матрица, для которой производились вычисления: ');
- PrintMatrix(MainMatrix);
- Count := Condition(MainMatrix, Order, Count);
- ConditionToFile(Count);
- Readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment