Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program Lab;
- uses
- System.SysUtils;
- Type
- TArray = Array of Integer;
- Function ArrayCount(ArrA, ArrB, ArrC : TArray) : TArray;
- Var
- I, J, ArrCNumber : Integer;
- Repeating : Boolean;
- Begin
- ArrCNumber := 0;
- SetLength(ArrC, 1);
- ArrC[0] := 0;
- For I := 0 To High(ArrA) Do
- Begin
- Repeating := False;
- For J := 0 To High(ArrC) Do
- Begin
- If (ArrA[I] = ArrC[J]) Then
- Begin
- Repeating := True;
- End
- End;
- If (Not Repeating) Then
- Begin
- Inc(ArrCNumber);
- SetLength(ArrC, ArrCNumber);
- ArrC[ArrCNumber-1] := ArrA[I];
- End;
- End;
- For I := 0 To High(ArrB) Do
- Begin
- Repeating := False;
- For J := 0 To High(ArrC) Do
- Begin
- If (ArrB[I] = ArrC[J]) Then
- Begin
- Repeating := True;
- End
- End;
- If (Not Repeating) Then
- Begin
- Inc(ArrCNumber);
- SetLength(ArrC, ArrCNumber);
- ArrC[ArrCNumber-1] := ArrB[I];
- End;
- End;
- ArrayCount := ArrC;
- End;
- Function SizeConsoleFirst() : 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;
- SizeConsoleFirst := Size;
- End;
- Function SizeConsoleSecond() : 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;
- SizeConsoleSecond := Size;
- End;
- Function ExceptionReadFirst(I : Integer) : Integer;
- Var
- Number : Integer;
- IsCorrect : Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите ', (I+1), ' элемент первого массива: ');
- Try
- Readln(Number);
- Except
- IsCorrect := False;
- Writeln('Неверный тип данных!');
- End;
- Until IsCorrect;
- ExceptionReadFirst := Number;
- End;
- Function ExceptionReadSecond(I : Integer) : Integer;
- Var
- Number : Integer;
- IsCorrect : Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите ', (I+1), ' элемент второго массива: ');
- Try
- Readln(Number);
- Except
- IsCorrect := False;
- Writeln('Неверный тип данных!');
- End;
- Until IsCorrect;
- ExceptionReadSecond := Number;
- End;
- Procedure TaskEssence();
- Begin
- Writeln('Данная программа считывает два массива и затем записывает их значения в третий упорядоченный массив (без повторений).');
- End;
- Function PathChoice() : String;
- Var
- TFile : TextFile;
- Path : String;
- IsCorrect : Boolean;
- 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 SizeFileFirst(Path : String; var TFile : TextFile) : Integer;
- Var
- Size : Integer;
- IsCorrect : Boolean;
- Begin
- AssignFile(TFile, Path);
- Reset(TFile);
- IsCorrect := True;
- Writeln('Запись количества элементов 1 массива...');
- Try
- Readln(TFile, Size);
- Except
- IsCorrect := False;
- End;
- If ((Size < 1) Or (IsCorrect = False)) Then
- Begin
- Writeln('Ошибка! Неверный ввод размера! Впишите данные с клавиатуры.');
- Size := SizeConsoleFirst();
- End;
- Writeln('Количество элементов 1 массива: ', Size);
- CloseFile(TFile);
- SizeFileFirst := Size;
- End;
- Function SizeFileSecond(Path : String; var TFile : TextFile) : Integer;
- Var
- Size : Integer;
- IsCorrect : Boolean;
- Line : String;
- Begin
- AssignFile(TFile, Path);
- Reset(TFile);
- IsCorrect := True;
- Readln(TFile, Line);
- Readln(TFile, Line);
- Writeln('Запись количества элементов 2 массива...');
- Try
- Readln(TFile, Size);
- Except
- IsCorrect := False;
- End;
- If ((Size < 1) Or (IsCorrect = False)) Then
- Begin
- Writeln('Ошибка! Неверный ввод размера! Впишите данные с клавиатуры.');
- Size := SizeConsoleSecond();
- End;
- Writeln('Количество элементов 2 массива: ', Size);
- CloseFile(TFile);
- SizeFileSecond := Size;
- End;
- Function ArrayReadFileFirst(Path : String; Size : Integer; var TFile : TextFile; Arr : TArray) : TArray;
- Var
- I : Integer;
- Line : String;
- IsCorrect : Boolean;
- Begin
- AssignFile(TFile, Path);
- Reset(TFile);
- Dec(Size);
- IsCorrect := True;
- Readln(TFile, Line);
- Writeln('Запись массива...');
- Writeln('Первый массив: ');
- For I := 0 To Size Do
- Begin
- Try
- Read(TFile, Arr[I])
- Except
- Writeln(' Неверный ввод данных! Введите данные с клавиатуры.');
- Arr[I] := ExceptionReadFirst(I);
- End;
- Write(Arr[I], ' ');
- End;
- Writeln;
- CloseFile(TFile);
- ArrayReadFileFirst := Arr;
- End;
- Function ArrayReadFileSecond(Path : String; Size : Integer; var TFile : TextFile; Arr : TArray) : TArray;
- Var
- I : Integer;
- Line : String;
- IsCorrect : Boolean;
- Begin
- AssignFile(TFile, Path);
- Reset(TFile);
- Dec(Size);
- IsCorrect := True;
- Readln(TFile, Line);
- Readln(TFile, Line);
- Readln(TFile, Line);
- Writeln('Запись массива...');
- Writeln('Второй массив: ');
- For I := 0 To Size Do
- Begin
- Try
- Read(TFile, Arr[I])
- Except
- Writeln(' Неверный ввод данных! Введите данные с клавиатуры.');
- Arr[I] := ExceptionReadSecond(I);
- End;
- Write(Arr[I], ' ');
- End;
- Writeln;
- CloseFile(TFile);
- ArrayReadFileSecond := Arr;
- End;
- Procedure Output(ArrC : TArray);
- Var
- TFile : TextFile;
- Path : String;
- IsCorrect : Boolean;
- I : Integer;
- Begin
- Writeln;
- Writeln('Упорядоченный массив без повторяющихся чисел: ');
- For I := 0 To High(ArrC) Do
- Begin
- Write(ArrC[I], ' ');
- End;
- 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, 'Упорядоченный массив без повторяющихся чисел: ');
- For I := 0 To High(ArrC) Do
- Begin
- Write(TFIle, ArrC[I], ' ');
- End;
- CloseFile(TFile);
- Writeln('Данные записаны в файл.');
- Readln;
- End;
- Function FromFile() : TArray;
- Var
- Path : String;
- SizeFirst, SizeSecond : Integer;
- TFile : TextFile;
- ArrFirst, ArrSecond, ArrayC : TArray;
- Begin
- Writeln('При записи данных из файла, учтите, что на первой строке написано количество элементов массива, а далее через пробел элементы массива; на 3 строке размер второго массива, на 4 элементы массива через пробел');
- Path := PathChoice();
- SizeFirst := SizeFileFirst(Path, TFile);
- SetLength(ArrFirst, SizeFirst);
- ArrFirst := ArrayReadFileFirst(Path, SizeFirst, TFile, ArrFirst);
- SizeSecond := SizeFileSecond(Path, TFile);
- SetLength(ArrSecond, SizeSecond);
- ArrSecond := ArrayReadFileSecond(Path, SizeSecond, TFile, ArrSecond);
- ArrayC := ArrayCount(ArrFirst, ArrSecond, ArrayC);
- FromFile := ArrayC;
- 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;
- Function FromConsole() : TArray ;
- Var
- SizeFirst, SizeSecond : Integer;
- ArrFirst, ArrSecond, ArrayC : TArray;
- Begin
- SizeFirst := SizeConsoleFirst();
- SetLength(ArrFirst, SizeFirst);
- ArrFirst := ArrayReadConsole(SizeFirst, ArrFirst);
- SizeSecond := SizeConsoleSecond();
- SetLength(ArrSecond, SizeSecond);
- ArrSecond := ArrayReadConsole(SizeSecond, ArrSecond);
- ArrayC := ArrayCount(ArrFirst, ArrSecond, ArrayC);
- FromConsole := ArrayC;
- End;
- Function SourceChoice() : TArray;
- Var
- ChoiceNumber : Integer;
- Arr : TArray;
- IsCorrect : Boolean;
- 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
- Arr := FromConsole()
- Else
- Arr := FromFile();
- SourceChoice := Arr;
- End;
- Var
- IsCorrect : Boolean;
- MaxRes : Integer;
- ArrayC : TArray;
- Begin
- TaskEssence();
- ArrayC := SourceChoice();
- Output(ArrayC);
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement