1    /*
   2     * To change this template, choose Tools | Templates
   3     * and open the template in the editor.
   4     */
   5    
   6    package test;
   7    
   8    import java.util.*;
   9    /**
  10     *
  11     * @author peta
  12     */
  13    public class Main {
  14      /** Zadani A priklad 1
  15       *
  16       * Takze nacist posloupnost cisel, kdyz je cislo zaporne tak rvat a nakonec napsat nejvetsi a druhy nejvetsi cislo.
  17       */
  18      public static void A1() {
  19        Scanner cin=new Scanner(System.in);
  20        System.out.println("Zadejte posloupnost kladnych cisel. Posloupnost ukoncite nulou.");
  21        int max1=0;
  22        int max2=0;
  23        int item=-1; // tak asi az sem je to zbytecny komentovat...
  24        while (item!=0) {
  25          System.out.println("Zadejte cislo:"); // vzdycky se slusne zeptame
  26          item=cin.nextInt();
  27          while (item<0) { // Kdyz by zadal zaporny cislo tak rveme
  28            System.out.println("Jen kladna cisla (nula pro konec):");
  29            item=cin.nextInt();
  30          }
  31          if (item>max1) { // kdyz se jedna o nejvetsi cislo,
  32            max2=max1; // posuneme dosud nejvetsi na druhe nejvetsi
  33            max1=item; // nejvetsi je nove
  34          } else if (item>max2) max2=item; // kdyz se jedna o druhe nejvetsi cislo, tak ho jen zmenime
  35        }
  36        System.out.println("Nejvetsi cisla jsou"+max1+","+max2);
  37      }
  38      /** Zadani B priklad 1
  39       *
  40       * Nacist pslpst cisel a zobrazovat meziprumer. pri nule skoncit,
  41       */
  42      public static void B1() {
  43        Scanner cin=new Scanner(System.in);
  44        System.out.println("Zadejte posloupnost cisel. Posloupnost ukoncite nulou.");
  45        double avg=0; // meziprumer
  46        int items=0; // pocet cisel zadanych
  47        do {
  48          System.out.println("Zadejte cislo");   
  49          int item=cin.nextInt();    
  50          if (item!=0) { // tady je duelzity jak se pocita prubeznej prumer
  51            avg=avg*items+item; // prumer = (stary prumer*pocet cisel+nove cislo)/novy pocet cisel
  52            items=items+1;
  53            avg=avg/items;
  54            System.out.println("Meziprumer je:"+avg); // vypiseme ho
  55          } else break; // jinak breakujeme cyklus
  56        } while (true);
  57        System.out.println("Vysledny prumer je:"+avg);
  58      }
  59      /** Zadani A priklad 2
  60       *
  61       * Tahle funkce vrati soucet toho ctverecku, hloubka ctverecku je jak moc je vnoreny. 0 je okrajovy ctverecek.
  62       *
  63       * !! Tenhle kod ma slozitost n**2, jde to udelat i jednoduseji radove kdyz to rozdelime na 4 forcykly, ja jsem
  64       * chtel ukazat tohle, protoze trik "zapocitam jen ty na hranach" je casto pouzivany. Oba dva postupy jsou za plny pocet b
        odu.
  65       */
  66      public static int addSquare(int depth, int[][] m) {
  67        int result=0;
  68        if (m.length-depth-1<depth) return -1; // kdyz je hloubka moc velika vratime -1
  69        for (int x=depth;x<m.length-depth;x++) {  // jinak jedeme forcyklem pres vsecny prvky co jsou na hranici ctverecku nebo 
        v nem
  70          for (int y=depth;y<m.length-depth;y++) {
  71            if ((x==depth) || (y==depth) || (x==m.length-depth-1)  || (y==m.length-depth-1))
  72                result=result+m[x][y]; // a jen ty co jsou na hranici zapocitame
  73          }
  74        }
  75        return result;
  76      }
  77      /** Zadani A priklad 2
  78       *
  79       * Spusteni prikladu, definuje matici v kodu a pusti forcyklus na nai s hloubkou.
  80       */
  81      public static void A2() {
  82        int m[][]={{1,2,3,4,5},
  83                   {5,6,7,1,5},
  84                   {4,5,6,7,4},
  85                   {4,5,2,6,7},
  86                   {4,5,6,2,4}};
  87        for (int depth=0;depth<Math.ceil(m.length/2.0);depth++) { // hloubka jde od nuly do horni cele casti poloviny velikosti 
        matice
  88          System.out.println("Soucet ctverce hloubky "+depth+" je "+addSquare(depth,m));
  89        }
  90      }
  91      /** Zadani B priklad 2
  92       *
  93       * Seradi row-ty radek v matici.
  94       */
  95      public static void orderRow(int row, int[][] m) {
  96        for (int i=1;i<m[row].length;i++) {
  97          for (int j=i;j>0;j--) {
  98            if (m[row][j]<m[row][j-1]) { // pouzivam insertion sort
  99              int x=m[row][j];
 100              m[row][j]=m[row][j-1];
 101              m[row][j-1]=x;
 102            }  else break;
 103          }
 104        }
 105      }
 106      /** Zadani B priklad 2
 107       *
 108       * Seradi col-ty sloupec v matici.
 109       */
 110      public static void orderCol(int col, int[][] m) {
 111        for (int i=1;i<m.length;i++) {
 112          for (int j=i;j>0;j--) {
 113            if (m[j][col]<m[j-1][col]) { // A zase byste meli poznat insertion sort
 114              int x=m[j][col];
 115              m[j][col]=m[j-1][col];
 116              m[j-1][col]=x;
 117            }  else break;
 118          }
 119        }
 120      }
 121      /** Zadani B priklad 2
 122       *
 123       * Tohle proste vypise matici...
 124       */
 125      public static void printMatrix(int [][] m) {
 126        for (int y=0;y<m.length;y++) {
 127          String line="";
 128          for (int x=0;x<m[y].length;x++) {
 129            line=line+" "+m[y][x];
 130          }
 131          System.out.println(line);
 132        }
 133      }
 134      /** Zadani B priklad 2
 135       *
 136       * Spusteci metoda, proste zase definuje matici (i obdelnikovou). a tu pak setridi
 137       * nejdriv po radcich a potom po sloupcich.
 138       */
 139      public static void B2() {
 140        int m[][]={{1,2,3,4,5,3},
 141                   {5,6,7,1,5,5},
 142                   {4,5,6,7,4,8},
 143                   {4,5,2,6,7,1},
 144                   {4,5,6,2,4,7}};
 145        for (int i=0;i<m.length;i++) orderRow(i,m);
 146        for (int i=0;i<m[0].length;i++) orderCol(i,m);
 147        printMatrix(m); // Nakonci upravenou matici vypise.
 148      }
 149      /**
 150       * @param args the command line arguments
 151       */
 152      public static void main(String[] args) {
 153        // TODO code application logic here
 154        System.out.println("-------------------------------------------------------");
 155        System.out.println("Zadani A priklad 1");
 156        A1();
 157        System.out.println("-------------------------------------------------------");
 158        System.out.println("Zadani A priklad 2");
 159        A2();
 160        System.out.println("-------------------------------------------------------");
 161        System.out.println("Zadani B priklad 1");
 162        B1();
 163        System.out.println("-------------------------------------------------------");
 164        System.out.println("Zadani B priklad 2");
 165        B2();
 166      }
 167    
 168    }