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 }