Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.54 KB | None | 0 0
  1. program lab6;
  2. {uses SysUtils;}
  3.  
  4. const
  5. MAX_SIZE = 10;
  6.  
  7. type tArray = array [1..MAX_SIZE] of integer;
  8.  
  9. var
  10. a : tArray; //А - заданный массив
  11. n, u, max, npoz : integer;
  12. fin, fout : TextFile;
  13.  
  14. procedure DataRead(var inFile : TextFile; var inN, inU : integer; var inA : tArray);
  15. var
  16. i : integer;
  17. begin
  18.     if (ParamCount < 2) then
  19.     begin
  20.         writeln('Не заданы параметры программы');
  21.         readln;
  22.         exit;
  23.     end;
  24.  
  25.     //открываем файл
  26.     AssignFile(inFile, ParamStr(1));
  27.     Reset(inFile);
  28.  
  29.     //ввод n
  30.     readln(inFile, inN);
  31.     //ввод массива
  32.     i := 1;
  33.     while (i <= inN) do
  34.     begin
  35.         readln(inFile, inA[i]);
  36.         i := i + 1;
  37.     end;
  38.  
  39.     //ввод u
  40.     read(inFile, inU);
  41.  
  42.     CloseFile(inFile);
  43. end;
  44.  
  45. procedure FindFirstPositive(var inNpoz : integer; const inN : integer; const inA : tArray);
  46. var
  47. i : integer;
  48. begin
  49.     i := 1;
  50.     inNpoz := 0;
  51.     while (i <= inN) and (inNpoz = 0) do
  52.     begin
  53.         if (inA[i] > 0) then
  54.             inNpoz := i;
  55.         i := i + 1;
  56.     end;
  57. end;
  58.  
  59. procedure FindLowerU(var inMax : integer; const inNpoz, inN, inU : integer; const inA : tArray);
  60. var
  61. i : integer;
  62. begin
  63.     // поиск 1 элемента, значение которого меньше u
  64.     i := inNpoz + 1;
  65.     inMax := 0;
  66.  
  67.     //ищем первый элемент, удов условию
  68.     while (i <= inN) and (inMax = 0) do
  69.     begin
  70.         if (inA[i] < inU) then
  71.             inMax := i;
  72.         i := i + 1;
  73.     end;
  74. end;
  75.  
  76. procedure FindMax(var inMax : integer; const inN, inU : integer; const inA : tArray);
  77. var
  78. i : integer;
  79. begin
  80.     i := inMax + 1;
  81.  
  82.     // ищем первый максимальный
  83.     while (i <= inN) and (inMax <> 0) do
  84.     begin
  85.         if (inA[i] < inU) and (inA[inMax] < inA[i]) then
  86.             inMax := i;
  87.         i := i + 1;
  88.     end;
  89. end;
  90.  
  91. procedure DataWrite(var outFile : TextFile; const inMax, inNpoz, inN, inU: integer; const inA : tArray);
  92. var
  93. i : integer;
  94.     begin
  95.     AssignFile(outFile, ParamStr(2));
  96.     Rewrite(outFile);
  97.     //вывод введённых данных
  98.     writeln(outFile, 'Лаб.6':40);
  99.     writeln(outFile, 'Количество элементов массива = ', n);
  100.     writeln(outFile, 'Введённые элементы:');
  101.     i := 1;
  102.     while (i <= inN) do
  103.     begin
  104.         write(outFile, inA[i], ' ');
  105.         i := i + 1;
  106.     end;
  107.  
  108.     writeln(outFile, 'Введенное значение U = ', inU);
  109.  
  110.     if (inNpoz = 0) then
  111.         writeln(outFile, 'Невозможно найти U. В массиве нет положительных элементов')
  112.     else
  113.     if(inMax <> 0) then
  114.         WriteLn(fout, 'Искомый номер: ', inMax)
  115.     else
  116.     begin
  117.         WriteLn(fout, 'Невозможно найти U.');
  118.         if(inNpoz <> inN) then
  119.             WriteLn(fout, 'Все элементы после первого положительного больше U.');
  120.     end;
  121.  
  122.     CloseFile(fout);
  123. end;
  124.  
  125. begin
  126.     max := 0;
  127.     //ограничение: кол-во эл-в не превышает 10, абсолютное значение эл-в не превышает 10
  128.     DataRead(fin, n, u, a);
  129.  
  130.     //поиск первого положительного
  131.     FindFirstPositive(npoz, n, a);
  132.  
  133.     if(npoz <> 0) then
  134.     begin
  135.         FindLowerU(max, npoz, n, u, a);
  136.         FindMax(max, n, u, a);
  137.     end;
  138.  
  139.     DataWrite(fout, max, npoz, n, u, a);
  140. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement