fork(2) download
  1. import java.io.*;
  2. import java.lang.*;
  3. import java.util.*;
  4.  
  5. final class iarray {
  6. private int[] arr;
  7. private int size;
  8.  
  9. public iarray(){
  10. arr = null;
  11. size = 0;
  12. }
  13.  
  14. //Инициализация массива заданной размерности;
  15. public void setSize(int new_size) throws OutOfMemoryError{
  16. arr = null;
  17. arr = new int[new_size];
  18. size = new_size;
  19. }
  20.  
  21. //кол-во чего-то?
  22. public int count(Comparable<Integer> cmp){
  23. int n = 0;
  24. for(int i = 0; i < size; ++i){
  25. if(cmp.compareTo(arr[i]) == 1)
  26. ++n;
  27. }
  28. return n;
  29. }
  30.  
  31. //выполнение для каждого элемента
  32. public void each(Comparable<Integer> cmp){
  33. for(int i = 0; i < size; ++i)
  34. cmp.compareTo(arr[i]);
  35. }
  36.  
  37. //Создание копии массива;
  38. public int[] getCopy(){
  39. int[] carr = null;
  40. try {
  41. carr = new int[size];
  42. } catch(OutOfMemoryError e){
  43. return null;
  44. }
  45. System.arraycopy(arr, 0, carr, 0, size);
  46. return carr;
  47. }
  48.  
  49. //Сортировка массива;
  50. public void sort(){
  51. if(arr != null)
  52. Arrays.sort(arr);
  53. }
  54.  
  55. //Заполнение из консоли массива целыми числами;
  56. public void input_stream(InputStream _in) throws Exception {
  57. Scanner scan = new Scanner(_in);
  58. clear();
  59. if((size = scan.nextInt()) > 0){
  60. arr = new int[size];
  61. for(int i = 0; (i < size) && scan.hasNextInt(); ++i)
  62. arr[i] = scan.nextInt();
  63. }
  64. scan = null;
  65. }
  66.  
  67. //удаление
  68. public void clear() {
  69. arr = null;
  70. size = 0;
  71. }
  72.  
  73. //присвоить
  74. public void set(int index, int val){ arr[index] = val; }
  75. //получить
  76. public int get(int index){ return arr[index]; }
  77. //кол-во
  78. public int getSize(){ return size; }
  79. }
  80.  
  81.  
  82. //Количество отрицательных элементов;
  83. final class Negative implements Comparable<Integer>{
  84. public int compareTo(Integer n){
  85. return (n < 0) ? 1 : 0;
  86. }
  87. }
  88.  
  89. //Количество четных элементов
  90. final class Even implements Comparable<Integer>{
  91. public int compareTo(Integer n){
  92. return ((n % 2) == 0) ? 1 : 0;
  93. }
  94. }
  95.  
  96. //Количество элементов, лежащих в диапазоне [a;b], а и b задаются пользователем
  97. final class BetweenAB implements Comparable<Integer>{
  98. public int a, b;
  99.  
  100. public BetweenAB(int _a, int _b) {
  101. a = _a;
  102. b = _b;
  103. }
  104. public int compareTo(Integer n){
  105. return (n >= a && n <= b) ? 1 : 0;
  106. }
  107. }
  108.  
  109. //Среднее значение
  110. final class Avg implements Comparable<Integer>{
  111. public double sum = 0.0d;
  112. public int cnt = 0;
  113. public int compareTo(Integer n){
  114. sum += n;
  115. ++cnt;
  116. return 0;
  117. }
  118. public double getAvg() { return (cnt > 0) ? sum / cnt : 0.0d; }
  119. }
  120.  
  121. //Сумма всех положительных элементов;
  122. final class SumU implements Comparable<Integer>{
  123. private int sum = 0;
  124. public int compareTo(Integer n){
  125. if(n > 0)
  126. sum += n;
  127. return 0;
  128. }
  129. public int getSum(){ return sum; }
  130. }
  131.  
  132. //Нахождение максимального и минимального значений;
  133. final class MinMax implements Comparable<Integer>{
  134. private int max, min;
  135.  
  136. public MinMax(int n){
  137. max = min = n;
  138. }
  139.  
  140. public int compareTo(Integer n){
  141. if(n > max)
  142. max = n;
  143. if(n < min)
  144. min = n;
  145. return 0;
  146. }
  147. public int getMin() { return min; }
  148. public int getMax() { return max; }
  149. }
  150.  
  151.  
  152. class Cyberforum {
  153. public static void main(String[] args) throws Exception {
  154. iarray arr = new iarray();
  155.  
  156. // ввод для примера из строки-потока устаревшего StringBufferInputStream
  157. String s = "15 1 2 3 4 -5 6 -7 -8 9 0 50 -12 15 17 -18";
  158. arr.input_stream(rin);
  159. rin = null;
  160. /* ввод с консоли в начале размер массива далее элементы
  161.   System.out.print("Введите массив: ");
  162.   arr.input_stream(System.in);
  163. */
  164. //мин/макс
  165. MinMax mm = new MinMax(arr.get(0));
  166. arr.each(mm);
  167. System.out.printf("минимум: %d\nмаксимум: %d\n", mm.getMin(), mm.getMax());
  168. mm = null;
  169.  
  170. //среднее значение
  171. Avg avg = new Avg();
  172. arr.each(avg);
  173. System.out.println("среднее значение массива: " + avg.getAvg());
  174. avg = null;
  175.  
  176. //сумма положительных
  177. SumU sum = new SumU();
  178. arr.each(sum);
  179. System.out.println("сумма положительных: " + sum.getSum());
  180. sum = null;
  181.  
  182. int a = 10, b = 20;
  183. /* System.out.print("Введите диапазон [a;b]: ");
  184.   Scanner scan = new Scanner(System.in);
  185.   a = scan.nextInt();
  186.   b = scan.nextInt();*/
  187.  
  188. System.out.println("кол-во элементов в диапазоне [a;b]: " + arr.count(new BetweenAB(a, b)));
  189. System.out.println("кол-во чётных: " + arr.count(new Even()));
  190. System.out.println("кол-во отрицательных: " + arr.count(new Negative()));
  191.  
  192. arr.sort();
  193. for(int i = 0; i < arr.getSize(); ++i)
  194. System.out.print(arr.get(i) + " ");
  195. }
  196. }
Success #stdin #stdout 0.15s 321344KB
stdin
Standard input is empty
stdout
минимум: -18
максимум: 50
среднее значение массива: 3.8
сумма положительных: 107
кол-во элементов в диапазоне [a;b]: 2
кол-во чётных: 8
кол-во отрицательных: 5
-18 -12 -8 -7 -5 0 1 2 3 4 6 9 15 17 50