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č
.