Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.67 KB | None | 0 0
  1.  
  2. package kursovrchernyak;
  3.  
  4. public class Main {
  5.  
  6.        
  7.         public static void main(String[] args) {
  8.                
  9.                 application1(MyPoint.newArray(4), MyPoint.newArray(5));
  10.                 application2(MyPoint.newSortedArray(3), MyPoint.newSortedArray(2));
  11.                 application3(MyPoint.newSortedArray(5), MyPoint.newSortedArray(8));
  12.                 application4(MyPoint.newArray(5), new MyPoint());
  13.  
  14.         }
  15.  
  16.  
  17.         /** Приложение 1.
  18.          * Даны два массива точек p1: array[0..k] и p2: array[0..l].
  19.          * Координаты точек заданы вручную.
  20.          *
  21.          * Найти количество общих элементов в этих массивах,
  22.          * то есть количество тех целых t, для которых
  23.          * {p1[i].x = p2[j].x и p1[i].y = p2[j].y} для некоторых i и j.
  24.          * т.е. найти количество точек с одинаковыми координатами.
  25.          * @param k - кол-во элементов в массиве p1
  26.          * @param l - кол-во элементов в массиве p2
  27.          */
  28.  
  29.         static int application1(MyPoint[] p1, MyPoint[] p2) {
  30.  
  31.                 int n = 0;    
  32.                 for(int i=0; i < p1.length; i++) {
  33.                         for(int j=0; j < p2.length; j++) {
  34.                                 if (p1[i].isEqual(p2[j])) {
  35.                                         n++;
  36.                                 }
  37.                         }
  38.                 }
  39.                 System.out.println("Equal points total: " + n);
  40.                 return n;
  41.         }
  42.  
  43.  
  44.         /** Приложение 2.
  45.          * @param k - кол-во элементов в массиве p1
  46.          * @param l - кол-во элементов в массиве p2
  47.          *
  48.          * Даны два массива точек p1: array[0..k] и p2: array[0..l]. Причем:
  49.          *      p1[1].getX()<=..<=p1[k].getX()
  50.          *      p1[1].getY()<=..<=p1[k].getY()
  51.          *      p2[1].getX()<=..<=p2[j].getX()
  52.          *      p2[1].getY()<=..<=p2[j].getY()
  53.          * и
  54.          *      p1[n].getX() = p1[n].getY()
  55.          *      p2[q].getX() = p2[q].getY()
  56.          * "Соединить" их в массив p3, причем:
  57.          *      p3[1].getX()<=..<=p3[m].getX()
  58.          *      p3[1].getY()<=..<=p3[m].getY()
  59.          * (m = k+l; каждый элемент массива должен входить в массив p3 столько раз,
  60.          * сколько он входит в общий сложности в массивы p1 и p2)
  61.          */
  62.  
  63.         static MyPoint[] application2(MyPoint[] p1, MyPoint[] p2) {
  64.                 MyPoint[] p3 = new MyPoint[p1.length + p2.length];
  65.                 int i=0, j=0, m=0;
  66.                 for (; m < p3.length; m++) {
  67.                         if (j >= p2.length) {
  68.                                 p3[m] = p1[i++];
  69.                         } else if (i >= p1.length) {
  70.                                 p3[m] = p2[j++];
  71.                         } else if (p1[i].getX() < p2[j].getX()) {
  72.                                 p3[m] = p1[i++];
  73.                         } else {
  74.                                 p3[m] = p2[j++];
  75.                         }
  76.                 }
  77.                 return p3;
  78.         }
  79.  
  80.  
  81.  
  82.         /** Приложение 3.
  83.          * Даны два массива точек p1: array[0..k] и p2: array[0..l]. Причем:
  84.          *      p1[1].getX()<=..<=p1[k].getX()
  85.          *      p1[1].getY()<=..<=p1[k].getY()
  86.          *      p2[1].getX()<=..<=p2[j].getX()
  87.          *      p2[1].getY()<=..<=p2[j].getY()
  88.          * и
  89.          *      p1[n].getX() = p1[n].getY()
  90.          *      p2[q].getX() = p2[q].getY()
  91.          *
  92.          * Найти их "пересечение", то есть массив p3[1]<=...<=p3[m], содержащий
  93.          * их общие элементы, причем кратность каждого элемента в массиве p3
  94.          * равняется минимуму из его кратностей в массивах p1 и p2.
  95.          */
  96.  
  97.         static MyPoint[] application3(MyPoint[] p1, MyPoint[] p2) {
  98.                 MyPoint[] arr = new MyPoint[Math.min(p1.length, p2.length)];
  99.  
  100.                 int i=0, j=0, k=0;
  101.                 for(; i < p1.length; i++) {
  102.                         for(; j < p2.length; j++) {
  103.                                 if(p1[i].getX() < p2[j].getX())
  104.                                         break;  // stop seek on p2[] - next elemets will be greater.
  105.  
  106.                                 if (p1[i].isEqual(p2[j])) {     // Main operation here:
  107.                                         arr[k++] = p1[i];
  108.                                 }
  109.                         }
  110.                         if(p1[i].getX() > p2[j].getX())
  111.                                 break;  // stop seek on p1
  112.                 }
  113.                 return trim(arr,k);     /// trim array to length k
  114.         }
  115.  
  116.        
  117.         static MyPoint[] trim(MyPoint[] arr, int len) {
  118.                 if (len > arr.length) return arr;
  119.                 MyPoint[] newArr = new MyPoint[len];
  120.                 for (int i=0; i < len; i++) {
  121.                         newArr[i] = arr [i];
  122.                 }
  123.                 return newArr;
  124.         }
  125.  
  126.  
  127.         /** Приложение 4.
  128.          * Дан массив точек a[1..n] и число точка b.
  129.          * Переставить точки в массиве таким образом, чтобы слева от некоторой
  130.          * границы стояли точки, меньшие по Х или равные b.getX(), а справа от
  131.          * границы большие по X или равные b.getX().
  132.          */
  133.  
  134.         static int application4(MyPoint[] a, MyPoint b) {
  135.  
  136.                 int head=0, tail=a.length-1;
  137.                 while(head < tail) {
  138.                         if ( a[head].getX() <= b.getX() ) {
  139.                                 // Nothing to do: skip to next element at head.
  140.                                 head++;
  141.                         } else {
  142.                                 // Swap points a[head] and a[tail]
  143.                                 MyPoint tmp = a[tail];
  144.                                 a[tail] = a[head];
  145.                                 a[head] = tmp;
  146.  
  147.                                 tail--; // and then decrement tail
  148.                         }
  149.                 }
  150.                 System.out.println("Array: " + a);
  151.                 System.out.println("Point: " + head);
  152.                 return head;
  153.         }
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement