Advertisement
Ewerlost

Lab2_3(Delphi)

Oct 23rd, 2023 (edited)
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 6.17 KB | None | 0 0
  1. Program Lab2_3;
  2.  
  3. {$APPTYPE CONSOLE}
  4. {$R *.res}
  5.  
  6. Uses
  7.   System.SysUtils;
  8.  
  9. Var
  10.     Number, LengthA : Integer;
  11.     ArrA : Array of Integer;
  12.  
  13. Const
  14.     MIN_NUMBER = 1;
  15.     MAX_NUMBER = 1000000;
  16.  
  17. Function GetNum(Min, Max : Integer): Integer;
  18. Var
  19.     IsCorrect : Boolean;
  20.     N : Integer;
  21. Begin
  22.     Repeat
  23.         IsCorrect := True;
  24.         Try
  25.             Read(N);
  26.         Except
  27.             IsCorrect := False;
  28.             Writeln('Вы ввели некорректные данные. Попробуйте снова.');
  29.         End;
  30.  
  31.         If IsCorrect And ((N > Max) Or (N < Min)) Then
  32.         Begin
  33.             IsCorrect := False;
  34.             Writeln('Введено значение не входящее в диапазон допустимых значений');
  35.         End;
  36.  
  37.     Until IsCorrect;
  38.     GetNum := N;
  39. End;
  40.  
  41. Function InputNumFromConsole(): Integer;
  42. Begin
  43.     Writeln('Введите число для проверки, является ли оно палиндромом');
  44.     InputNumFromConsole := GetNum(MIN_NUMBER, MAX_NUMBER);;
  45. End;
  46.  
  47. Function CheckFile(Path : String; Var Num: Integer) : Boolean;
  48. Var
  49.     IsFileCorrect : Boolean;
  50.     InputFile : TextFile;
  51.  
  52. Begin
  53.     IsFileCorrect := True;
  54.     If FileExists(Path) Then
  55.     Begin
  56.         AssignFile(InputFile, Path);
  57.         Try
  58.             Reset(InputFile);
  59.         Except
  60.             Writeln('Не удалось открыть файл');
  61.             IsFileCorrect := False;
  62.         End;
  63.  
  64.         Try
  65.             Read(InputFile, Num);
  66.         Except
  67.             Writeln('Данные в файле представлены в неправильном формате!');
  68.             IsFileCorrect := False;
  69.         End;
  70.  
  71.         If IsFileCorrect And Not(EoF(InputFile)) Then
  72.         Begin
  73.             Writeln('Данные в файле представлены в неправильном формате');
  74.             IsFileCorrect := False;
  75.         End;
  76.  
  77.         If IsFileCorrect And ((Num < MIN_NUMBER) Or (Num > MAX_NUMBER)) Then
  78.         Begin
  79.             Writeln('Введено значение, не входящее в диапазон допустимых значений');
  80.             IsFileCorrect := False;
  81.         End;
  82.         CloseFile(InputFile);
  83.     End
  84.     Else
  85.     Begin
  86.         Writeln('Файла по данному пути не существует!');
  87.         IsFileCorrect := False
  88.     End;
  89.     CheckFile := IsFileCorrect;
  90. End;
  91.  
  92. Function AnalysNum(Number : Integer) : Integer;
  93. Var
  94.     K : Integer;
  95.  
  96. Begin
  97.     K := 0;
  98.     While (Number > 0)  Do Begin
  99.         Number := Number Div 10;
  100.         Inc(K);
  101.     End;
  102.     AnalysNum := K;
  103. End;
  104.  
  105. Procedure CreatArr(Var Arr : Array Of Integer; Numb : Integer);
  106. Var
  107.     I : Integer;
  108.  
  109. Begin
  110.     For I := 0 to High(ArrA) Do Begin
  111.         ArrA[I] := Numb Mod 10;
  112.         Numb := Numb Div 10;
  113.     End;
  114. End;
  115.  
  116. Function Check(Arr : Array Of Integer) : Boolean;
  117. Var
  118.     I : Integer;
  119.     Solution : Boolean;
  120.  
  121. Begin
  122.     Solution := True;
  123.     For I := 0 To (High(ArrA) Div 2) Do
  124.         If (ArrA[I] <> ArrA[High(ArrA) - I]) Then
  125.             Solution := False;
  126.     Check := Solution;
  127. End;
  128.  
  129. Function InputNum() : Integer;
  130. Var
  131.   Choice, Number : Integer;
  132.   PathFile : String;
  133.   IsFileCorrect : Boolean;
  134.  
  135. Begin
  136.     Writeln('Выберите способ ввода: ', #10, '1.Ввод из консоли', #10, '2.Ввод из файла');
  137.     Choice := GetNum(1,2);
  138.  
  139.     If Choice = 1 Then
  140.     Begin
  141.         Number := InputNumFromConsole;
  142.     End
  143.     Else
  144.     Begin
  145.         Repeat
  146.             Write('Введите путь к файлу с его расширением: ');
  147.             Readln(PathFile);
  148.             IsFileCorrect := CheckFile(PathFile, Number);
  149.         Until IsFileCorrect;
  150.     End;
  151.     InputNum := Number;
  152. End;
  153.  
  154. Procedure OutputSolution (ArrA : Array Of Integer);
  155. Var
  156.     I,Choice : Integer;
  157.     OutputFile : TextFile;
  158.     Path: String;
  159.     IsPathCorrect, Verdict : Boolean;
  160. Begin
  161.       Writeln('Выберите способ вывода: ', #10, '1.Вывод в консоль', #10, '2.Вывод в файл');
  162.       Choice := GetNum(1,2);
  163.       Verdict := Check(ArrA);
  164.  
  165.       If Choice = 1 Then
  166.       Begin
  167.           If Verdict Then
  168.               Writeln('Число является палиндромом')
  169.           Else
  170.               Writeln('Число не является палиндромом');
  171.           Readln;
  172.       End
  173.       Else
  174.       Begin
  175.           Writeln('Для вывода введите путь к файлу и его имя(например, С:\Projects\Number\Имя файла.txt). Если файл отсутствует, то он будет создан автоматически по указанному пути или в корневой папке программы(по умолчанию)');
  176.           Repeat
  177.               IsPathCorrect := True;
  178.               Write('Введите путь: ');
  179.               Readln(Path);
  180.               If Path = '' Then
  181.                   IsPathCorrect := False
  182.               Else
  183.               Begin
  184.                   AssignFile(OutputFile, Path);
  185.                   Try
  186.                       Rewrite(OutputFile);
  187.                   Except
  188.                       Writeln('Не удалось вывести в файл');
  189.                       IsPathCorrect := False;
  190.                   End;
  191.               End;
  192.  
  193.           Until IsPathCorrect;
  194.  
  195.       If Verdict Then
  196.           Write(OutputFile, 'Число является палиндромом')
  197.       Else
  198.           Write(OutputFile, 'Число не является палиндромом');
  199.       CloseFile(OutputFile);
  200.       Writeln('Вывод данных прошёл успешно!');
  201.       Readln;
  202.       End;
  203. End;
  204.  
  205. Begin
  206.     Writeln('Эта программа определит, является ли заданное натуральное число P палиндромом', #10, 'Диапазон для ввода числа от 1 до 1000000');
  207.     Number := InputNum;
  208.     LengthA := AnalysNum(Number);
  209.     SetLength(ArrA, LengthA);
  210.     CreatArr(ArrA, Number);
  211.     OutputSolution(ArrA);
  212.     Readln;
  213. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement