Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program L3_2_D;
- uses
- System.SysUtils;
- Type
- TSet = Set of AnsiChar;
- TSets = Array Of TSet;
- Function GetSizeOfSet(Set1 : TSet) : Integer;
- Var
- Size : Integer;
- Ch : AnsiChar;
- Begin
- Size := 0;
- For Ch In Set1 Do
- Inc(Size);
- GetSizeOfSet := Size;
- End;
- Procedure Output(Sets : TSets);
- Var
- TextF : TextFile;
- Path : String;
- IsCorrect : Boolean;
- I, Size : Integer;
- Symbol : AnsiChar;
- Begin
- Writeln(#1310'Множество Y = X1 * X2 * X3: ');
- For Symbol In Sets[0] Do
- Write(Symbol, ' ');
- Size := GetSizeOfSet(Sets[1]);
- Writeln;
- If (Size = 0) Then
- Writeln('Цифры не были встречены в подмножестве Y1!')
- Else
- Begin
- Writeln('Цифры, встреченные в подмножестве Y1: ');
- For Symbol In Sets[1] Do
- Write(Symbol, ' ');
- Writeln;
- End;
- Repeat
- IsCorrect := True;
- Writeln('Введите путь файла для вывода: ');
- Try
- Readln(Path);
- AssignFile(TextF, Path);
- Reset(TextF);
- Except
- IsCorrect := False;
- Writeln('Неверный путь файла!');
- CloseFile(TextF);
- End;
- Until IsCorrect;
- Append(TextF);
- Writeln(TextF);
- Writeln(TextF, 'Множество Y = X1 * X2 * X3: ');
- For Symbol In Sets[0] Do
- Write(TextF, Symbol, ' ');
- Writeln(TextF);
- If (Size = 0) Then
- Writeln(TextF, 'Цифры не были встречены в подмножестве Y1!')
- Else
- Begin
- Writeln(TextF, 'Цифры, встреченные в подмножестве Y1: ');
- For Symbol In Sets[1] Do
- Write(Symbol, ' ');
- Writeln;
- End;
- CloseFile(TextF);
- Writeln('Данные записаны в файл.');
- Readln;
- End;
- Function SetCount(Sets : TSets) : TSets;
- Var
- ResultSets : TSets;
- SetOfNumbers : TSet;
- Begin
- SetOfNumbers := ['0'..'9'];
- SetLength(ResultSets, 2);
- ResultSets[0] := Sets[0] * Sets[1] * Sets[2];
- ResultSets[1] := ResultSets[0] * SetOfNumbers;
- SetCount := ResultSets;
- End;
- Procedure OutputTask();
- Begin
- Writeln('Данная программа формирует множество Y={X1 * X2* X3} и выделяет из него подмножество Y1, которое представляет все цифры,входящие в Y. Например, дано X1={‘s’, ‘v’, ‘e’, ‘t’, ‘a’,’ ‘2’}; X2={‘*’, ’-‘, ‘*’, ‘-‘}; X3={‘1’, ‘4’, ‘7’, ‘a’, ‘b’, ‘c’}.');
- End;
- Procedure OutputSet(Set1 : TSet; Num : Integer);
- Var
- Symbol : AnsiChar;
- Begin
- Writeln('Считанное множество номер ', (Num+1),' :');
- For Symbol In Set1 Do
- Write(Symbol, ' ');
- End;
- Function PathChoice() : String;
- Var
- Path : String;
- InputFile : TextFile;
- IsCorrect : Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите путь файла: ');
- Try
- Readln(Path);
- AssignFile(InputFile, Path);
- Reset(InputFile);
- Except
- IsCorrect := False;
- End;
- If (Not IsCorrect Or (Path[Length(Path)] <> 't') And (Path[Length(Path) - 1] <> 'x') And (Path[Length(Path) - 2] <> 't') And (Path[Length(Path) - 3] <> '.')) Then
- Begin
- Writeln('Неверный путь файла!');
- IsCorrect := False;
- End;
- Until IsCorrect;
- Writeln('Файл успешно открыт!');
- PathChoice := Path;
- CloseFile(InputFile);
- End;
- Function InputOneSetFromConsole(Num : Integer) : TSet;
- Var
- Symbol : AnsiChar;
- IsCorrect : Boolean;
- Amount, I : Integer;
- Set1 : TSet;
- Line : AnsiString;
- Begin
- Set1 := [];
- Repeat
- IsCorrect := True;
- Writeln('Выберите, сколько элементов будет в ', (Num+1), ' множестве: ');
- Try
- Readln(Amount);
- Except
- IsCorrect := False;
- End;
- If ((Not IsCorrect) Or (Amount < 1)) Then
- Begin
- IsCorrect := False;
- Writeln('Неверный ввод! Число должно быть больше 1');
- End;
- Until IsCorrect;
- For I := 1 To Amount Do
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите ', I , ' элемент множества ', (Num+1),' : ');
- Readln(Line);
- If ((Length(Line) <> 1) Or (Line[1] = ' ')) Then
- Begin
- IsCorrect := False;
- Writeln('Ошибка! Элемент должен быть единичным символом и не пробелом! Повторите попытку.');
- End
- Else
- Set1 := Set1 + [AnsiChar(Line[1])];
- Until IsCorrect;
- End;
- InputOneSetFromConsole := Set1;
- End;
- Function InputSetsFromConsole() : TSets;
- Var
- Sets : TSets;
- I : Integer;
- Begin
- SetLength(Sets, 3);
- For I := 0 To 2 Do
- Begin
- Sets[I] := InputOneSetFromConsole(I);
- End;
- InputSetsFromConsole := Sets;
- End;
- Function ReadingSet(Path : String; Num : Integer) : TSet;
- Var
- InputFile : TextFile;
- Line : String;
- Symbol : AnsiChar;
- I : Integer;
- Set1 : TSet;
- IsCorrect : Boolean;
- Begin
- Set1 := [];
- AssignFile(InputFile, Path);
- Reset(InputFile);
- For I := 1 To Num Do
- Readln(InputFile);
- Read(InputFile, Line);
- CloseFile(InputFIle);
- If (Length(Line) = 0) Then
- Begin
- Writeln('Ошибка! Введена пустая строка! Введите элементы ', (Num+1), ' множества с клавиатуры.');
- Set1 := InputOneSetFromConsole(Num);
- End
- Else
- Begin
- IsCorrect := True;
- For I := 1 To High(Line) Do
- If (Line[I] = ' ') Then
- IsCorrect := False;
- If (Not IsCorrect) Then
- Begin
- Writeln('Пробел не может быть элементом множества! Введите элементы ', (Num+1), ' множества с клавиатуры.');
- Set1 := InputOneSetFromConsole(Num);
- End
- Else
- For I := 1 To High(Line) Do
- Set1 := Set1 + [AnsiChar(Line[I])];
- End;
- ReadingSet := Set1;
- End;
- Function InputFromFile() : TSets;
- Var
- InputFile : TextFile;
- Set1 : TSet;
- Path : String;
- Line : String;
- Symbol : AnsiChar;
- IsCorrect : Boolean;
- Sets : TSets;
- I : Integer;
- Begin
- Writeln('При вводе из файла учтите, что элементы множества должны быть записаны в файле в строку без пробелов(1 множество - 1 строка. 2 множество - 2 строка. 3 множество - 3 строка).');
- SetLength(Sets, 3);
- Path := PathChoice();
- For I := 0 To 2 Do
- Begin
- Sets[I] := ReadingSet(Path, I);
- OutputSet(Sets[I], I);
- End;
- InputFromFile := Sets;
- End;
- Function SourceChoice() : TSets;
- Var
- ChoiceNumber : Integer;
- IsCorrect : Boolean;
- Sets : TSets;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите, откуда будут вводиться данные: 0, если с консоли; 1, если с файла.');
- Try
- Readln(ChoiceNumber);
- Except
- IsCorrect := False;
- End;
- If ((Not IsCorrect) Or ((ChoiceNumber <> 0) And (ChoiceNumber <> 1))) Then
- Begin
- IsCorrect := False;
- Writeln('Неверный ввод данных!');
- End;
- Until IsCorrect;
- If (ChoiceNumber = 0) Then
- Sets := InputSetsFromConsole()
- Else
- Sets := InputFromFile();
- SourceChoice := Sets;
- End;
- Var
- Sets, ResultSets : TSets;
- Begin
- OutputTask();
- Sets := SourceChoice();
- ResultSets := SetCount(Sets);
- Output(ResultSets);
- Readln;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement