Program Lab_matrix; uses System.SysUtils; Type TArray = Array Of Integer; TMatrix = Array Of TArray; Procedure OutputTask(); Begin Writeln('Данная программа сортирует строки матрицы методом простого выбора.'); End; Function ChooseInput() : Boolean; Var IsCorrect : Boolean; Num : Integer; Begin Repeat Writeln('Выберите откуда вводить данные: 0, если из консоли, 1 если из файла:'); IsCorrect := True; Try Readln(Num); Except IsCorrect := False; End; If (Not IsCorrect) Or ((Num <> 0) And (Num <> 1)) Then Begin IsCorrect := False; Writeln('Ошибка ввода! Повторите попытку.'); End; Until IsCorrect; ChooseInput := (Num = 1); End; Function ChoosePath() : String; Var Path : String; IsCorrect : Boolean; InputFile : TextFile; Begin Begin Repeat Writeln('Введите путь к файлу для ввода информации: '); IsCorrect := True; Readln(Path); Try AssignFile(InputFile, Path); Reset(InputFile); Except IsCorrect := False; End; If (Not IsCorrect) Or (Length(Path) < 5) Then Begin IsCorrect := False; Writeln('Ошибка ввода! Повторите попытку.'); End Else Begin If ((Path[High(Path)] <> 't') And (Path[High(Path) - 1] <> 'x') And (Path[High(Path) - 2] <> 't') And (Path[High(Path) - 3] <> '.')) Then Begin IsCorrect := False; Writeln('Ошибка ввода! Повторите попытку.'); End; End; Until IsCorrect; End; CloseFile(InputFile); ChoosePath := Path; End; Function InputSizeFromConsole() : Integer; Var IsCorrect : Boolean; Size : Integer; Begin Repeat IsCorrect := True; Writeln('Введите размер матрицы(от 2 до 100):'); Try Readln(Size); Except IsCorrect := False; End; If (Not IsCorrect) Or (Size < 2) Or (Size > 100) Then Begin IsCorrect := False; Writeln('Ошибка ввода! Повторите попытку.'); End; Until IsCorrect; InputSizeFromConsole := Size; End; Function InputSizeFromFile(Path : String) : Integer; Var Size : Integer; IsCorrect : Boolean; InputFile : TextFile; Begin AssignFile(InputFile, Path); Reset(InputFile); IsCorrect := True; Writeln('Запись размера...'); Try Readln(InputFile, Size) Except IsCorrect := False; End; If (Not IsCorrect) Or (Size < 2) Or (Size > 100) Then Begin IsCorrect := False; Writeln('Ошибка ввода! Введите размер с клавиатуры.'); Size := InputSizeFromConsole(); End; CloseFile(InputFile); InputSizeFromFile := Size; End; Function ExceptionRead(I, J : Integer) : Integer; Var IsCorrect : Boolean; Num : Integer; Begin Repeat Writeln('Введите [', I+1, ' , ', J+1, '] элемент матрицы:'); IsCorrect := True; Try Readln(Num); Except IsCorrect := False; Writeln('Ошибка ввода! Повторите попытку.'); End; Until IsCorrect; ExceptionRead := Num; End; Function FillMatrixFromFile(Path : String; Matrix : TMatrix) : TMatrix; Var I, J : Integer; InputFile : TextFile; Begin Writeln('Запись матрицы...'); AssignFile(InputFile, Path); Reset(InputFile); Readln(InputFile); For I := 0 To High(Matrix) Do Begin For J := 0 To High(Matrix) Do Begin Try Read(InputFile, Matrix[I, J]); Except Writeln('Ошибка ввода! Введите [', I+1, ' , ', J+1, '] элемент матрицы с клавиатуры.'); Matrix[I, J] := ExceptionRead(I, J); End; End; Readln(InputFile); End; CloseFile(InputFile); FillMatrixFromFIle := Matrix; End; Function InputMatrixFromFile() : TMatrix; Var Path : String; Matrix : TMatrix; Size : Integer; Begin Path := ChoosePath(); Size := InputSizeFromFile(Path); SetLength(Matrix, Size, Size); Matrix := FillMatrixFromFile(Path, Matrix); InputMatrixFromFile := Matrix; End; Function FillMatrixFromConsole(Matrix : TMatrix) : TMatrix; Var I, J : Integer; IsCorrect : Boolean; Begin For I := 0 To High(Matrix) Do Begin For J := 0 To High(Matrix) Do Begin Repeat Writeln('Введите [', I+1, ' , ', J+1, '] элемент матрицы:'); IsCorrect := True; Try Readln(Matrix[I, J]); Except IsCorrect := False; Writeln('Ошибка ввода! Повторите попытку.'); End; Until IsCorrect; End; End; FillMatrixFromConsole := Matrix; End; Function InputMatrixFromConsole() : TMatrix; Var Size : Integer; Matrix : TMatrix; Begin Size := InputSizeFromConsole(); SetLength(Matrix, Size, Size); Matrix := FillMatrixFromConsole(Matrix); InputMatrixFromConsole := Matrix; End; Function InputMatrix(IsFromFile : Boolean) : TMatrix; Var Matrix : TMatrix; Begin If IsFromFile Then Matrix := InputMatrixFromFile() Else Matrix := InputMatrixFromConsole(); InputMatrix := Matrix; End; Function SortingRow(Arr : TArray) : TArray; Var I, J, MinIndex, Temp, N : Integer; Begin N := High(Arr) + 1; For I := 0 To (N - 2) Do Begin MinIndex := I; For J := (I + 1) To (N - 1) Do Begin If(Arr[J] < Arr[MinIndex]) Then MinIndex := J; End; If (MinIndex <> I) Then Begin Temp := Arr[I]; Arr[I] := Arr[MinIndex]; Arr[MinIndex] := Temp; End; End; SortingRow := Arr; End; Function Sorting(Matrix : TMatrix) : TMatrix; Var NumberOfRow : Integer; Row : TArray; Begin For NumberOfRow := 0 To High(Matrix) Do Begin Row := SortingRow(Matrix[NumberOfRow]); Matrix[NumberOfRow] := Row; End; Sorting := Matrix; End; Function ChoosePathForOutput() : String; Var Path : String; IsCorrect : Boolean; OutputFile : TextFile; Begin Begin Repeat Writeln('Введите путь к файлу для вывода информации: '); IsCorrect := True; Readln(Path); Try AssignFile(OutputFile, Path); Reset(OutputFile); Except IsCorrect := False; End; If (Not IsCorrect) Or (Length(Path) < 5) Then Begin IsCorrect := False; Writeln('Ошибка ввода! Повторите попытку.'); End Else Begin If ((Path[High(Path)] <> 't') And (Path[High(Path) - 1] <> 'x') And (Path[High(Path) - 2] <> 't') And (Path[High(Path) - 3] <> '.')) Then Begin IsCorrect := False; Writeln('Ошибка ввода! Повторите попытку.'); End; End; Until IsCorrect; End; CloseFile(OutputFile); ChoosePathForOutput := Path; End; Procedure OutputInFile(Matrix : TMatrix); Var Path : String; OutputFile : TextFile; I, J : Integer; Begin Path := ChoosePathForOutput(); AssignFile(OutputFile, Path); Append(OutputFile); Writeln(OutputFile, #13#10'Матрица, строки который были отсортированы методом простого выбора: '); For I := 0 To High(Matrix) Do Begin For J := 0 To High(Matrix) Do Write(OutputFile, Matrix[I][J], ' '); Writeln(OutputFile); End; Writeln('Данные успешно записаны в файл!'); End; Procedure OutputAnswer(Matrix : TMatrix); Var I, J : Integer; Begin Writeln('Матрица, строки который были отсортированы методом простого выбора: '); For I := 0 To High(Matrix) Do Begin For J := 0 To High(Matrix) Do Write(Matrix[I][J], ' '); Writeln; End; OutputInFile(Matrix); End; Procedure OutputMatrix(Matrix : TMatrix); Var I, J : Integer; Begin Writeln('Исходная матрица: '); For I := 0 To High(Matrix) Do Begin For J := 0 To High(Matrix) Do Begin Write(Matrix[I, J], ' '); End; Writeln; End; End; Var IsFromFile : Boolean; Size , LargestNegativeNumber : Integer; Matrix, SortedMatrix : TMatrix; Begin OutputTask(); IsFromFile := ChooseInput(); Matrix := InputMatrix(IsFromFile); OutputMatrix(Matrix); SortedMatrix := Sorting(Matrix); OutputAnswer(SortedMatrix); Readln; End.