Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program Laba_3_1;
- Uses
- System.SysUtils;
- Const
- MIN_VALUE = 1;
- MAX_VALUE = 2000;
- Procedure OutputTaskInfo();
- Begin
- Writeln('Данная программа переводит число из десятичной системы счисления в римскую.');
- Writeln('Диапазон для ввода переводимого числа: ', MIN_VALUE, '...', MAX_VALUE);
- End;
- Function InputPathToFile(): String;
- Var
- Path: String;
- IsCorrect: Boolean;
- Begin
- Write('Укажите путь к файлу: ');
- Repeat
- IsCorrect := True;
- Readln(Path);
- If Not FileExists(Path) Then
- Begin
- Write('По указанному пути файл не найден! Укажите правильный путь: ');
- IsCorrect := False;
- End
- Else If ExtractFileExt(Path) <> '.txt' Then
- Begin
- Write('Ошибка, неправильный тип файла! Укажите правильный путь: ');
- IsCorrect := False;
- End;
- Until IsCorrect;
- InputPathToFile := Path;
- End;
- Function GetVerificationOfChoice(): Integer;
- Var
- Choice: Integer;
- IsCorrect: Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Try
- Readln(Choice);
- Except
- Writeln('Проверьте корректность ввода данных!');
- IsCorrect := False;
- End;
- If IsCorrect And ((Choice <> 0) And (Choice <> 1)) Then
- Begin
- Writeln('Для выбора введите 0 или 1!');
- IsCorrect := False;
- End;
- Until IsCorrect;
- GetVerificationOfChoice := Choice;
- End;
- Function InputNumberFromConsole(): String;
- Var
- StrNumber: String;
- Number: Integer;
- IsCorrect: Boolean;
- Begin
- Write('Введите переводимое число: ');
- Repeat
- IsCorrect := True;
- Try
- Readln(StrNumber);
- Number := StrToInt(StrNumber);
- Except
- Writeln('Проверьте корректность ввода данных!');
- IsCorrect := False;
- End;
- If (IsCorrect And ((Number < MIN_VALUE) Or (Number > MAX_VALUE))) Then
- Begin
- Writeln('Введите значение от ', MIN_VALUE, ' до ', MAX_VALUE, '!');
- IsCorrect := False;
- End;
- Until IsCorrect;
- InputNumberFromConsole := StrNumber;
- End;
- Function InputNumberFromFile(Const Path: String): String;
- Var
- StrNumber: String;
- Number: Integer;
- InputFile: TextFile;
- Begin
- Writeln('Происходит чтение числа...');
- AssignFile (InputFile, Path);
- Try
- Try
- Reset(InputFile);
- Readln(InputFile, StrNumber);
- Number := StrToInt(StrNumber);
- Finally
- CloseFile (InputFile);
- End;
- If (((Number < MIN_VALUE) Or (Number > MAX_VALUE))) Then
- Begin
- Writeln('В файле введено некорректное число! Введите число с консоли!');
- StrNumber := InputNumberFromConsole();
- End;
- Except
- Writeln('Ошибка при чтении данных! Введите число с консоли!');
- StrNumber := InputNumberFromConsole();
- End;
- InputNumberFromFile := StrNumber;
- End;
- Procedure OutputNumber(Const Choice: Integer; Const StrNumber: String; Path: String);
- Var
- OutputFile: TextFile;
- IsCorrect: Boolean;
- Begin
- If Choice = 0 Then
- Writeln('Введенное число: ', StrNumber);
- If Choice = 1 Then
- Begin
- Writeln('Вывод введенного числа в файл...');
- Repeat
- IsCorrect := True;
- AssignFile(OutputFile, Path);
- Try
- Try
- Rewrite(OutputFile);
- Write(OutputFile, 'Введенное число: ', StrNumber);
- Write(OutputFile, #13);
- Finally
- Close(OutputFile);
- End;
- Except
- Writeln('Ошибка! Измените параметры файла или укажите новую ссылку!');
- IsCorrect := False;
- Path := InputPathToFile();
- End;
- Until IsCorrect;
- Writeln('Данные успешно записаны в файл!');
- End;
- End;
- Function ConvertNumber(Const StrNumber: String): String;
- Const
- DecimalSystem: Array [0..13] Of Integer = (1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000, 2000);
- RomanSystem: Array [0..13] Of String = ('I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M', 'Z');
- Var
- RomanNumber: String;
- I, Number: Integer;
- Begin
- RomanNumber := '';
- Number := StrToInt(StrNumber);
- I := High(DecimalSystem) + 1;
- While Number > 0 Do
- Begin
- While DecimalSystem[I] > Number Do
- Dec(I);
- RomanNumber := RomanNumber + RomanSystem[I];
- Number := Number - DecimalSystem[I];
- End;
- ConvertNumber := RomanNumber;
- End;
- Procedure OutputRomanNumber(Const Choice: Integer; Const RomanNumber: String; Path: String);
- Var
- OutputFile: TextFile;
- IsCorrect: Boolean;
- Begin
- If Choice = 0 Then
- Writeln('Введенное число в римской системе будет равно ', RomanNumber, '.');
- If Choice = 1 Then
- Begin
- Writeln('Вывод переведенного числа в файл...');
- Repeat
- IsCorrect := True;
- AssignFile(OutputFile, Path);
- Try
- Try
- Append(OutputFile);
- Write(OutputFile, 'Введенное число в римской системе будет равно ', RomanNumber, '.');
- Write(OutputFile, #13);
- Finally
- Close(OutputFile);
- End;
- Except
- Writeln('Ошибка! Измените параметры файла или укажите новую ссылку!');
- IsCorrect := False;
- Path := InputPathToFile();
- End;
- Until IsCorrect;
- Writeln('Данные успешно записаны в файл!');
- End;
- End;
- Function ProcessUserInput(): String;
- Var
- PathToIn, StrNumber: String;
- ChoiceForInput: Integer;
- Begin
- Writeln('Вы желаете вводить данные с консоли(0) или из файла(1)?');
- ChoiceForInput := GetVerificationOfChoice();
- If ChoiceForInput = 0 Then
- Begin
- StrNumber := InputNumberFromConsole();
- End;
- If ChoiceForInput = 1 Then
- Begin
- PathToIn := InputPathToFile();
- StrNumber := InputNumberFromFile(PathToIn);
- End;
- ProcessUserInput := StrNumber;
- End;
- Procedure ProcessUserOutput(Const StrNumber, RomanNumber: String);
- Var
- PathToOut: String;
- ChoiceForOutput: Integer;
- Begin
- Writeln('Вы желаете получить данные в консоль(0) или в файл(1)?');
- ChoiceForOutput := GetVerificationOfChoice();
- If ChoiceForOutput = 1 Then
- PathToOut := InputPathToFile();
- OutputNumber(ChoiceForOutput, StrNumber, PathToOut);
- OutputRomanNumber(ChoiceForOutput, RomanNumber, PathToOut);
- End;
- Procedure Main();
- Var
- StrNumber, RomanNumber: String;
- Begin
- OutputTaskInfo();
- StrNumber := ProcessUserInput();
- RomanNumber := ConvertNumber(StrNumber);
- ProcessUserOutput(StrNumber, RomanNumber);
- End;
- Begin
- Main();
- Readln;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement