Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program lab2_4;
- {$APPTYPE CONSOLE}
- {$R *.res}
- Uses
- System.SysUtils;
- Type
- TMatrix = Array of Array of Integer;
- Function CheckConsOrFile() : Integer;
- Const
- MAX = 2;
- MIN = 1;
- Var
- Choice : Integer;
- IsCorrect : Boolean;
- Begin
- Repeat
- Write('Введите 1, если хотите работать в консоли, и 2, если в файле:
- ');
- IsCorrect := True;
- Try
- Readln(Choice);
- Except
- Writeln('Ошибка ввода. Повторите ввод.');
- IsCorrect := False;
- End;
- If ((IsCorrect) And ((Choice > MAX) Or (Choice < MIN))) then
- Begin
- Writeln('Число выходит за допустимые пределы. Повторите ввод.');
- IsCorrect := False;
- End;
- Until(IsCorrect);
- CheckConsOrFile := Choice;
- End;
- Function InputMatrixSizeCons() : Integer;
- Const
- MAX_LIMIT = 10;
- MIN_LIMIT = 1;
- Var
- Size : Integer;
- IsCorrect : Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Write('Введите размерность матрицы nxn(1 <= size <= ',MAX_LIMIT,'): ');
- Try
- Readln(Size);
- Except
- Writeln('Ошибка ввода. Повторите ввод.');
- IsCorrect := False;
- End;
- If ((IsCorrect) and ((Size > MAX_LIMIT) Or (Size < MIN_LIMIT))) Then
- Begin
- Writeln('Число выходит за допустимые пределы. Повторите ввод.');
- IsCorrect := False;
- End;
- Until(IsCorrect);
- Writeln('');
- InputMatrixSizeCons := Size;
- End;
- Function InputFromCons(Matrix : TMatrix) : TMatrix;
- Const
- MAX_ELEM = 100;
- MIN_ELEM = 0;
- Var
- IsCorrect : Boolean;
- I, J : Integer;
- Begin
- For I := Low(Matrix) to High(Matrix) Do
- Begin
- For J := Low(Matrix) To High(Matrix) Do
- Begin
- Repeat
- Write('Введите элемент ', I + 1,'-ой строки ', J + 1,'-ого
- столбца матрицы(',MIN_ELEM,' <= elem <= ',MAX_ELEM,'): ');
- IsCorrect := True;
- Try
- Readln(Matrix[I, J]);
- Except
- IsCorrect := False;
- Writeln('Ошибка ввода. Повторите ввод.');
- End;
- If ((IsCorrect) And ((Matrix[I, J] > MAX_ELEM) Or (Matrix[I,
- J] < MIN_ELEM))) Then
- Begin
- IsCorrect := False;
- Writeln('Элемент не входит в диапазон ',MIN_ELEM, ' <=
- elem <= ',MAX_ELEM);
- End;
- Until(IsCorrect);
- End;
- End;
- Writeln('');
- InputFromCons := Matrix;
- End;
- Procedure OutputToCons(MatrixC : TMatrix);
- Var
- LowI, HiI, LowJ, HiJ, I, J: Integer;
- Begin
- LowI := Low(MatrixC);
- LowJ := Low(MatrixC);
- HiI := High(MatrixC);
- HiJ := High(MatrixC);
- Writeln('Начальная матрица');
- Writeln('');
- For I := Low(MatrixC) To High(MatrixC) Do
- Begin
- For J := Low(MatrixC) To High(MatrixC) Do
- Begin
- Write(MatrixC[I, J], ' ');
- End;
- Writeln('') ;
- End;
- Writeln('');
- Writeln('Результат');
- Writeln('');
- While (LowI <= HiI) Or (LowJ <= HiJ) Do
- Begin
- For J := LowJ to HiJ do
- Write(MatrixC[LowI, J], ' ');
- Inc(LowI);
- For I := LowI To HiI Do
- Write(MatrixC[I, HiJ], ' ');
- Dec(HiJ);
- For J := HiJ DownTo LowJ Do
- Write(MatrixC[HiI, J], ' ');
- Dec(HiI);
- For I := HiI DownTo LowI Do
- Write(MatrixC[I, LowJ], ' ');
- Inc(LowJ);
- End;
- End;
- Function InputPath() : String;
- Var
- IsCorrect : Boolean;
- Path : String;
- Begin
- Repeat
- Write('Введите ссылку на файл: ');
- IsCorrect := True;
- Readln(Path);
- If Not FileExists(Path) then
- Begin
- Writeln('Файл не найден! Повторите ввод');
- IsCorrect := False;
- End;
- Until(IsCorrect);
- InputPath := Path;
- End;
- Function CheckSizeInFileStr(Path : String) : Integer;
- Var
- Count : Integer;
- Temporary : String;
- InputFile : TextFile;
- Begin
- Count := 0;
- AssignFile(InputFile , Path);
- Reset(InputFile);
- Writeln('');
- Writeln(' Читаем матрицу из файла');
- Writeln('');
- While Not Eof(InputFile) Do
- Begin
- Readln(InputFile, Temporary);
- Inc(Count);
- End;
- Close(InputFile);
- CheckSizeInFileStr := Count;
- End;
- Function CheckSizeInFileColumn(Path : String) : Integer;
- Var
- CountSpace : Integer;
- Temporary : String;
- InputFile : TextFile;
- I : Integer;
- Begin
- CountSpace := 0;
- AssignFile(InputFile , Path);
- Reset(InputFile);
- Readln(InputFile, Temporary);
- For I := 1 To length(Temporary) Do
- Begin
- If Temporary[I] = ' ' Then
- Inc(CountSpace);
- End;
- Close(InputFile);
- CheckSizeInFileColumn := CountSpace + 1;
- End;
- Function CheckValidOfSize(Strings : Integer;Columns : Integer) : Boolean;
- Const
- MAX_LIMIT = 10;
- MIN_LIMIT = 1;
- Var
- IsCorrect : Boolean;
- Begin
- IsCorrect := True;
- If Strings <> Columns Then
- Begin
- Writeln('В файле была введена некорректная матрица, поэтому введите
- её через консоль');
- Writeln('');
- IsCorrect := False;
- CheckValidOfSize := False;
- End
- Else If ((IsCorrect) And ((Strings > MAX_LIMIT) Or (Strings <
- MIN_LIMIT))) Then
- Begin
- Writeln('В файле была введена некорректная матрица, поэтому введите
- её через консоль');
- Writeln('');
- CheckValidOfSize := False;
- End
- Else
- CheckValidOfSize := True;
- End;
- Function ExceptMatr(I : Integer; J : Integer) : Integer;
- Const
- MAX_ELEM = 100;
- MIN_ELEM = 0;
- Var
- IsCorrect : Boolean;
- Num : Integer;
- Begin
- Repeat
- IsCorrect := True;
- Write('Элемент матрицы (',I + 1,', ',J + 1,') неверно записан,
- введите его с клавиатуры: ');
- Try
- Readln(Num);
- Except
- Writeln('Ошибка ввода. Повторите ввод.');
- IsCorrect := False;
- End;
- If ((IsCorrect) And ((Num > MAX_ELEM) Or (Num < MIN_ELEM))) Then
- Begin
- Writeln('Элемент не входит в диапазон(',MIN_ELEM,' <= elem <=
- ',MAX_ELEM,')');
- IsCorrect := False;
- End;
- Until(IsCorrect);
- ExceptMatr:=Num;
- End;
- Function InputFromFile(Path : String;Matrix : TMatrix) : TMatrix;
- Const
- MAX_ELEM = 100;
- MIN_ELEM = 0;
- Var
- InputFile : TextFile;
- I, J : Integer;
- IsCorrect : Boolean;
- Begin
- AssignFile(InputFile, Path);
- Reset(InputFile);
- IsCorrect := True;
- For I := Low(Matrix) To High(Matrix) Do
- Begin
- For J := Low(Matrix) to High(Matrix) do
- Begin
- Try
- Read(InputFile, Matrix[I, j]);
- Except
- IsCorrect := False;
- Matrix[I, J] := ExceptMatr(I, J);
- End;
- If ((IsCorrect) And ((Matrix[I, J] > MAX_ELEM) Or (Matrix[I, J] < MIN_ELEM))) Then
- Matrix[I, J] := ExceptMatr(I, J);
- End;
- End;
- Close(InputFile);
- InputFromFile := Matrix;
- End;
- Procedure OutputToFile(Path : String; MatrixC : TMatrix);
- Var
- OutputFile : TextFile;
- I, J: Integer;
- LowI, HiI, LowJ, HiJ: Integer;
- Begin
- AssignFile(OutputFile, Path);
- Rewrite(OutputFile);
- LowI := Low(MatrixC);
- LowJ := Low(MatrixC);
- HiI := High(MatrixC);
- HiJ := High(MatrixC);
- Writeln(OutputFile,'Начальная матрица');
- Writeln(OutputFile);
- For I := Low(MatrixC) To High(MatrixC) Do
- Begin
- For J := Low(MatrixC) To High(MatrixC) Do
- Write(OutputFile, MatrixC[I, J], ' ');
- Writeln(OutputFile) ;
- End;
- Writeln(OutputFile);
- Writeln(OutputFile,'Результат');
- Writeln(OutputFile);
- While (LowI <= HiI) Or (LowJ <= HiJ) Do
- Begin
- For J := LowJ to HiJ do
- Write(OutputFile,MatrixC[LowI, J], ' ');
- Inc(LowI);
- For I := LowI To HiI Do
- Write(OutputFile,MatrixC[I, HiJ], ' ');
- Dec(HiJ);
- For J := HiJ DownTo LowJ Do
- Write(OutputFile,MatrixC[HiI, J], ' ');
- Dec(HiI);
- For I := HiI DownTo LowI Do
- Write(OutputFile,MatrixC[I, LowJ], ' ');
- Inc(LowJ);
- End;
- Close(OutputFile);
- Writeln('Данные успешно записаны в файл');
- End;
- Function CheckFile(Path : String;MatrixC : TMatrix) : Boolean;
- Begin
- Try
- OutputToFile(Path, MatrixC);
- CheckFile := True;
- Except
- Writeln('Отказано в доступе к файлу. Измените настройки файла');
- CheckFile := False;
- End;
- End;
- Procedure OutputProcess(MatrixA : TMatrix);
- Const
- CONSOLE = 1;
- Var
- Check : Boolean;
- Begin
- If CheckConsOrFile() = CONSOLE Then
- OutputToCons(MatrixA)
- Else
- Begin
- Repeat
- Check := CheckFile(InputPath(), MatrixA);
- Until(Check);
- End;
- End;
- Procedure CheckFileData(Strings : Integer; Columns : Integer; Path : String);
- Var
- Size : Integer;
- MatrixA : TMatrix;
- Begin
- If CheckValidOfSize(Strings, Columns) Then
- Begin
- SetLength(MatrixA, Strings, Strings);
- MatrixA := InputFromFile(Path,MatrixA);
- OutputProcess(MatrixA);
- End
- Else
- Begin
- Size := InputMatrixSizeCons();
- SetLength(MatrixA, Size, Size);
- MatrixA := InputFromCons(MatrixA);
- OutputProcess(MatrixA);
- End
- End;
- Var
- Strings,Columns, Size : Integer;
- MatrixA: TMatrix;
- Path : String;
- Const
- CONSOLE = 1;
- Begin
- Writeln('Программа разворачивает матрицу в одномерную последовательность
- по часовой стрелке, начиная из верхнего левого угла.');
- Writeln('');
- If CheckConsOrFile() = CONSOLE Then
- Begin
- Size := InputMatrixSizeCons();
- SetLength(MatrixA, Size, Size);
- MatrixA := InputFromCons(MatrixA);
- OutputProcess(MatrixA);
- End
- Else
- Begin
- Path := InputPath();
- Strings := CheckSizeInFileStr(Path);
- Columns := CheckSizeInFileColumn(Path);
- CheckFileData(Strings, Columns, Path);
- End;
- Readln;
- End.
Advertisement
Add Comment
Please, Sign In to add comment