Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program L3_1_D;
- Uses
- System.SysUtils, Windows;
- Type
- TStrings = Array of String;
- Procedure OutputAnswer(Strings : TStrings);
- Var
- IsCorrect : Boolean;
- Path : String;
- TextF : TextFile;
- Begin
- Writeln('Слово после перекодировки: ', Strings[0]);
- If (Length(Strings) = 2) Then
- Writeln('Слово после обратной перекодировки: ', Strings[1]);
- Repeat
- IsCorrect := True;
- Writeln('Введите путь файла для вывода: ');
- Try
- Readln(Path);
- AssignFile(TextF, Path);
- Reset(TextF);
- 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
- IsCorrect := False;
- Writeln('Ошибка открытия файла! Учтите, что файл должен быть формата *.txt');
- End;
- Until IsCorrect;
- Append(TextF);
- Writeln(TextF);
- Writeln(TextF, 'Слово после перекодировки: ', Strings[0]);
- If (Length(Strings) = 2) Then
- Writeln(TextF, 'Слово после обратной перекодировки: ', Strings[1]);
- CloseFile(TextF);
- Writeln('Данные успешно записаны в файл!');
- Readln;
- End;
- Function Uncoding(Strings : TStrings; IsChanged : Array of Boolean; Str : String) : String;
- Var
- I, J : Integer;
- Str1, Str2 : String;
- Begin
- Str1 := Strings[1];
- Str2 := Strings[2];
- For I := 1 To High(Str) Do
- Begin
- For J := 1 To High(Str2) Do
- Begin
- If ((Str[I] = Str2[J]) And (IsChanged[I-1])) Then
- Begin
- Str[I] := Str1[J];
- IsChanged[I-1] := False;
- End;
- End;
- End;
- Uncoding := Str;
- End;
- Function Coding(Strings : TStrings) : TStrings;
- Var
- Str1, Str2, StringAfterCoding, StringAfterDecoding : String;
- I, J, UncodingChoice : Integer;
- IsCorrect : Boolean;
- IsChanged : Array of Boolean;
- Begin
- StringAfterCoding := Strings[0];
- Str1 := Strings[1];
- Str2 := Strings[2];
- SetLength(IsChanged, Length(StringAfterCoding));
- For I := 1 To High(StringAfterCoding) Do
- Begin
- For J := 1 To High(Str1) Do
- Begin
- If ((StringAfterCoding[I] = Str1[J]) And (Not IsChanged[I-1])) Then
- Begin
- StringAfterCoding[I] := Str2[J];
- IsChanged[I-1] := True;
- End;
- End;
- End;
- Repeat
- Writeln('Желаете ли Вы перекодировать текст обратно в читаемый? Введите 0, если нет. 1, если да');
- IsCorrect := True;
- Try
- Readln(UncodingChoice);
- Except
- IsCorrect := False;
- End;
- If ((UncodingChoice <> 0) And (UncodingChoice <> 1) Or (Not IsCorrect)) Then
- Begin
- IsCorrect := False;
- Writeln('Неверный ввод!');
- End;
- Until IsCorrect;
- If (UncodingChoice = 1) Then
- Begin
- StringAfterDecoding := Uncoding(Strings, IsChanged, StringAfterCoding);
- SetLength(Strings, 2);
- Strings[0] := StringAfterCoding;
- Strings[1] := StringAfterDecoding;
- End
- Else
- Begin
- SetLength(Strings, 1);
- Strings[0] := StringAfterCoding;
- End;
- Coding := Strings;
- End;
- Procedure OutputTask();
- Begin
- Writeln('Данная программа кодирует текст по выбранным кодировкам и обратно.');
- End;
- Function ReadStringFromConsole() : String;
- Var
- Str : String;
- Begin
- Writeln('Введите строку с клавиатуры: ');
- Readln(Str);
- ReadStringFromConsole := Str;
- End;
- Function ReadFirstKeyFromConsole() : String;
- Var
- Str : String;
- I : Integer;
- IsCorrect : Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите Str1(ключ): ');
- Readln(Str);
- For I := 1 To High(Str) Do
- Begin
- If (Str[I] = ' ') Then
- Begin
- IsCorrect := False;
- End;
- End;
- If (Not IsCorrect) Then
- Writeln('Ключ не может содержать пробел! Повторите попытку.');
- Until IsCorrect;
- ReadFirstKeyFromConsole := Str;
- End;
- Function ReadSecondKeyFromConsole() : String;
- Var
- Str : String;
- IsCorrect : Boolean;
- I : Integer;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите Str2(ключ): ');
- Readln(Str);
- For I := 1 To High(Str) Do
- Begin
- If (Str[I] = ' ') Then
- Begin
- IsCorrect := False;
- End;
- End;
- If (Not IsCorrect) Then
- Writeln('Ключ не может содержать пробел! Повторите попытку.');
- Until IsCorrect;
- ReadSecondKeyFromConsole := Str;
- End;
- Function ChoicePath() : String;
- Var
- Path : String;
- TextF : TextFile;
- IsCorrect : Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите путь файла: ');
- Try
- Readln(Path);
- AssignFile(TextF, Path);
- Reset(TextF);
- Except
- IsCorrect := False;
- Writeln('Неверный путь файла!');
- End;
- Until IsCorrect;
- Writeln('Файл успешно открыт!');
- ChoicePath := Path;
- CloseFile(TextF);
- End;
- Function InputStrFromFile(var TextF : TextFile; Path : String) : String;
- Var
- Str : String;
- IsCorrect : Boolean;
- Begin
- AssignFile(TextF, Path);
- Reset(TextF);
- Writeln('Запись строки...');
- Readln(TextF, Str);
- If Length(Str) < 1 Then
- Begin
- Writeln('Ошибка ввода! Строка должна иметь хотя бы 1 символ! Введите строку с клавиатуры.');
- Str := ReadStringFromConsole();
- End;
- Writeln('Строка для перекодирования: ', Str);
- CloseFile(TextF);
- InputStrFromFile := Str
- End;
- Function InputKeyFromFile(var TextF : TextFile; Path : String) : TStrings;
- Var
- Str1, Str2, Line : String;
- Keys : TStrings;
- IsCorrect : Boolean;
- I : Integer;
- Begin
- AssignFile(TextF, Path);
- Reset(TextF);
- Readln(TextF, Line);
- IsCorrect := True;
- Writeln('Запись ключа str1...');
- Readln(TextF, Str1);
- If (Length(Str1) < 1) Then
- Begin
- Writeln('Ошибка ввода! Введите ключ Str1 с клавиатуры!');
- Str1 := ReadFirstKeyFromConsole();
- End
- Else
- Begin
- For I := 1 To Length(Str1) Do
- Begin
- If (Str1[I] = ' ') Then
- Begin
- IsCorrect := False;
- End;
- End;
- If (Not IsCorrect) Then
- Begin
- Writeln('Ключ не может содержать пробел! Введите ключ Str1 с клавиатуры.');
- Str1 := ReadFirstKeyFromConsole();
- End
- End;
- Writeln('Ключ 1: ', Str1);
- IsCorrect := True;
- Writeln('Запись ключа str2...');
- Readln(TextF, Str2);
- If (Length(Str2) < 1) Then
- Begin
- Writeln('Ошибка ввода! Введите ключ Str2 с клавиатуры!');
- Str1 := ReadSecondKeyFromConsole();
- End
- Else
- Begin
- For I := 1 To Length(Str2) Do
- Begin
- If (Str2[I] = ' ') Then
- Begin
- IsCorrect := False;
- End;
- End;
- If (Not IsCorrect) Then
- Begin
- Writeln('Ключ не может содержать пробел! Введите ключ Str2 с клавиатуры.');
- Str2 := ReadSecondKeyFromConsole();
- End
- End;
- Writeln('Ключ 2: ', Str2);
- Repeat
- IsCorrect := True;
- If (Length(Str1) <> Length(Str2)) Then
- Begin
- Writeln('Ключи должны иметь одинаковую длину! Введите корректные ключи с клавиатуры!');
- IsCorrect := False;
- Str1 := ReadFirstKeyFromConsole();
- Str2 := ReadSecondKeyFromConsole();
- End;
- Until IsCorrect;
- CloseFile(TextF);
- SetLength(Keys, 2);
- Keys[0] := Str1;
- Keys[1] := Str2;
- InputKeyFromFile := Keys;
- End;
- Function InputFromFile() : TStrings;
- Var
- TextF : TextFile;
- Path, Str : String;
- Strings, Keys : TStrings;
- Begin
- Path := ChoicePath();
- Str := InputStrFromFile(TextF, Path);
- Keys := InputKeyFromFile(TextF, Path);
- SetLength(Strings, 3);
- Strings[0] := Str;
- Strings[1] := Keys[0];
- Strings[2] := Keys[1];
- InputFromFile := Strings;
- End;
- Function InputFromConsole() : TStrings;
- Var
- Strings : TStrings;
- IsCorrect : Boolean;
- Str, Str1, Str2 : String;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите строку, которую нужно перекодировать: ');
- Try
- Readln(Str);
- Except
- Writeln('Ошибка ввода! Текст слишком большой!');
- IsCorrect := False;
- End;
- Until IsCorrect;
- Repeat
- Str1 := ReadFirstKeyFromConsole();
- Str2 := ReadSecondKeyFromConsole();
- If (Length(Str1) <> Length(Str2)) Then
- Begin
- IsCorrect := True;
- Writeln('Ключи должны иметь одинаковую длину!');
- End;
- Until IsCorrect;
- SetLength(Strings, 3);
- Strings[0] := Str;
- Strings[1] := Str1;
- Strings[2] := Str2;
- InputFromConsole := Strings;
- End;
- Function ChoiceOfInput() : TStrings;
- Var
- Strings : TStrings;
- Choice : Integer;
- IsCorrect : Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Выберите, откуда вводить данные. Введите 0, если с консоли; 1, если с файла');
- Try
- Readln(Choice);
- Except
- IsCorrect := False;
- End;
- If ((Not IsCorrect) Or ((Choice <> 0) And (Choice <> 1))) Then
- Begin
- Writeln('Неверный ввод данных!');
- IsCorrect := False;
- End;
- Until IsCorrect;
- If (Choice = 0) Then
- Strings := InputFromConsole()
- Else
- Strings := InputFromFile();
- ChoiceOfInput := Strings;
- End;
- Var
- Strings : TStrings;
- Str : String;
- Begin
- OutputTask();
- Strings := ChoiceOfInput();
- Strings := Coding(Strings);
- OutputAnswer(Strings);
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement