Guest User

Untitled

a guest
Apr 19th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.81 KB | None | 0 0
  1. package hledani;
  2.  
  3. import java.io.InputStream;
  4. import java.util.Arrays;
  5. import java.util.Scanner;
  6.  
  7. /**
  8.  *
  9.  * @author Jakub Hvězda
  10.  */
  11.  class Matice {
  12.  
  13.    
  14.     private int[][] data;
  15.     protected int radky;
  16.     protected int sloupce;
  17.     int max = 2;
  18.  
  19.     public Matice(int vyska, int sirka) {
  20.         if (vyska > 0 && sirka > 0) {
  21.             this.data = new int[vyska][sirka];
  22.             this.radky = vyska;
  23.             this.sloupce = sirka;
  24.         } else {
  25.             //chyba
  26.         }
  27.     }
  28.  
  29.     private static String udelejMezeru(long num) {
  30.         String mezery = "";
  31.         for (long i = 0; i < num; i++) {
  32.             mezery += " ";
  33.         }
  34.         return mezery;
  35.     }
  36.  
  37.     public void setPrvek(int radek, int sloupec, int prvek) {
  38.         this.data[radek][sloupec] = prvek;
  39.     }
  40.  
  41.     public void NaplnMatici(Scanner sc) {
  42.        
  43.         for (int i = 0; i < radky; i++) {
  44.             for (int j = 0; j < sloupce; j++) {
  45.                 int prvek = sc.nextInt();
  46.                 this.setPrvek(i, j, prvek);
  47.                 int max2 = String.valueOf(this.getPrvek(i, j)).length();
  48.  
  49.                 if (max2 > max) {
  50.                     max = max2;
  51.                 }
  52.             }
  53.         }
  54.      
  55.     }
  56.  
  57.     public int getPrvek(int radek, int sloupec) {
  58.         if (radek >= 0 && radek < radky && sloupec >= 0 && sloupec < sloupce) {
  59.             return data[radek][sloupec];
  60.         } else {
  61.             return 0;
  62.         }
  63.     }
  64.  
  65.     @Override
  66.     public String toString() {
  67.         String matice = "";
  68.         for (int i = 0; i < radky; i++) {
  69.             for (int j = 0; j < sloupce; j++) {
  70.                 matice += udelejMezeru(max - String.valueOf(this.getPrvek(i, j)).length() + 1);
  71.                 matice += this.getPrvek(i, j);
  72.             }
  73.             matice += "\n";
  74.         }
  75.         return matice;
  76.     }
  77.  
  78.     @Override
  79.     public boolean equals(Object obj) {
  80.         if (obj == null) {
  81.             return false;
  82.         }
  83.         if (getClass() != obj.getClass()) {
  84.             return false;
  85.         }
  86.         final Matice other = (Matice) obj;
  87.         if (!Arrays.deepEquals(this.data, other.data)) {
  88.             return false;
  89.         }
  90.         return true;
  91.     }
  92.  
  93.     public int getPocetVyskytu(Matice m) {
  94.         int vyskyty = 0;
  95.  
  96.         for (int i = 0; i < this.radky - m.radky + 1; i++) {
  97.             for (int j = 0; j < this.sloupce - m.sloupce + 1; j++) {
  98.                 Matice pomocna = new Matice(m.radky, m.sloupce);
  99.                 for (int u = i; u < pomocna.radky + i; u++) {
  100.                     for (int p = j; p < pomocna.sloupce + j; p++) {
  101.                         //   System.out.println(i+"+"+j+"+"+u+"+"+p);
  102.                         pomocna.setPrvek(u - i, p - j, this.data[u][p]);
  103.  
  104.                     }
  105.                 }
  106.  
  107.                 if (m.equals(pomocna)) {
  108.                     vyskyty++;
  109.                 }
  110.  
  111.             }
  112.         }
  113.         return vyskyty;
  114.     }
  115. }
  116.  
  117. public class Hledani {
  118.  
  119.     static int zadejVelikost(Scanner sc, String vstupText, int horniMez, int dolniMez, String chyba) {
  120.         System.out.println(vstupText);        
  121.         int cislo = sc.nextInt();
  122.         while (cislo > horniMez || cislo < dolniMez) {
  123.             System.out.println(chyba);
  124.             cislo = sc.nextInt();
  125.            
  126.         }
  127.        
  128.         return cislo;
  129.        
  130.     }
  131.  
  132.     public static void main(String[] args) {
  133.         Scanner sc = new Scanner(System.in);
  134.         // zadani hledane matice
  135.         int radky = zadejVelikost(sc,"Zadejte velikost hledane matice (radek, sloupec):", Integer.MAX_VALUE, 1, "Chyba! Opakujte zadani.");
  136.         int sloupce = zadejVelikost(sc,"", Integer.MAX_VALUE, 0, "Chyba! Opakujte zadani.");
  137.         Matice hledana = new Matice(radky, sloupce);
  138.        
  139.         System.out.println("Zadejte" + " " + radky * sloupce + " " + "prvky matice:");
  140.         hledana.NaplnMatici(sc);
  141.        
  142.         int pocetProhledavanych = zadejVelikost(sc,"Zadejte pocet prohledavanych matic:", Integer.MAX_VALUE, 1, "Chyba! Opakujte zadani.");
  143.         Matice[] zadaneMatice = new Matice[pocetProhledavanych];
  144.        
  145.         for (int i = 0; i < pocetProhledavanych; i++) {
  146.            int radky2 = zadejVelikost(sc,("Zadejte velikost" + " "+(i+1)+ ".prohledavane matice (radek, sloupec):"), Integer.MAX_VALUE, 1, "Chyba! Opakujte zadani." );
  147.            int sloupce2 = zadejVelikost(sc,"", Integer.MAX_VALUE, 1, "Chyba! Opakujte zadani." );
  148.            Matice zadana = new Matice(radky2, sloupce2);
  149.            System.out.println("Zadejte" +" " +radky2*sloupce2 + " " + "prvku matice:");
  150.            zadana.NaplnMatici(sc);
  151.            zadaneMatice[i] = zadana;
  152.         }
  153.         System.out.println("Hledana matice:");
  154.         System.out.print(hledana);
  155.        
  156.         for (int i = 0; i < zadaneMatice.length; i++) {
  157.             System.out.println((i+1)+".prohledavana matice: ");
  158.             System.out.print(zadaneMatice[i]);
  159.         }
  160.         System.out.println("---Vysledky---");
  161.        
  162.        
  163.         int hledani = 0;
  164.         int identickych = 0;
  165.        
  166.         for (int i = 0; i < zadaneMatice.length; i++) {
  167.             if(hledana.equals(zadaneMatice[i])){
  168.                 identickych++;
  169.             } else {
  170.                 hledani++;
  171.             }
  172.         }
  173.         System.out.println("- hledani podmatic:"+" "+hledani +", identickych matic:" + identickych);
  174.        
  175.         for (int i = 0; i < zadaneMatice.length; i++) {
  176.             if(hledana.equals(zadaneMatice[i])) {
  177.                 System.out.println((i+1) + ".matice je identicka s hledanou matici");
  178.             } else {
  179.                int pocet = zadaneMatice[i].getPocetVyskytu(hledana);
  180.                 System.out.println((i+1) + ".matice obsahuje hledanou matici" +" "+pocet+"x");
  181.             }
  182.         }
  183.  
  184.     }
  185. }
Add Comment
Please, Sign In to add comment