Advertisement
silleghost

Untitled

Nov 26th, 2019
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | None | 0 0
  1. //Задан целочисленный одномерный массив A из N элементов.
  2. //Найти значение максимального элемента среди элементов, кратных k и расположенных до последнего отрицательного элемента.
  3. //(Подсказка: «Сначала найти первый со значением, кратным k, и последний отрицательный, а затем уже искать максимум
  4. //либо вывести сообщение о причинах невозможности поиска.»)
  5.  
  6.  
  7. program lab10;
  8.  
  9. {R+}
  10.  
  11. type matrix=array[1..10] of integer;
  12.  
  13. Procedure IO(var fin,fout:textfile; out n:integer; out k:integer; out A:matrix);
  14. var i:byte;
  15. Begin
  16. readln(fin,n);
  17. readln(fin,k);
  18. for i:=1 to n do
  19. read(fin,A[i]);
  20. writeln(fout,'Исходный массив A: ');
  21. for i:=1 to n do
  22. write(fout,A[i],' ');
  23. writeln(fout,' ');
  24. writeln(fout,'Число k равно: ',k);
  25. End;
  26.  
  27. Procedure findfirst(const n:integer; const k:integer; const A:matrix; out flag_k:boolean; out j:integer);
  28. var i:byte;
  29. Begin
  30. i:=1;
  31. flag_k:=false;
  32. while (i<=n) and not flag_k do Begin
  33. if (A[i] mod k = 0) then Begin
  34. flag_k:=true;
  35. j:=i;
  36. end
  37. else inc(i);
  38. end;
  39. End;
  40.  
  41. Procedure findfinal(const n:integer; const A:matrix; out flag:boolean; out g:integer);
  42. var i:byte;
  43. Begin
  44. i:=n;
  45. flag:=false;
  46. while (i>1) and not flag do Begin
  47. if (A[i])<0 then Begin
  48. flag:=true;
  49. g:=i;
  50. end
  51. else dec(i);
  52. end;
  53. if (flag=false) then g:=n;
  54. end;
  55.  
  56. Procedure findmax(const A:matrix; const j:integer; const g:integer; const k:integer; out max:integer);
  57. var i:byte;
  58. Begin
  59. max:=A[j];
  60. for i:=j to g do Begin
  61. if (A[i] mod k = 0) and (A[i]>max) then max:=A[i];
  62. end;
  63. end;
  64.  
  65. Procedure printresult(var fout:textfile; const max:integer; const g,j:integer; const flag_k:boolean);
  66. Begin;
  67. if (flag_k=false) then writeln(fout,'Нет элементов, кратных k')
  68. else if (j>g) then writeln(fout,'Первый элемент, кратный k, стоит после последнего отрицательного')
  69. else writeln(fout,'Максимум равен: ', max);
  70. end;
  71.  
  72. var A:matrix;
  73. fin,fout:textfile;
  74. n,k:integer;
  75. j,g:integer;
  76. max:integer;
  77. flag,flag_k:boolean;
  78.  
  79.  
  80. begin
  81. Assignfile(fin,Paramstr(1));Assignfile(fout,Paramstr(2));
  82. Reset(fin);Rewrite(fout);
  83. IO(fin,fout,n,k,A);
  84. findfirst(n,k,A,flag_k,j);
  85. findfinal(n,A,flag,g);
  86. findmax(A,j,g,k,max);
  87. printresult(fout,max,g,j,flag_k);
  88. closefile(fin);
  89. closefile(fout);
  90. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement