P2 - Kviz 01 - Starc Aljaž¶
void java()¶
Napiši metodo void java(), ki izpiše naslednje besedilo
Rešitev
kalkulator(int a, int b)¶
Napiši metodo kalkulator(int a, int b), ki sešteje, odšteje, zmnoži, deli in izračuna ostanek po deljenju dveh števil. Če pride do deljenja z 0, naj program izpiše "Napaka: deljenje z 0" .
Primer
Rešitev
public static void kalkulator(int a, int b) {
if (b == 0) {
System.out.println("Napaka: deljenje z 0");
} else {
System.out.println(a + " + " + b + " = " + (a+b));
System.out.println(a + " - " + b + " = " + (a-b));
System.out.println(a + " x " + b + " = " + (a*b));
System.out.println(a + " / " + b + " = " + (a/b));
System.out.println(a + " % " + b + " = " + (a%b));
}
}
void nicli(int a, int b, int c)¶
Napiši metodo void nicli(int a, int b, int c), ki izračuna in izpiše obe realni ničli kvadratne enačbe ax2 + bx + c = 0. V primeru, da realni ničli ne obstajata (negativna diskriminanta), naj program izpiše Napaka: nicli enacbe ne obstajata.
Primeri
Rešitev
public static void nicli(int a, int b, int c) {
float det = (b*b)-(4*a*c);
float koren = (float) Math.sqrt(det);
if ( det > 0 ){
float x1 = (-b + koren)/(2*a);
float x2 = (-b - koren)/(2*a);
System.out.format("x1=%.2f, x2=%.2f%n", x1, x2);
} else if (det == 0) {
float x1 = (-b + koren)/(2*a);
System.out.format("x1=%.2f, x2=%.2f%n", x1, x1);
} else {
System.out.println("Napaka: nicli enacbe ne obstajata");
}
}
void krog(double r, int d)¶
Napiši metodo void krog(double r, int d),
ki izračuna in izpiše obseg in ploščino kroga na d decimalk natančno. Če je r negativen, naj metoda izpiše Napaka: negativen polmer. Če je d negativen, naj izpiše Napaka: negativen d.
Primera
Rešitev
public static void krog(double r, int d) {
if (r < 0) System.out.println("Napaka: negativen polmer");
else if (d < 0) System.out.println("Napaka: negativen d");
else {
System.out.format("Obseg kroga s polmerom r=%.2f je %."+d+"f%n", r, (2 * Math.PI * r));
System.out.format("Ploscina kroga s polmerom r=%.2f je %."+d+"f%n", r, Math.PI * r * r);
}
}
String pretvoriSekunde(int sekunde)¶
Napiši metodo String pretvoriSekunde(int sekunde), ki pretvori sekunde v ure, minute in sekunde in vrne niz v formatu hh:mm:ss.
Rešitev
public static String pretvoriSekunde(int sekunde) {
if (sekunde < 0) return "Število sekund ne more biti negativno";
else {
int h = (int) Math.floor(sekunde / 3600);
int m = (int) Math.floor((sekunde % 3600) / 60);
int s = (int) (sekunde % 3600) % 60;
return String.format("%02d:%02d:%02d", h, m, s);
}
}
javaJavaJava(int n)¶
Napiši metodo javaJavaJava(int n), ki n-krat izpiše besedo Java. Če je n negativen, naj metoda izpiše Napaka: negativen n.
Primer
Rešitev
public static void javaJavaJava(int n) {
if (n < 0) System.out.println("Napaka: negativen n");
else {
for (int i=0;i<n;i++) System.out.print(" J a v v a ");
System.out.println("");
for (int i=0;i<n;i++) System.out.print(" J a a v v a a ");
System.out.println("");
for (int i=0;i<n;i++) System.out.print(" J J aaaaa V V aaaaa ");
System.out.println("");
for (int i=0;i<n;i++) System.out.print(" JJ a a V a a");
}
}
boolean jeFibonaccijevo(int n)¶
Števila v zaporedju 1, 1, 2, 3, 5, 8, 13, 21, 34, ... imenujemo Fibonaccijeva števila. Naslednji element zaporedja dobimo s seštevanjem prejšnjih dveh elementov (13=5+8, 21=8+13, 34=13+21, ...).
Napiši metodo boolean jeFibonaccijevo(int n), ki preveri, ali je dano število n Fibonaccijevo število.
Primeri
Rešitev
boolean jePrastevilo(int n)¶
Število n je praštevilo, če je večje od 1 in je deljivo le z 1 in n.
Napiši metodo boolean jePrastevilo(int n), ki za dano število preveri, ali je praštevilo in vrne true, če je in false, če ni.
Primeri
Rešitev
izrisiZastavo(int n)¶
Napiši metodo izrisiZastavo(int n), ki izriše zastavo različnih velikosti, kot prikazujejo spodnji primeri.
Primeri
n=2
* * * * =======================
* * * =======================
* * * * =======================
* * * =======================
* * * * =======================
* * * =======================
===============================
===============================
===============================
===============================
n=3
* * * * * * ==================================
* * * * * ==================================
* * * * * * ==================================
* * * * * ==================================
* * * * * * ==================================
* * * * * ==================================
* * * * * * ==================================
* * * * * ==================================
* * * * * * ==================================
==============================================
==============================================
==============================================
==============================================
==============================================
==============================================
Rešitev
public static void izrisiZastavo(int n) {
// Nrdimo ta long-ass string (enacaji),
// ki vsebuje 15 * n znakov,
// +1 znak za tisti space med zvezdicami
// ter ostalimi enacaji v zgornjih vrsticah
String line = "";
for (int j=0;j<(15 * n + 1);j++) line += "=";
// Izpisi zgornje vrstice (tiste z zvezdicami)
for (int i=0;i<n*3;i++) {
// Polgedamo ce je "shifting line" (vsaka druga vrstica +1 [1,3,5,...])
boolean shift = i % 2 == 1;
// skalkuliramo koliko zvezdic bo
int snum = (n * 2) - (shift ? 1 : 0);
// Sestavimo string z zvezdicami
String sstr = "";
if (shift) sstr += " ";
for (int j=0;j<snum;j++) sstr += "* ";
if (shift) sstr += " ";
// In vso to minestro izpisemo v stdout
System.out.println(sstr + line.substring(sstr.length()));
}
// Izpisi se spodnje vrstice and we good to go
for (int i=0;i<n*2;i++) System.out.println(line);
}
void vDesetisko(int n)¶
Napiši metodo void vDesetisko(int n), ki dano število pretvori iz osmiškega v desetiški sistem in na zaslon izpiše števili v obeh sistemih.
Primeri
Rešitev
void vDesetisko(int n) {
String nstr = n + "";
if (nstr.contains("8")) System.out.println("Število " + nstr + " ni število v osmiškem sistemu (števka 8)");
else if (nstr.contains("9")) System.out.println("Število " + nstr + " ni število v osmiškem sistemu (števka 9)");
else System.out.println(nstr + "(8) = " + Integer.parseInt(nstr,8) + "(10)");
}
String pretvoriVDesetisko(String n, int b)¶
Napiši metodo String pretvoriVDesetisko(String n, int b), ki pretvori iz danega številskega sistema b v desetiški sistem. Število n je podano v znakovni obliki. V primeru, da pretvorba ni možna, naj metoda vrne sporočilo o napaki.
Primeri
Rešitev
public static String pretvoriVDesetisko(String n, int b) {
String allowed = "0-" + ( b <= 10 ? b - 1 : 9);
if (b >= 11) allowed += "A-" + (char) (65 - 11 + b);
if (n.matches("[" + allowed + "]+")) {
return n + "(" + b + ")="+Integer.parseInt(n, b)+"(10)";
} else {
for (int i = 0; i < n.length(); i++){
char c = n.charAt(i);
if (("" + c).matches("["+allowed+"]*[^"+allowed+"]["+allowed+"]*")) return "Napaka pri pretvorbi sistema - števka " + c;
}
return "Napaka pri pretvorbi sistema - se ne ve zakaj";
}
}
int vsotaPrvih(int n)¶
Napiši metodo vsotaPrvih(int n), ki vrne vsoto prvih n praštevil.
Opomba: lahko si pomagaš z metodo jePrastevilo(int i) iz naloge 8.
Rešitev
void pitagoroviTrojcki(int x)¶
Napiši metodo void pitagoroviTrojcki(int x), ki izpiše vse možne trojke (a, b, c) pri 1 <= a <= b <= c <= x za katere velja a^2 + b^2 = c^2.
Rešitev
void narisiDrevo(int n)¶
Napiši metodo void narisiDrevo(int n), ki nariše drevo velikosti n.
Primer
Rešitev
String izracunajRazliko(String prviCas, String drugiCas)¶
Napiši metodo String izracunajRazliko(String prviCas, String drugiCas), ki izračuna razliko dveh ur podanih v obliki hh:mm:ss in izračunano razliko vrne v enakem formatu.
Rešitev
String izracunajRazliko(String prviCas, String drugiCas) {
String[] pp = prviCas.split(":");
String[] dp = drugiCas.split(":");
int ps = Integer.parseInt(pp[0]) * 3600 + Integer.parseInt(pp[1]) * 60 + Integer.parseInt(pp[2]);
int ds = Integer.parseInt(dp[0]) * 3600 + Integer.parseInt(dp[1]) * 60 + Integer.parseInt(dp[2]);
int t = Math.abs(ps - ds);
double h = Math.floor(t / 3600);
double m = Math.floor((t - h * 3600) / 60);
double s = t - h * 3600 - m * 60;
return String.format("%02d:%02d:%02d", (int) h, (int) m, (int) s);
}
String pretvoriVMorse(String sporocilo)¶
Prijatelju želimo poslati sporočilo z uporabo svetlobnih signalov. Pri tem bomo uporabili Morsejevo abecedo.
Napiši metodo String pretvoriVMorse(String sporocilo), ki podano sporočilo pretvori v Morsejevo abecedo. Znaki v sporočilu, ki niso definirani v Morsejevi abecedi, naj se prevedejo v "?".
Primer
Rešitev
String pretvoriVMorse(String sporocilo) {
java.util.HashMap<String, String> chrs = new java.util.HashMap<String, String>();
chrs.put(" ", " ");
chrs.put("a", ".-");
chrs.put("b", "-...");
chrs.put("c", "-.-.");
chrs.put("d", "-..");
chrs.put("e", ".");
chrs.put("f", "..-.");
chrs.put("g", "--.");
chrs.put("h", "....");
chrs.put("i", "..");
chrs.put("j", ".---");
chrs.put("k", "-.-");
chrs.put("l", ".-..");
chrs.put("m", "--");
chrs.put("n", "-.");
chrs.put("o", "---");
chrs.put("p", ".--.");
chrs.put("q", "--.-");
chrs.put("r", ".-.");
chrs.put("s", "...");
chrs.put("t", "-");
chrs.put("u", "..-");
chrs.put("v", "...-");
chrs.put("z", "--..");
chrs.put("x", "-..-");
chrs.put("w", ".--");
chrs.put("y", "-.--");
chrs.put("0", "-----");
chrs.put("1", ".----");
chrs.put("2", "..---");
chrs.put("3", "...--");
chrs.put("4", "....-");
chrs.put("5", ".....");
chrs.put("6", "-....");
chrs.put("7", "--...");
chrs.put("8", "---..");
chrs.put("9", "----.");
String fstr = "";
for (int i=0;i<sporocilo.length();i++){
String c = ("" + sporocilo.charAt(i)).toLowerCase();
if (chrs.get(c) == null) fstr += "? ";
else fstr += chrs.get(c) + " ";
}
return fstr.strip();
}
void praDvojcek(int n)¶
Za dve števili rečemo, da sta praštevilska dvojčka, če sta obe števili praštevili in je razlika med njima natanko 2. Praštevilski dvojček na primer tvorita števili 29 in 31, kar bomo zapisali kot (29, 31). Tudi (3, 5) je praštevilski dvojček.
Napiši metodo void praDvojcek(int n), ki izpiše vse praštevilske dvojčke, manjše od n, vsakega v svojo vrstico. Pri tem si lahko pomagate z metodo boolean jePrastevilo(int i), ki ste jo že napisali v nalogi 8.
Rešitev
void trikotnik(int n, int tip)¶
Napiši metodo void trikotnik(int n, int tip), ki za podano naravno število n izriše številski trikotnik na način tip (ta je lahko od 1 do 7), kot prikazujejo primeri.
Primeri
Rešitev
/**
* Generate a string of numbers in given range separated with a single space
*
* @param start
* @param end
* @return
*/
static String mkstr (int start, int end) {
String fstr = "";
for (
int i = start;
start <= end ? i <= end : i >= end;
i += start <= end ? 1 : -1
) fstr += (i % 10) + " ";
return fstr.strip();
}
static void trikotnik(int n, int tip) {
switch (tip) {
case 1:
for (int i = 1; i <= n; i++) System.out.println(mkstr(1, i));
break;
case 2:
for (int i = n; i >= 1; i--) System.out.format("%" + (n*2-1) + "s\n", mkstr(1, i));
break;
case 3:
for (int i = 1; i <= n; i++) System.out.format("%" + (n*2-1) + "s\n", mkstr(i, 1));
break;
case 4:
for (int i = n; i >= 1; i--) System.out.println(mkstr(i, 1));
break;
case 5:
for (int i = 1; i <= n; i++) System.out.format("%" + (n*2-1) + "s %s\n", mkstr(1, i), (i-1>=1) ? mkstr(i-1, 1) : "" );
break;
case 6:
for (int i = n; i >= 1; i--) System.out.format("%" + (n*2-1) + "s %s\n", mkstr(1, i), (i-1>=1) ? mkstr(i-1, 1) : "" );
break;
case 7:
for (int i = 1; i <= n; i++) System.out.format("%" + (n*2-1) + "s %s\n", mkstr(i, i+i-1), (i+i-2>=1) ? mkstr(i+i-2, i) : "" );
break;
default:
break;
}
}
void metulj(int n, int tip)¶
Napiši metodo void metulj(int n, int tip), ki za podano naravno število n izriše številskega "metulja" na način tip (ta je lahko 1, 2 ali 3, kot prikazujejo primeri.
Primeri
Rešitev
public static void metulj(int n, int tip) {
if (tip % 2 == 1) for (int i = 1; i <= n; i++) System.out.format("%-"+ (n*2-1) +"s %"+ (n*2-3) +"s\n", mkstr(1, i), (n-1 > 0) ? mkstr(i < n?i:n-1, 1) : "");
if (tip >= 2) for (int i = (tip > 2 ? n-1 : n); i >= 1; i--) System.out.format("%-"+ (n*2-1) +"s %"+ (n*2-3) +"s\n", mkstr(1, i), (n-1 > 0) ? mkstr(i < n?i:n-1, 1) : "");
}
/**
* Generate a string of numbers in given range separated with a single space
*
* @param start
* @param end
* @return
*/
static String mkstr (int start, int end) {
String fstr = "";
for (
int i = start;
start <= end ? i <= end : i >= end;
i += start <= end ? 1 : -1
) fstr += (i % 10) + " ";
return fstr.strip();
}
veckratnikDelitelj(int a, int b)¶
Napiši metodo veckratnikDelitelj(int a, int b), ki izračuna največji skupni delitelj in najmanjši skupni večkratnik, ter ju izpiše na zaslon. Če je vsaj eno od števil enako 0, naj program izpiše Napaka: obe števili morata biti različni od nič.