Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 7.46 KB | None | 0 0
  1. program Project4;
  2.  
  3. {$APPTYPE CONSOLE}
  4. {$R *.res}
  5.  
  6. uses
  7.    System.SysUtils;
  8.  
  9. type
  10.    SeqArr = Array of Integer;
  11.  
  12. const
  13.    MIN_N = 2;
  14.    MIN_INT = Low(Integer);
  15.    MAX_INT = High(Integer);
  16.  
  17. function GetChoice() : String;
  18. var
  19.    Choice : String;
  20.    IsCorrect : Boolean;
  21. begin
  22.    Writeln('Последовательность вводится из клавиатуры или из файла? (Key|File)');
  23.    repeat
  24.    begin
  25.       Readln(Choice);
  26.       if ((Choice = 'Key') or (Choice = 'File')) then
  27.          IsCorrect := True
  28.       else
  29.       begin
  30.          Writeln('Ошибка ввода. Введите "Key" или "File".');
  31.          IsCorrect := False;
  32.       end;
  33.    end;
  34.    until(IsCorrect) ;
  35.    GetChoice := Choice;
  36. end;
  37.  
  38. function GetFileName(Message : String) : String;
  39. var
  40.    NameFile: String;
  41.    IsCorrect: Boolean;
  42. begin
  43.    Writeln(Message);
  44.    repeat
  45.       Readln(NameFile);
  46.       if FileExists(NameFile) then
  47.          IsCorrect := True
  48.       else
  49.       begin
  50.          Writeln('Имя файла введено некорректно. Введите имя файла в формате "name.txt".') ;
  51.          IsCorrect := False;
  52.       end;
  53.    until IsCorrect;
  54.    GetFileName := NameFile;
  55. end;
  56.  
  57.  
  58. function CorrectInput(MIN_NUM, MAX_NUM : Integer) : Integer;
  59. var
  60.    Num : Integer;
  61.    IsCorrect : Boolean;
  62. begin
  63.    IsCorrect := True;
  64.    Num := 0;
  65.    repeat
  66.       try
  67.       begin
  68.          Readln(Num);
  69.          if ((Num < MIN_NUM) or (Num > MAX_NUM)) then
  70.          begin
  71.             Writeln('Ошибка! Введите число от ', MIN_NUM, ' до ', MAX_NUM);
  72.             IsCorrect := False;
  73.          end
  74.          else
  75.             IsCorrect := True;
  76.       end;
  77.       except
  78.       begin
  79.          Writeln('Ошибка! Введите число от ', MIN_NUM, ' до ', MAX_NUM);
  80.          IsCorrect := False;
  81.       end;
  82.       end;
  83.    until (IsCorrect);
  84.    CorrectInput := Num;
  85. end;
  86.  
  87. function GetArr(N : Integer) : SeqArr;
  88. var
  89.    I : Integer;
  90.    ArrSequence : SeqArr;
  91. begin
  92.    Setlength(ArrSequence, N );
  93.    for I := 0 to (N-1) do
  94.    begin
  95.       Writeln('Введите ', (I + 1), ' элемент последовательности');
  96.       ArrSequence[I] := CorrectInput(MIN_INT, MAX_INT);
  97.    end;
  98.    GetArr := ArrSequence;
  99. end;
  100.  
  101. function GetN (FileName : String) : Integer;
  102. var
  103.    S, N : Integer;
  104.    IntSeq : SeqArr;
  105.    f : TextFile;
  106. begin
  107.    SetLength(IntSeq, N);
  108.     try
  109.       Assign(f, FileName);
  110.       Reset(f);
  111.    except
  112.       WriteLn('Ошибка доступа, повторите попытку.');
  113.       FileName := GetFileName('Введите имя файла в формате "name.txt"');
  114.    end;
  115.    N := 0;
  116.    while not Eof(f)do
  117.    begin
  118.       Read(f,S);
  119.       Inc(N)
  120.    end;
  121.    CloseFile(f);
  122.    GetN := N;
  123. end;
  124.  
  125. function EmptyFile (N : Integer) : Boolean;
  126. var
  127.    IsCorrect : Boolean;
  128. begin
  129.    if N = 0 then
  130.    begin
  131.       Writeln('Файл пуст. Повторите попытку.');
  132.       IsCorrect := False;
  133.    end
  134.    else
  135.       IsCorrect := True;
  136.    EmptyFile := IsCorrect;
  137. end;
  138.  
  139. function GetArrSequence(N : Integer; FileName: String) : SeqArr;
  140. var
  141.    I : Integer;
  142.    IntSeq : SeqArr;
  143.    f : TextFile;
  144. begin
  145.     try
  146.       Assign(f, FileName);
  147.       Reset(f);
  148.    except
  149.       WriteLn('Ошибка доступа, повторите попытку.');
  150.       FileName := GetFileName('Введите имя файла в формате "name.txt"');
  151.    end;
  152.    SetLength(IntSeq, N);
  153.    for I := 0 to N do
  154.       Read(f, IntSeq[I]);
  155.    CloseFile(f);
  156.    GetArrSequence := IntSeq;
  157. end;
  158.  
  159. function CheckElements (N : Integer; Sequence : SeqArr) : Boolean;
  160. var
  161.    I : Integer;
  162.    IsCorrect : Boolean;
  163. begin
  164.    I := 1;
  165.    while (I < N) and (IsCorrect) do
  166.    begin
  167.       if Sequence[I] > Sequence[I-1] then
  168.          IsCorrect := False;
  169.       Inc(I);
  170.    end;
  171.    CheckElements := IsCorrect;
  172. end;
  173.  
  174. procedure WriteResult (IsCorrect : Boolean; N : Integer; NameFile : String; Sequence : SeqArr);
  175. var
  176.    OutputFile : TextFile;
  177.    I : Integer;
  178. begin
  179.    try
  180.       Assign(OutputFile, NameFile);
  181.       ReWrite(OutputFile);
  182.       I := 0;
  183.       Write(OutputFile,'Последовательность ');
  184.       while I < N do
  185.       begin
  186.          Write (OutputFile, Sequence[I], ' ');
  187.          Inc(I);
  188.       end;
  189.       if IsCorrect = True then
  190.          Writeln(OutputFile,' не является невозрастающей.')
  191.       else
  192.          Writeln (OutputFile,' является невозрастающей.');
  193.    except
  194.       Write(OutputFile,'Ошибка доступа, повторите попытку.');
  195.    end;
  196.    CloseFile(OutputFile);
  197. end;
  198.  
  199. procedure FileOutputResult (IsCorrect : Boolean; N : Integer; NameFile : String; Sequence : SeqArr);
  200. var
  201.    I : Integer;
  202.    OutputFile : TextFile;
  203.    S : String;
  204. begin
  205.    Assign(OutputFile, NameFile);
  206.    ReWrite(OutputFile);
  207.    try
  208.       Write(OutputFile,'Последовательность ');
  209.       for I := 0 to (N-1) do
  210.          Write(OutputFile, Sequence[I], ' ');
  211.       if IsCorrect = True then
  212.          Writeln(OutputFile,'является невозрастающей.')
  213.       else
  214.          Write (OutputFile, 'не является невозрастающей.');
  215.    except
  216.       Write('Ошибка доступа, повторите попытку.');
  217.    end;
  218.    CloseFile(OutputFile);
  219. end;
  220.  
  221. procedure KeyOutputResult (N : Integer; IsCorrect : Boolean; Sequense : SeqArr; Mass : String);
  222. var
  223.    I : Integer;
  224. begin
  225.    I := 0;
  226.    Write('Последовательность ');
  227.    while (i < N) do
  228.    begin
  229.       Write(Sequense[i], ' ');
  230.       Inc(I);
  231.    end;
  232.    if (IsCorrect = True) then
  233.       Writeln(' является невозрастающей.', Mass)
  234.    else
  235.       Writeln(' не является невозрастающей.', Mass)
  236. end;
  237.  
  238. procedure InputKeyboard();
  239. var
  240.    N : Integer;
  241.    IsCorrect : Boolean;
  242.    ArrSequence : SeqArr;
  243. begin
  244.    Writeln('Введите количество элементов последовательности');
  245.    N := CorrectInput(MIN_N, MAX_INT);
  246.    ArrSequence := GetArr(N);
  247.    IsCorrect := CheckElements(N, ArrSequence);
  248.    KeyOutputResult(N, IsCorrect, ArrSequence, '');
  249.    Readln;
  250. end;
  251.  
  252. procedure InputFile();
  253. var
  254.    N : Integer;
  255.    NameFile, NameOutputFile, StrSequence : String;
  256.    IsCorrect : Boolean;
  257.    ArrSequence : SeqArr;
  258. begin
  259.    IsCorrect := True;
  260.    while (IsCorrect) do
  261.    begin
  262.       NameFile := GetFileName('Введите имя файла в формате "Name.txt".');
  263.       N := GetN(NameFile);
  264.       IsCorrect := EmptyFile(N);
  265.    end;
  266.    ArrSequence := GetArrSequence(N, NameFile);
  267.    IsCorrect := CheckElements(N, ArrSequence);
  268.    NameOutputFile := GetFileName('Введите имя файла, в который нужно записать результат.');
  269.    WriteResult(IsCorrect, N, NameOutputFile, ArrSequence);
  270.    FileOutputResult(IsCorrect, N, NameOutputFile, ArrSequence);
  271.    KeyOutputResult(N, IsCorrect, ArrSequence, ' Результат записан в указанный файл.');
  272.    Readln;
  273. end;
  274.  
  275. procedure Main();
  276. var
  277.    Choice : String;
  278. begin
  279.    Writeln ('Задача:  Проверить является ли данная числовая последовательность а1, a2,..., an невозрастающей.');
  280.    Choice := GetChoice;
  281.    if (Choice = 'Key') then
  282.       InputKeyboard
  283.    else
  284.       InputFile;
  285. end;
  286.  
  287. begin
  288.    Main;
  289. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement