Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program L2_4_D;
- Uses
- System.SysUtils;
- Type
- TArray = Array of Integer;
- Var
- IsCorrect : Boolean;
- Procedure TaskEssence();
- Begin
- Writeln('Данная программа находит максиимальное количество единиц, идущих подряд в массиве.');
- End;
- Function PathChoice() : String;
- Var
- TFile : TextFile;
- Path : String;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите путь файла: ');
- Try
- Readln(Path);
- AssignFile(TFile, Path);
- Reset(TFile);
- Except
- IsCorrect := False;
- Writeln('Неверный путь файла!');
- End;
- Until IsCorrect;
- Writeln('Файл успешно открыт!');
- PathChoice := Path;
- CloseFile(TFile);
- End;
- Function SizeFile(Path : String; var TFile : TextFile) : Integer;
- Var
- Size, Correct : Integer;
- Begin
- AssignFile(TFile, Path);
- Reset(TFile);
- IsCorrect := True;
- Writeln('Запись количества строк...');
- Try
- Readln(TFile, Size);
- Except
- IsCorrect := False;
- End;
- If ((Size < 1) Or (IsCorrect = False)) Then
- Begin
- Writeln('Ошибка! Неверный ввод размера! Измените входные данные в файле, затем перезапустите программу.');
- Correct := 0;
- While (Correct = 0) Do
- Readln;
- End;
- Writeln('Количество элементов массива: ', Size);
- CloseFile(TFile);
- SizeFile := Size;
- End;
- Function ArrayReadFile(Path : String; Size : Integer; var TFile : TextFile; Arr : TArray) : TArray;
- Var
- I, J, Correct : Integer;
- Line : String;
- Begin
- AssignFile(TFile, Path);
- Reset(TFile);
- Dec(Size);
- IsCorrect := True;
- Readln(TFile, Line);
- Writeln('Запись матрицы...');
- For I := 0 To (Size) Do
- Begin
- Try
- Read(TFile, Arr[I])
- Except
- IsCorrect := False;
- Writeln(' Неверный ввод данных! Исправьте элемент с адресом ',I+1, ' и перезапустите программу');
- Correct := 0;
- While (Correct = 0) Do
- Readln;
- End;
- Write(Arr[I], ' ');
- End;
- CloseFile(TFile);
- ArrayReadFile := Arr;
- End;
- Function ArrayCout(const Arr : TArray) : Integer;
- Var
- I, Res, MaxRes : Integer;
- Begin
- Res := 0;
- MaxRes := 0;
- For I := 0 To High(Arr) Do
- Begin
- If (Arr[I] = 1) Then
- Begin
- Res := Res + 1;
- End
- Else
- Begin
- If (MaxRes < Res) Then
- Begin
- MaxRes := Res;
- Res := 0;
- End
- Else Res := 0;
- End;
- End;
- If (MaxRes < Res) Then
- MaxRes := Res;
- ArrayCout := MaxRes;
- End;
- Procedure Output(Result : Integer);
- Var
- TFile : TextFile;
- Path : String;
- Begin
- Writeln('Максимальное количество единиц, идущих подряд: ', Result);
- Repeat
- IsCorrect := True;
- Writeln('Введите путь файла для вывода: ');
- Try
- Readln(Path);
- AssignFile(TFile, Path);
- Reset(TFile);
- Except
- IsCorrect := False;
- Writeln('Неверный путь файла!');
- End;
- Until IsCorrect;
- Append(TFile);
- Writeln(TFile);
- Writeln(TFile, 'Максимальное количество единиц, идущих подряд: ', Result);
- CloseFile(TFile);
- Writeln('Данные записаны в файл.');
- Readln;
- End;
- Procedure FromFile;
- Var
- Path : String;
- Size, MaxRes : Integer;
- TFile : TextFile;
- Arr : TArray;
- Begin
- Writeln('При записи данных из файла, учтите, что на первой строке написано количество строк матрицы, а далее через пробел элементы массива');
- Path := PathChoice();
- Size := SizeFile(Path, TFile);
- SetLength(Arr, SIze);
- Arr := ArrayReadFile(Path, Size, TFile, Arr);
- MaxRes := ArrayCout(Arr);
- Output(MaxRes);
- End;
- Function SizeConsole() : Integer;
- Var
- IsCorrect : Boolean;
- Size : Integer;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите количество элементов в массиве');
- Try
- Readln(Size);
- Except
- IsCorrect := False;
- Writeln('Неверный тип данных');
- End;
- If (Size < 1) Then
- Begin
- IsCorrect := False;
- Writeln('Неверный тип данных');
- End;
- Until IsCorrect;
- SizeConsole := Size;
- End;
- Function SizeColumnConsole : Integer;
- Var
- IsCorrect : Boolean;
- SizeJ : Integer;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите количество столбцов в матрице');
- Try
- Readln(SizeJ);
- Except
- IsCorrect := False;
- Writeln('Неверный тип данных');
- End;
- If (SizeJ < 1) Then
- Begin
- IsCorrect := False;
- Writeln('Неверный тип данных');
- End;
- Until IsCorrect;
- SizeColumnConsole := SizeJ;
- End;
- Function ArrayReadConsole(Size : Integer; Arr : TArray) : TArray;
- Var
- IsCorrect : Boolean;
- I, J : Integer;
- Begin
- Dec(Size);
- For I := 0 To Size Do
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите элемент с индексом ', I+1);
- Try
- Readln(Arr[I]);
- Except
- IsCorrect := False;
- Writeln('Неверный тип данных');
- End;
- Until IsCorrect;
- End;
- ArrayReadConsole := Arr;
- End;
- Procedure FromConsole;
- Var
- Size, MaxSum : Integer;
- Arr : TArray;
- Begin
- Size := SizeConsole();
- SetLength(Arr, Size);
- Arr := ArrayReadConsole(Size, Arr);
- MaxSum := ArrayCout(Arr);
- Output(MaxSum);
- End;
- Procedure SourceChoice();
- Var
- ChoiceNumber : Integer;
- Begin
- Writeln('Выберите, откуда будут вводиться данные:');
- Repeat
- IsCorrect := True;
- Writeln('Введите 0, если с консоли; введите 1, если с файла.');
- Try
- Readln(ChoiceNumber);
- Except
- IsCorrect := False;
- End;
- If ((IsCorrect = False) Or ((ChoiceNumber <> 1) And (ChoiceNumber <> 0))) Then
- Begin
- Writeln('Неверный ввод данных!');
- IsCorrect := False;
- End;
- Until IsCorrect;
- If (ChoiceNumber = 0) Then
- FromConsole()
- Else
- FromFile();
- End;
- Begin
- TaskEssence();
- SourceChoice();
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement