[1 bod] Program pozostáva z následujúcich troch tried (sú v súboroch A.java, B.java, Foo.java), pričom B je podtrieda triedy A:
public class A {}
public class B extends A {}
public class Foo {
public static int foo(A x, A y) { return 1; }
public static int foo(A x, B y) { return 3; }
public static int foo(B x, B y) { return 2; }
public static void main(String args[]) {
System.out.print(foo(new A(), new A()));
System.out.print(foo(new B(), new A()));
System.out.print(foo(new A(), new B()));
System.out.print(foo(new B(), new B()));
}
}
Ktoré z tvrdení je podľa Vás
pravdivé:
program sa nedá skompilovať, vyhlási chybu ! Akú (slovne):
program sa dá skompilovať, ale pri behu vyhlási chybu ! Akú (slovne):
program sa dá skompilovať aj pustiť a vypíše:
niečo
ine:
__________________________________________________________________________
[1 bod] Následujúci program:
public class Hoo {
private int i = j;
private int j = 10;
public static void main(String args[]){
System.out.println((new Hoo()).i);
}
}
sa nedá skompilovať ! Prečo (slovne):
program sa dá skompilovať, ale pri behu vyhlási chybu ! Akú (slovne):
program sa dá skompilovať aj pustiť a vypíše:
niečo
ine:
__________________________________________________________________________
[1 bod] Pred skončením následujúceho programu sa vypíše hodnota poľa
public static void
main(String[] args) {
int[] pole = { 2, 4, 1, 0, 6, 7 };
pole[1] = pole[5] + 6;
pole[0]++;
pole[5] = pole[1]-6;
// tu vypise pole
}
ktorá je:
2, 12, 1, 0, 6, 7
12, 4, 1, 0, 0, 7
3, 13, 1, 0, 6, 7
13, 4, 1, 0, 13, 1
niečo ine:
__________________________________________________________________________
[1 bod] Čo je výsledkom následujúceho programu, ktorý pozostáva z troch tried:
public class A {
public static int n = 0;
public A() {
n += 1;
n *= 10;
}
}
public class B extends A {
public B() {
n += 5;
n *= 50;
}
}
public class C {
public static void main(String[] args) {
B b = new B();
System.out.println(A.n);
}
}
250
750
11
2510
niečo ine:
__________________________________________________________________________
[1 bod] Následujúci program vypíše priložený výstup:
public class M {
public static int moo(int m) {
if (m > 0)
return 2*moo(m/2)+(1-m%2);
else
return 0;
}
public static void main(String[] args) {
for(int i=0; i<20; i++)
System.out.println("moo("+ i + ")=" + moo(i));
}
}
moo(0)=0
moo(1)=0
moo(2)=1
moo(3)=0
moo(4)=3
moo(5)=2
moo(6)=1
moo(7)=0
moo(8)=7
moo(9)=6
moo(10)=5
moo(11)=4
moo(12)=3
moo(13)=2
moo(14)=1
moo(15)=0
moo(16)=15
moo(17)=14
moo(18)=13
moo(19)=12
12
15
14
13
niečo ine:
__________________________________________________________________________
[1 bod] Následujúci program vypíše výstup:
public class S {
static int n = 0;
int m;
public S(int m) {
this.m = m;
this.m += this.m;
n <<= 1;
n += m;
}
public static void main(String[] args) {
new S(1);
new S(1);
new S(0);
new S(1);
System.out.println(S.n);
}
}
12
15
14
13
niečo ine:
__________________________________________________________________________
[2+2+2+2+1 body] Akiste viete sčítavať viac-ciferé čísla, napríklad:
123456789
+987654321
___________
1111111110
Sčitujeme aj násobíme od najnižších rádov
smerom k vyšším...Vašou úlohou je zimplementovať triedu pre narábanie s veľkými
číslami:
s číslami, ktorých rozsah presahuje int aj long,
presnejšie, len veľmi základné operácie s nimi...
V distrubucii javy existuje modul implementujúci veľkú nadmnožinu operácií z tohoto testu, ktorý nesmiete použiť.
Zadanie:
Definujte triedu BigNum, ktorá vie
reprezentovať max. 1000 mieste nezáporné dekadické číslo. Zvolená reprezentácia
je na vás, pre účely písomky postačí reprezentácia v poli, po jednotlivých
desiatkových cifrách (v desiatkovej sústave, t.j. napr. ako pole cifier
{1,2,3,..., 9} vo vami zvolenom poradí). Šikovnejšej reprezentácii sa medze
nekladú, ale efektívnosť nie je kritériom...
Úlohy (progam píšte na zadnú
stranu (y) týchto zadaní):
1) Pre triedu BigNum, ktorá vie
reprezentovať max. 1000 mieste nezáporné dekadické číslo, definujte základný konštruktor
BigNum(int i) a textovú reprezentáciu-metódu String toString(). [2 body]
Príklad, ktorý musí zbehnúť: BigNum bn = new BigNum(123456);
System.out.println(bn); a vypíše 123456.
2) Definujte metódu void add(BigNum bn), ktorá pripočíta bn k this, t.j. this := this+bn [2 body]
3) Napíšte kód ktorý vypočíta súčet 2^0 + 2^1 + 2^2 +
... 2^99 použitím vašej triedy BigNum [2 body]
hint: 2^57 = 2^56 + 2^56
hint: 2^0 + 2^1 + 2^2 + ... 2^15 =
65535
4) Definujte metódu void mult(int i), ktorá vynásobí this malým nezáporným číslom i <= 10, t.j. this := this*i [2 body]
5) Napíšte kód ktorý vypočíta 100 faktoriál použitím vašej triedy BigNum [1 bod]