Advertisement
LilAsian

lab10

Dec 29th, 2019
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.15 KB | None | 0 0
  1. program lab10;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   Windows,
  7.   SysUtils;
  8.  
  9. const
  10.   n_max=10;
  11.  
  12. type
  13.   mat=array[1..n_max] of integer;
  14.   var p,k,n,d: ShortInt;
  15.   dat,rez:textfile;
  16.   flag1,flag2:Boolean;
  17.   a:mat;
  18.  
  19.  
  20. procedure check_n(var dat,rez:textfile; var n:shortint); {ввод и проверка n и u}
  21.   begin
  22.     Readln(dat,n);
  23.     if (n<1) or (n>n_max) then
  24.       begin
  25.         writeln('Некорректное значение n.');
  26.             close(dat);
  27.         close(rez);
  28.         writeln('...');
  29.         readln;
  30.         halt
  31.         end;
  32.   end;
  33.  
  34. procedure input_a(const dat:textfile; var a:mat;const n:shortint);
  35.    var i:shortint;
  36.   begin
  37.    for i:=1 to n do
  38.    begin
  39.      read(dat,a[i]);
  40.    end;
  41.   end;
  42.  
  43. procedure find_first(const a:mat; const n:shortint;  out k:shortint; var flag1:boolean); {поиск первого положительного элемента}
  44.   var
  45.     i:shortint;
  46.   begin
  47.     k:=1;
  48.     i:=1;
  49.     flag1:=true;
  50.     while (i<n) and flag1 do
  51.       begin
  52.         if (a[i]<0) and (a[i] mod 2 <>0) then
  53.           begin
  54.             k:=i;
  55.             flag1:=false;
  56.           end;
  57.           inc(i);
  58.       end;
  59.   end;
  60.  
  61.   procedure find_last(const a:mat; const n:shortint;  out p:shortint; var flag2:boolean); {поиск первого положительного четного элемента}
  62.   var
  63.     i:shortint;
  64.   begin
  65.     p:=1;
  66.     i:=n;
  67.     flag2:=true;
  68.     while (i>=1) and flag2 do
  69.       begin
  70.         if (a[i]>0) and (a[i] mod 2 =0) then
  71.           begin
  72.             p:=i;
  73.             flag2:=false;
  74.           end;
  75.           dec(i);
  76.       end;
  77.   end;
  78.  
  79.  
  80.   procedure poisklastmin(const k,p:ShortInt; const a:mat; var d:ShortInt);
  81.   var i: ShortInt;
  82.   begin
  83.    d:=k;
  84.    for i:=k to p do
  85.    if  (a[i]>0) and (a[i] mod 2 =0) and (a[i]<=a[d])
  86.    then d:=i;
  87.   end;
  88.  
  89. procedure output(const a:mat; var rez:textfile; var n:shortint); {вывод}
  90.   var
  91.     i:shortint;
  92.   begin
  93.     writeln(rez,'Лабораторная работа №10.');
  94.     writeln(rez);
  95.     writeln(rez,'Длина массива: ',n);
  96.     writeln(rez);
  97.     writeln(rez);
  98.     writeln(rez,'Массив A:');
  99.     writeln(rez);
  100.     for i:=1 to n do
  101.          write(rez,a[i],' ');
  102.     writeln(rez);
  103.     writeln(rez);
  104.   end;
  105.  
  106.  
  107. begin
  108.   SetConsoleCP(1251);
  109.     SetConsoleOutputcp(1251);
  110.   AssignFile(dat, ParamStr(1));
  111. Reset(dat);
  112. AssignFile(rez, ParamStr(2));
  113. Rewrite(rez);
  114.   check_n(dat,rez,n);
  115.   input_a(dat,a,n);
  116.  output(a,rez,n);
  117.   find_first(a,n,p,flag1);
  118.   if flag1  then p:=1;
  119.   find_last(a,n,k,flag2);
  120.   if (k<p) and flag2 then
  121.    begin
  122.     Writeln(rez, 'Поиск невозможен, так как первый отрицательный элемент лежит после последнего положительного или в массиве нет нужных элементов.');
  123.     close(dat);
  124.     close(rez);
  125.     writeln('...');
  126.     readln;
  127.     halt
  128.     end;
  129.  
  130.   poisklastmin(k,p,a,d);
  131.   writeln(rez,'минимальный элемент, подходящий по условию под номером ',d);
  132.     close(dat);
  133. close(rez);
  134.  writeln('...');
  135.   readln;
  136. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement