Skip to content

Instantly share code, notes, and snippets.

@Cellane
Created January 14, 2010 16:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Cellane/277287 to your computer and use it in GitHub Desktop.
Save Cellane/277287 to your computer and use it in GitHub Desktop.
Cvičení 10 a 11 z Javy. Jen se inspirovat, nekopírovat!
/**
* Created by IntelliJ IDEA.
* User: Milan
* Date: Nov 30, 2009
* Time: 7:19:35 PM
*/
import java.util.*;
import static java.lang.Character.*;
import static java.lang.Math.*;
import static java.lang.System.*;
import static java.text.MessageFormat.*;
import static java.util.Arrays.*;
import static java.util.Collections.*;
public class Cviceni10 {
public static void main (String[] args) {
Scanner sc = new Scanner(in);
byte program;
out.print("<i> Ktery program spustit?\n" +
"<i> 1 - sekvencni vyhledavani\n" +
"<i> 2 - binarni puleni\n" +
"<i> 3 - nahrada nul\n" +
"<i> 4 - presun vyhovujicich\n" +
"<i> ");
program = sc.nextByte();
if (program == 1) {
int n, x;
int[] pole;
out.print("<i> Delka pole: ");
n = sc.nextInt();
pole = GenerujPole(n, 1, 10, false);
VytiskniPole(pole, "Vygenerovane pole");
out.print("<i> Hledany prvek: ");
x = sc.nextInt();
if (HledejPrvekSekvencne(pole, x)) {
out.println(format("^.^ Prvek {0} se v poli nachazi.", x));
} else {
out.println(format("^.^ Prvek {0} se v poli nenachazi.", x));
}
} else if (program == 2) {
int n, x;
int[] pole;
out.print("<i> Delka pole: ");
n = sc.nextInt();
pole = GenerujPole(n, 1, 10, true);
VytiskniPole(pole, "Vygenerovane pole");
out.print("<i> Hledany prvek: ");
x = sc.nextInt();
if (HledejPrvekPulenim(pole, x)) {
out.println(format("^.^ Prvek {0} se v poli nachazi.", x));
} else {
out.println(format("^.^ Prvek {0} se v poli nenachazi.", x));
}
} else if (program == 3) {
int n;
int[] pole;
boolean poprve = true;
do {
if (!poprve) {
out.println(">.< Neplatna hodnota.");
}
out.print("<i> Delka pole: ");
n = sc.nextInt();
poprve = false;
} while (n <= 0);
pole = GenerujPole(n, 0, 10, false);
VytiskniPole(pole, "Puvodni pole");
if (!HledejPrvekSekvencne(pole, 0)) {
exit(0);
} else {
for (int i = 0; i < pole.length; i++) {
if (pole[i] == 0) {
pole[i] = -1;
}
}
}
VytiskniPole(pole, "Modifikovane pole");
} else if (program == 4) {
int n, x;
int[] pole;
boolean poprve = true;
char opakovat;
String radek;
List<Integer> vyhovujici = new ArrayList<Integer>();
do {
if (!poprve) {
out.println(">.< Neplatna hodnota.");
}
out.print("<i> Delka pole: ");
n = sc.nextInt();
poprve = false;
} while (n <= 0);
pole = GenerujPole(n, 0, 10, false);
VytiskniPole(pole, "Vygenerovane pole");
do {
out.print("<i> Hledany prvek: ");
x = sc.nextInt();
for (int prvek : pole) {
if (prvek == x) {
vyhovujici.add(prvek);
}
}
sort(vyhovujici);
VytiskniSeznam(vyhovujici, "Vyhovujici");
out.print("<c> Opakovat? ");
radek = sc.next();
opakovat = radek.charAt(0);
} while (toLowerCase(opakovat) == 'a');
}
}
/**
* Vygeneruje nahodne prvky pole v intervalu <1; 10>
* @param n pocet prvku vyhledneho pole
* @param minimum nejmensi prvek
* @param maximum maximalni prvek
* @param seradit urcuje, zda ma byt pole pred predanim serazeno od nejmensiho prvku po nejvetsi
* @return vysledne pole
*/
private static int[] GenerujPole (int n, int minimum, int maximum, boolean seradit) {
int[] pole = new int[n];
for (int i = 0; i < pole.length; i++) {
pole[i] = (int) (random() * maximum + minimum);
}
if (seradit) {
sort(pole);
}
return pole;
}
/**
* Vytiskne vsechny prvky pole
* @param pole pole, jehoz prvky maji byt vytisteny
* @param hlaska hlaska, co se u toho ma vypsat
*/
private static void VytiskniPole (int[] pole, String hlaska) {
out.print(format("^.^ {0}: [", hlaska));
for (int i = 0; i < pole.length; i++) {
out.print(format("{0}", pole[i]));
if ((i + 1) != pole.length) {
out.print(", ");
}
}
out.println("].");
}
/**
* Vytiskne vsechny prvky seznamu
* @param seznam seznam, jehos prvky maji byt vytisteny
* @param hlaska hlaska, co se u toho ma vypsat
*/
private static void VytiskniSeznam (List<Integer> seznam, String hlaska) {
out.println(format("^.^ {0}: {1}.", hlaska, seznam));
}
/**
* Hleda hodnotu v poli metodou sekvencniho vyhledavani
* @param pole pole, v nemz se ma hodnota vyhledat
* @param x hledana hodnota
* @return true = nalezeno, false = nenalezeno
*/
private static boolean HledejPrvekSekvencne (int[] pole, int x) {
// Vytvoreni zarazky
int[] druhePole = new int[pole.length + 1];
arraycopy(pole, 0, druhePole, 0, pole.length);
druhePole[druhePole.length - 1] = x;
int i = 0; // Inicializace predem = chceme hodnotu promenne i po probehnuti cyklu
for (; i < druhePole.length; i++) {
if (druhePole[i] == x) {
break;
}
}
return ((i + 1) != druhePole.length);
}
/**
* Hleda hodnotu v poli metodou binarniho puleni
* @param pole pole, v nemz se ma hodnota vyhledat
* @param x hledana hodnota
* @return true = nalezeno, false = nenalezeno
*/
private static boolean HledejPrvekPulenim (int[] pole, int x) {
int k, l = 0, r = pole.length - 1;
do {
k = (l + r) / 2;
if (x > pole[k]) {
l = k + 1;
} else {
r = k - 1;
}
} while ((pole[k] != x) && (l <= r));
return (pole[k] == x);
}
}
/**
* Created by IntelliJ IDEA.
* User: Milan
* Date: Dec 7, 2009
* Time: 1:27:02 PM
*/
import java.util.*;
import static java.lang.Integer.*;
import static java.lang.Math.*;
import static java.lang.System.*;
import static java.text.MessageFormat.*;
public class Cviceni11 {
public static void main (String args[]) {
Scanner sc = new Scanner(in);
byte program;
out.print("<i> Ktery program spustit?\n" +
"<i> 1 -- Priklad 11x05\n" +
"<i> 2 -- Priklad 11x06\n" +
"<i> 3 -- Priklad 11x07\n" +
"<i> 4 -- Priklad 11x08\n" +
"<i> 5 -- Priklad 11x09\n" +
"<i> 6 -- Priklad 11x10\n" +
"<i> 7 -- Priklad 11x11\n" +
"<i> ");
program = sc.nextByte();
if (program == 1) {
int n;
int[] pole;
out.print("<i> Delka pole: ");
n = sc.nextInt();
pole = generujPole(n, 1, 10);
vytiskniPole(pole);
hledejNejvetsi(pole);
hledejNejvetsiAPozici(pole);
hledejNejvetsiAPocet(pole);
} else if (program == 2) {
int x;
int[][] pole;
out.print("<i> Hledana hodnota: ");
x = sc.nextInt();
pole = generujPole(3, 4, 1, 10);
vytiskniPole(pole);
out.println(format("^.^ Aritmeticky prumer vsech prvku pole je {0}.", spocitejPrumer(pole)));
zjistiPocet(pole, x);
hledejNejvetsi(pole);
} else if (program == 3) {
int m, n;
int[][] pole;
out.print("<i> Pocet radku: ");
m = sc.nextInt();
out.print("<i> Pocet sloupcu: ");
n = sc.nextInt();
pole = generujPole(m, n, 1, 10);
vytiskniPole(pole);
vytiskniRadek(pole, 2);
vytiskniSloupec(pole, 3);
} else if (program == 4) {
int m, n;
int[][] pole;
out.print("<i> Pocet radku: ");
m = sc.nextInt();
out.print("<i> Pocet sloupcu: ");
n = sc.nextInt();
pole = generujPole(m, n, 0, 9);
vytiskniPoleASecti(pole, true);
} else if (program == 5) {
int n, x;
int[][] pole;
out.print("<i> Velikost pole: ");
n = sc.nextInt();
out.print("<i> Nahradit hodnotou: ");
x = sc.nextInt();
pole = generujPole(n, n, 0, 9);
vytiskniPole(pole);
pole = nahradDiagonalu(pole, x);
vytiskniPole(pole);
} else if (program == 6) {
int n;
int[][] pole;
out.print("<i> Velikost pole: ");
n = sc.nextInt();
pole = generujPole(n, n, 0, 9);
vytiskniPole(pole);
out.println(format("^.^ Soucet prvku pod hlavni diagonalou je {0}.", sectiPodNadDiagonalou(pole, true)));
out.println(format("^.^ Soucet prvku nad hlavni diagonalou je {0}.", sectiPodNadDiagonalou(pole, false)));
} else if (program == 7) {
int m, n;
int[][] pole;
out.print("<i> Pocet radku: ");
m = sc.nextInt();
do {
n = (int) (random() * 10 + 1);
} while (m == n);
pole = generujPole(m, n, 0, 9);
vytiskniPoleASecti(pole, false);
}
}
/**
* Vygeneruje nahodne prvky pole v zadanem intervalu
* @param n pocet prvku vyhledneho pole
* @param minimum nejmensi prvek
* @param maximum nejvetsi prvek
* @return pole vysledne pole
*/
private static int[] generujPole (int n, int minimum, int maximum) {
int[] pole = new int[n];
for (int i = 0; i < pole.length; i++) {
pole[i] = (int) (random() * maximum + minimum);
}
return pole;
}
/**
* Vygeneruje nahodne prvky dvourozmerneho pole v zadanem intervalu
* @param m pocet radku
* @param n pocet sloupcu
* @param minimum nejmensi prvek
* @param maximum nejvetsi prvek
* @return pole vysledne pole
*/
private static int[][] generujPole (int m, int n, int minimum, int maximum) {
int[][] pole = new int[m][n];
for (int i = 0; i < pole.length; i++) {
for (int j = 0; j < pole[i].length; j++) {
pole[i][j] = (int) (random() * maximum + minimum);
}
}
return pole;
}
/**
* Vytiskne vsechny prvky pole
* @param pole pole, jehoz prvky maji byt vytisteny
*/
private static void vytiskniPole (int[] pole) {
out.print("^.^ Vygenerovane pole: [");
for (int i = 0; i < pole.length; i++) {
out.print(pole[i]);
if ((i + 1) != pole.length) {
out.print(", ");
}
}
out.println("].");
}
/**
* Vytiskne vsechny prvky dvourozmerneho pole
* @param pole pole, jehoz prvky maji byt vytisteny
*/
private static void vytiskniPole (int[][] pole) {
out.print("^.^ Vygenerovane pole: ");
for (int i = 0; i < pole.length; i++) {
if (i != 0) {
out.print("^.^");
for (int x = 0; x < 20; x++) {
out.print(" ");
}
}
out.print("[");
for (int j = 0; j < pole[i].length; j++) {
out.print(pole[i][j]);
if ((j + 1) != pole[i].length) {
out.print(", ");
}
}
if ((i + 1) != pole.length) {
out.println("]");
} else {
out.println("].");
}
}
}
/**
* Vytiskne vsechny prvky dvourozmerneho pole a vypise soucty radku a sloupcu
* @param pole pole, jehoz prvky maji byt vytisteny
* @param sloupce vypsat i soucet sloupcu?
*/
private static void vytiskniPoleASecti (int[][] pole, boolean sloupce) {
int soucetRadku;
int[] soucetSloupcu = new int[pole[0].length];
String hlaska = "^.^";
String[] sipka = {"|", "|", "v"};
for (int x = 0; x < 20; x++) {
hlaska += " ";
}
out.print("^.^ Vygenerovane pole: ");
for (int i = 0; i < pole.length; i++) {
soucetRadku = 0;
if (i != 0) {
out.print(hlaska);
}
out.print("[");
for (int j = 0; j < pole[i].length; j++) {
soucetRadku += pole[i][j];
soucetSloupcu[j] += pole[i][j];
out.print(pole[i][j]);
if ((j + 1) != pole[i].length) {
out.print(", ");
}
}
out.println(format("] --> {0}", soucetRadku));
}
if (sloupce) {
for (String znak : sipka) {
out.print(hlaska + " ");
for (int i = 0; i < pole[0].length; i++) {
out.print(znak + " ");
}
out.println();
}
out.print(hlaska + " ");
for (int i = 0; i < pole[0].length; i++) {
out.print(soucetSloupcu[i]);
if (soucetSloupcu[i] >= 10) {
out.print(" ");
} else {
out.print(" ");
}
}
}
}
/**
* Vypise n-ty radek pole
* @param pole pole, jehoz radek bude vypsan
* @param radek radek, jenz bude vypsan
*/
private static void vytiskniRadek (int[][] pole, int radek) {
out.print(format("^.^ {0}. radek pole: [", radek));
radek--;
for (int i = 0; i < pole[radek].length; i++) {
out.print(pole[radek][i]);
if ((i + 1) != pole[radek].length) {
out.print(", ");
}
}
out.println("].");
}
/**
* Vypise n-ty sloupec pole
* @param pole pole, jehoz sloupec bude vypsan
* @param sloupec sloupec, jenz bude vypsan
*/
private static void vytiskniSloupec (int[][] pole, int sloupec) {
out.print(format("^.^ {0}. sloupec pole: [", sloupec));
sloupec--;
for (int i = 0; i < pole.length; i++) {
out.print(pole[i][sloupec]);
if ((i + 1) != pole.length) {
out.print(", ");
}
}
out.println("].");
}
/**
* Vyhleda nejvetsi cele cislo v zadanem poli
* @param pole pole, ktere se ma prohledat
*/
private static void hledejNejvetsi (int[] pole) {
int nejvetsi = MIN_VALUE;
for (int prvek : pole) {
if (prvek > nejvetsi) {
nejvetsi = prvek;
}
}
out.println(format("^.^ Nejvetsi prvek bylo cislo {0}.", nejvetsi));
}
/**
* Vyhleda nejvetsi cele cislo v zadanem dvojrozmernem poli
* @param pole pole, ktere se ma prohledat
*/
private static void hledejNejvetsi (int[][] pole) {
int nejvetsi = MIN_VALUE;
for (int[] radek : pole) {
for (int prvek : radek) {
if (prvek > nejvetsi) {
nejvetsi = prvek;
}
}
}
out.println(format("^.^ Nejvetsi prvek bylo cislo {0}.", nejvetsi));
}
/**
* Vyhleda nejvetsi cele cislo v zadanem poli a poradi jeho prvniho vyskytu
* @param pole pole, ktere se ma prohledat
*/
private static void hledejNejvetsiAPozici (int[] pole) {
int nejvetsi = MIN_VALUE, pozice = 0;
for (int i = 0; i < pole.length; i++) {
if (pole[i] > nejvetsi) {
nejvetsi = pole[i];
pozice = i + 1;
}
}
out.println(format("^.^ Nejvetsi prvek bylo cislo {0}.", nejvetsi));
out.println(format("^.^ Prvek se poprve vyskytl na pozici {0}.", pozice));
}
/**
* Vyhleda nejvetsi cele cislo v zadanem poli a celkovy pocet jeho vyskytu
* @param pole pole, ktere se ma prohledat
*/
private static void hledejNejvetsiAPocet (int[] pole) {
int nejvetsi = MIN_VALUE, pocet = 0;
for (int prvek : pole) {
if (prvek > nejvetsi) {
nejvetsi = prvek;
pocet = 0;
}
if (prvek == nejvetsi) {
pocet++;
}
}
out.println(format("^.^ Nejvetsi prvek bylo cislo {0}.", nejvetsi));
out.println(format("^.^ V poli se vyskytlo {0}krat.", pocet));
}
/**
* Spocita aritmeticky prumer hodnot zadaneho dvourozmerneho pole
* @param pole pole, s jehoz prvky se ma pracovat
* @return prumer aritmeticky prumer
*/
private static float spocitejPrumer (int[][] pole) {
int pocet = 0, soucet = 0;
float prumer;
for (int[] radek : pole) {
for (int prvek : radek) {
soucet += prvek;
pocet++;
}
}
prumer = (float) soucet / (float) pocet;
return prumer;
}
/**
* Zjisti, kolikrat se cislo vyskytuje v zadanem dvourozmernem poli
* @param pole pole, jenz se bude prohledavat
* @param x hodnota, jez se bude hledat
*/
private static void zjistiPocet (int[][] pole, int x) {
int pocet = 0;
for (int[] radek : pole) {
for (int prvek : radek) {
if (prvek == x) {
pocet++;
}
}
}
out.println(format("^.^ Hodnota {0} se v poli nachazi {1}krat.", x, pocet));
}
/**
* Nahradi prvky lezici na hlavni diagonale jinym cislem
* @param pole pole, s nimz budeme pracovat
* @param x prvek, na jehoz hodnotu bude nastavena hlavni diagonala
* @return pole modifikovane pole
*/
private static int[][] nahradDiagonalu (int[][] pole, int x) {
for (int i = 0; i < pole.length; i++) {
for (int j = 0; j < pole[i].length; j++) {
if (i == j) {
pole[i][j] = x;
}
}
}
return pole;
}
/**
* Secte vsechny prvky nad nebo pod hlavni diagonalou
* @param pole pole, s nimz se pracuje
* @param pod true = pod diagonalou, false = nad diagonalou
* @return soucet soucet prvku
*/
private static int sectiPodNadDiagonalou(int[][] pole, boolean pod) {
int soucet = 0;
for (int i = 0; i < pole.length; i++) {
for (int j = 0; j < pole[i].length; j++) {
if ((pod) && (i > j)) {
soucet += pole[i][j];
} else if (!(pod) && (j > i)) {
soucet += pole[i][j];
}
}
}
return soucet;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment