VadimThink

Untitled

Nov 9th, 2019
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.80 KB | None | 0 0
  1. program Laba3_1;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. {$R *.res}
  6.  
  7. uses
  8.   System.SysUtils;
  9.  
  10. type
  11.     TIntArray = Array of Integer;
  12.    TStringArray = Array of String;
  13.  
  14. const
  15.     MIN = 0;
  16.    MAX = 5;
  17.  
  18. function GetLength(): Integer;
  19.  
  20. var SizeOfArray: Integer;
  21.     IsCorrect: Boolean;
  22.  
  23. begin
  24.     IsCorrect:= False;
  25.    repeat
  26.     Writeln('Сколько чисел вы хотите ввести? Введите число от 1 до 4');
  27.     try
  28.         Readln(SizeOfArray);
  29.          IsCorrect:= True;
  30.       except
  31.         Writeln('Введите целое число, пожалуйста');
  32.       end;
  33.    until(IsCorrect and (SizeOfArray > MIN) and (SizeOfArray < MAX));
  34.    GetLength:= SizeOfArray;
  35. end;
  36.  
  37. function GetNumbersFromFile(): String;
  38.  
  39. var
  40.     Input: TextFile;
  41.     IsInvalidInput: Boolean;
  42.    Text, Path: String;
  43.  
  44. begin
  45.     Writeln('Введите, пожалуйста, путь к файлу');
  46.    Readln(Path);
  47.    AssignFile(Input, Path);
  48.    Read(Input, Text);
  49.    Writeln(Text);
  50.    GetNumbersFromFile:= Text;
  51. end;
  52.  
  53.  
  54. function Split(Border, S: String): TIntArray;
  55. var
  56.     SubStr: TStringArray;
  57.    ResultStr: TIntArray;
  58.     S2: String;
  59.    i: Integer;
  60. begin
  61.     SetLength(SubStr, 4);
  62.     i  := 0;
  63.    S2 := S + Border;
  64.    repeat
  65.     SubStr[i]:= copy(S2, 1 , pos(' ', S2)- 1);
  66.       delete(S2, 1, pos(' ', S2));
  67.       ResultStr[i] := StrToInt(SubStr[i]);
  68.       Writeln(ResultStr[i]);
  69.       Inc(i);
  70.    until S2 = ' ';
  71.    Split:= ResultStr;
  72. end;
  73.  
  74. function IntegerToRomanConverting(Input: Integer): String;
  75.  
  76. var
  77.     ResultOfConverting: String;
  78.  
  79. begin
  80.     if ((Input < 1) or (Input > 2000)) then
  81.     IntegerToRomanConverting := 'Invalid Roman Number Value';
  82.    while (input >= 1000) do
  83.     begin
  84.         ResultOfConverting := ResultOfConverting + 'M';
  85.         Input := Input - 1000;
  86.       end;
  87.    while (Input >= 900) do
  88.     begin
  89.         ResultOfConverting := ResultOfConverting + 'CM';
  90.          Input := Input - 900;
  91.       end;
  92.    while (Input >= 500) do
  93.     begin
  94.             ResultOfConverting := ResultOfConverting + 'D';
  95.          Input := Input - 500;
  96.       end;
  97.    while (Input >= 400) do
  98.     begin
  99.         ResultOfConverting := ResultOfConverting + 'CD';
  100.          Input := Input - 400;
  101.       end;
  102.    while (Input >= 100) do
  103.     begin
  104.         ResultOfConverting := ResultOfConverting + 'C';
  105.         Input := Input - 100;
  106.       end;
  107.    while (Input >= 90) do
  108.     begin
  109.         ResultOfConverting := ResultOfConverting + 'XC';
  110.          Input := Input - 90;
  111.       end;
  112.    while (Input >= 50) do
  113.     begin
  114.         ResultOfConverting := ResultOfConverting + 'L';
  115.          Input := Input - 50;
  116.       end;
  117.    while (Input >= 40) do
  118.     begin
  119.         ResultOfConverting := ResultOfConverting + 'XL';
  120.         Input := Input - 40;
  121.       end;
  122.    while (Input >= 10) do
  123.     begin
  124.         ResultOfConverting := ResultOfConverting + 'X';
  125.          Input := Input - 10;
  126.       end;
  127.    while (Input >= 9) do
  128.       begin
  129.         ResultOfConverting := ResultOfConverting + 'IX';
  130.          Input := Input - 9;
  131.       end;
  132.    while (Input >= 5) do
  133.     begin
  134.         ResultOfConverting := ResultOfConverting + 'V';
  135.         Input := Input - 5;
  136.       end;
  137.    while (Input >= 4) do
  138.     begin
  139.         ResultOfConverting := ResultOfConverting + 'IV';
  140.          Input := Input - 4;
  141.       end;
  142.    while (Input >= 1) do
  143.     begin
  144.         ResultOfConverting := ResultOfConverting + 'I';
  145.          Input := Input - 1;
  146.       end;
  147.    IntegerToRomanConverting := ResultOfConverting;
  148. end;
  149.  
  150.  
  151. var
  152.     SizeOfArray, i, k: Integer;
  153.    IsCorrect: Boolean;
  154.    ArrayOfNumber: TIntArray;
  155.    OutputToTheFile, SNumbers: String;
  156.    InputKeyboardOrFile: Char;
  157.    ResultOfConverting: TStringArray;
  158.  
  159. begin
  160.     Writeln('Эта программа может переводить от 1 до 4 чисел в римскую систему счисления ');
  161.    Writeln('Числа должны быть целыми и вводится через пробел');
  162.    SizeOfArray := GetLength;
  163.    SetLength(ArrayOfNumber, SizeOfArray);
  164.    SetLength(ResultOfConverting, SizeOfArray);
  165.    Writeln('Если ввод будет осуществляться с клавиатуры, напишите букву K, если из файла - напишите F');
  166.    Readln(InputKeyboardOrFile);
  167.    IsCorrect:= False;
  168.    repeat
  169.     case InputKeyboardOrFile of
  170.         'K':
  171.             begin
  172.                 Writeln('Введите целые числа от 1 до 2000 через пробел. Чисел может быть от 1 до 4');
  173.                 Readln(SNumbers);
  174.                 IsCorrect := true;
  175.             end;
  176.         'F':
  177.             begin
  178.                 SNumbers := GetNumbersFromFile();
  179.                 IsCorrect := true;
  180.             end;
  181.             else
  182.             Writeln('Пожалуйста, введите K или F');
  183.     end;
  184.    until(IsCorrect);
  185.    ArrayOfNumber := Split(' ', SNumbers);
  186.    for i:=0 to SizeOfArray do
  187.     begin
  188.         ResultOfConverting[i] := IntegerToRomanConverting(ArrayOfNumber[i]);
  189.          Writeln(ArrayOfNumber[i], ' = ', ResultOfConverting[i]);
  190.       end;
  191.    Readln;
  192. end.
Advertisement
Add Comment
Please, Sign In to add comment