Professional Documents
Culture Documents
(PJ) Skripta Drugi KLK Bez Resenja
(PJ) Skripta Drugi KLK Bez Resenja
1
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
Modifikatori pristupa
PUBLIC Pristup bez ograničenja
PROTECTED Tip ili članica su vidljivi u celom assembly u kome su deklarisani, kao i
INTERNAL izvedene klase koja je deklarisana u drugom assembly
2
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
TIP OBJAŠNJENJE
Osoba Možemo da prosledimo objekte klase osoba ili objekte klasa koje nasleđuju osobu
Možemo da prosledimo bilo koji tip koji ima besparametarski konstruktor, bez
New()
obzira da li smo napravili taj konstruktor ili ne
• Moguće je takođe kombinovati ova ograničenja. Npr. ako stavimo sledeće ograničenje
class, Interfejs, new()
tu spadaju svi referentni tipovi koji implementiraju Interfejs i pritom imaju besparametarski konstruktor.
1. Jun 2021|Jul 2021 Koji tip se NE bi mogao navesti prilikom instanciranja klase
Skup?
class Skup<NekiTip> where NekiTip : struct { List<NekiTip> elementi = new List<NekiTip>(); }
a. DateTime
b. Ispit
c. sbyte
d. Rok
e. string
f. char
3
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
3. Koji tip bi se mogao navesti prilikom instanciranja klase K? (Neki klk od ranije)
class K<NekiTip> where NekiTip : struct { NekiTip polje; }
a) Bool
b) Int
c) String
d) Vrsta
e) Kartica
f) Datum
• Vrednosni tipovi: byte, int, short, long, float, double, decimal, char, bool, strukture, DateTime
4
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
Delegati
• Kada hoćemo da skupimo više metoda sa istim potpisom I da ih stavimo u neki niz izvršenja tada koristimo
delegate. Delegat nam omogućava da odredimo kojim redosledom ćemo izvršavati metode.
• Sve metode u jednom delegatu moraju da imaju isti potpis metode.
• Delegati su referentni tip koji sadrži referencu na metode. Može da sadrži reference samo na metode koje su
kompatibilnog tipa. Mora da ima istu povratnu vrednost kao i metode na koje referencira.
• Nije važno da li je static ili ne. Moramo da pazimo na modifikatore pristupa metoda koje želimo da dodamo u
delegat.
• Za ubacivanje i izbacivanje metoda u delegat koristimo += i -= . Kada koristimo += ili -= tada formiramo listu
poziva metoda ( invocation list ).Ako želimo da izbacimo metodu koja ni ne postoji u delegatu neće se ništa
desiti.
• U jednom delegatu možemo da imamo više istih metoda. Ako imamo više metoda D, a uradimo delegat-=D,
tada će se izbaciti SAMO ona metoda koja je poslednja ubačena.
• Kada dodajemo metode u delegate, ne treba da pišemo zagrade za metode.
• Delegat čuva samo povratnu vrednost od poslednje metode koja se pozove.
• Kada radimo ubacivanje metoda u delegat, moramo da pazimo da li je metoda koju ubacujemo/izbacujemo
statička ili nije.
A. Ako je statička – ne moramo da imamo objekat
B. Ako nije statička – moramo da imamo objekat klase
• Tri specijalne vrste delegata
C. Func – može da referencira metode koje primaju 0,1 ili 2 parametra i moraju da imaju povratnu
vrednost (ne može da vrati bool)
D. Predicate – prima parametre, ali mora da ima povratnu vrednost bool
E. Action - prima samo metode koje nemaju povratnu vrednost
5
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
6
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
}
public class Program
{
public static void Oduzmi(Broj x, ref int y)
{
x.broj -= y;
y++;
}
public static void Main()
{
Broj broj1 = new Broj();
Delegat dg;
dg = Oduzmi;
dg += broj1.dodaj;
dg = broj1.pomnozi;
dg += broj1.dodaj;
dg += Oduzmi;
dg -= broj1.dodaj;
int z = 7;
dg(broj1, ref z);
Console.WriteLine(broj1.broj); //34
Console.WriteLine(z); //9
}
}
7
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
}
public class Program
{
8
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
9
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
8. Jun 2021|Jul 2021. Koja je vrednost promenljie bilans nakon izvršavanja koda?
public delegate void Obrada(double suma);
public class Racun
{
string broj; public double stanje;
public Racun(string b, double s) { broj = b;stanje = s; }
public static event Obrada Dogadjaj;
public void promeni(double iznos)
{
if (stanje + iznos < 0) return;
stanje += iznos;
if (Dogadjaj != null)
{
Console.WriteLine("A");
Dogadjaj(iznos);
}
}
}
public class Banka
{
static double bilans = 1000;
static void Azuriraj(double i) => bilans += i;
static void Main()
{
Racun r1 = new Racun("111", 0);
Racun r2 = new Racun("222", 0);
r1.promeni(100);//ovde je delegat null
Racun.Dogadjaj += Azuriraj;
r2.promeni(200);
r1.promeni(-75);
r2.promeni(-350);
Console.WriteLine(bilans);
}
10
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
11
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
12
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
a) p.A
b) p.B
c) C
d) p.D
e) p.E
f) F
13
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
class Osoba { }
class Student : Osoba { }
class Program
{
static int M(int x, int y) => x + y;
static int Primeni (int v, Func<int, int> f) => f(v);
static Func<int, int> F1(int z) => x=> M(z, x);
static Func<int, int> F2() => x=> M(3, x);
static Func<int, int> Odredi(Osoba o) => (o is Student) ? F2() : F1(5);
static void Main()
{ Osoba a = new Student();
var b = Odredi(a);
var c = Primeni (6,b);
}
}
17. JUL 2021. Koja je vrednost promenljive c nakon izvršavanja sledećeg koda?
class Osoba { }
class Student : Osoba { }
class Program
{
static int M(int x, int y) => x + y;
static int Primeni (int v, Func<int, int> f) => f(v);
static Func<int, int> F1(int z) => x=> M(z, x);
static Func<int, int> F2() => x=> M(12, x);
static Func<int, int> Odredi(Osoba o) => (o is Student) ? F1(5) : F2();
static void Main()
{ Osoba a = new Student();
var b = Odredi(a);
var c = Primeni (6,b);
}
}
14
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
15
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
20.Šta će se ispisati?
}
public class Program
{
public static void Main(string[] args)
{
Osoba o1 = new Osoba("Milos");
Osoba o2 = new Osoba("Milos");
if (o1.Equals(o2))
{
Console.WriteLine("Radi se o istoj osobi");
}
else
{
Console.WriteLine("Ne radi se o istoj osobi");
}
}
}
16
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
24. Jun 2021. Koje od navedenih poziva bi bilo ispravno navesti u Metodi 4?
public class X
{
public void Metoda1() { Console.Write(“X”); }
public static void Metoda2() { Console.Write(“X”); }
}
public class Y : X { public void Metoda3() { Console.Write(“Y”); } }
public class Z : X { public void Metoda4() { … } }
A. Metoda1();
B. base.Metoda1();
C. Metoda2();
D. this.Metoda2();
E. Metoda3();
F. this.Metoda4();
17
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
18
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
}
public class D : C
{
public D(int i) { lista.Add(i + 5); }
public D() : this(9) { lista.Add(6); }
}
class Program
{
19
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
A. A
B. B
C. Nijedna
20
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
}
}
21
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
Sakrivanje metoda
• Ako imamo situaciju da nadklasa i podklasa imaju istu metodu i u obe klase stavimo metodu sa identičnim
potpisom metode, tada će se javiti greška. Ova situacija može da se reši na tri načina:
1. Promena naziva metode u izvedenoj klasi
2. Navođenje ključne reči new ispred metode u izvedenoj klasi
Na ovaj način sakrivamo metodu iz nadklase u izvedenoj klasi
3. Navođenje ključne reči virtual ispred metode u baznoj klasi i ključne reči override u izvedenoj klasi
Na ovaj način metoda koja se nasleđuje mora da se reimplementira u izvedenoj klasi
• Kada neku metodu koja je virtual overajdujemo, ta nova metoda mora da ima identičan potpis metode kao
početna metoda.
• U Javi su sve metode po difoltu virtual, pa ne moramo da dodajemo tu reč, ali u C# moramo.
• Ako koristimo virtual i override onda se vezujemo za objekat.
• Ako koristimo new onda se vezujemo za tip podatka
class A{
public static int a = -1;
public int M1() => a+=6;
public virtual int M2() => a+=1;
}
class B : A { public override int M2() => a+=3; }
class C : B { }
…
List<A> l = new List<A>(); l. Add(new C()); l. Add (new B()); l. Add(new A());
foreach (A x in l) { x.M1(); x.M2(); Console.Write(A.a); }
public class A {
public virtual void Prva(List<int> l) { l.Add(5); }
public void Druga(List<int> l) { l.Add(4); }
}
public class B : A
{ public override void Prva(List<int> l) {l.Add(3);}}
public class C : B
{ public new void Druga(List<int> l) {l.Add(2);}}
public class D :C
{ public override void Prva(List<int> l) {l.Add(1);}}
…
List<int> lista = new List<int>();
A x = new B(); x.Prva (lista); x.Druga (lista);
C y = new C(); y.Prva (lista); y. Druga (lista);
C z = new D(); z.Prva (lista); z.Druga (lista);
foreach (int broj in lista) Console.Write(broj);
22
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
class Primer
{
public static void Main()
{
List<A> l = new List<A>(); l.Add(new B()); l.Add(new C()); l.Add(new A());
foreach (A x in l) { x.M1(); x.M2(); Console.Write(A.a); }
}
}
23
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
24
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
Parcijalne klase
• Parcijalna klasa je klasa čiji su elementi podeljeni u više različitih fajlova. Povezivanje ovih klasa se vrši
prilikom kompajliranja.
• Moraju klase da budu u istom namescpace-u i u istom assembly-ju.
• Moramo da pazimo u parcijalnim klasama na to koje metode mogu/ne mogu da stoje zajedno.
partial class K
{
public int broj;
public K(int b) { broj = b; }
public virtual int M(){ return broj; }
}
25
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
26
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
Lambda izrazi
• Da bismo mogli da koristimo LINQ izraze moramo da dodamo using System.Linq;
int[] niz = new int[] { 1, 2, 3, 4, 3, 2, 1 };
• Select() – upit koji vrši mapiranje elemenata niza (vraća uvek onoliko elemenata koliko je elemenata u nizu)
var rez = niz.Select(x => 2 * x); //2,4,6,8,6,4,2
var rez = niz.Select(x =>'a'); // a a a a a a a a
var rez = niz.Select(x => x %2==0); //false,true,false,true,false,true,false
• Where() - mora uvek da primi neki uslov kao parametar (neku bool vrednost) inače ne može da se
kompajlira. Ovo je upit koji nam vraća određene članove niza koji zadovoljavaju zadati uslov.
var rez = niz.Where(x => x %2==0); // 2 4 2
var rez = niz.Where(x => x*x); // NE MOŽE!
var rez = niz.Where(x => x>3); // 4
• Distinct() – vraća kolekciju u kojoj ostaje samo jedno pojavljivanje svakog broja (uzima prvo pojavljivanje).
Ne sme da ima nikakve parametre.
var rez = niz.Distinct(); // 1 2 3 4
• Max(), Min() – vraća najveći/najmanji element niza. Mogu da primaju parametre. Moguće je porediti i bool
vrednosti (true > false )
var rez = niz.Max(x=>2*x); //8 Ova dva izraza su ekvivalentna
var rez = niz.Select(x => 2 * x).Max(); //8
• Average() – vraća prosek elemenata niza. Može da prima parametre, ali i ne mora. Vraća double vrednost
var rez = niz.Average(x => 2 * x); //vraca prosek niza 2,4,6,8,6,4,2
var rez = niz.Average(); //vraća prosek niza 1, 2, 3, 4, 3, 2, 1
• Contains() - proverava da li neki određeni element pripada ili ne pripada nizu. Vraća true ili false.
var rez = niz.Contains(50); //false
var rez = niz.Contains(2); //true
• Count() – vraća broj elemenata niza. Može da se poziva sa parametrom ili bez.
• Any() – proverava da li je barem jedan od elemenata niza zadovoljava određeni uslov. Vraća bool vrednost.
var rez = niz.Any(x => x % 2 != 0);
// proverava da li u nizu postoji barem jedan neparan broj
• All() – proverava da li svi elementi kolekcije zadovoljavaju određeni uslov.
• Except() – Uzima sve elemente niza bez ponavljanja osim onih koje mu prosledimo
var rez = niz.Except(niz.Where(x => x <= 2));//3,4
//vraća sve elemente niza bez ponavljanja osim elemenata koji su <=2
• Sum() – vraća zbir svih elemenaza niza. Može da prima neki parametar kao Min i Max.
var rez = niz.Sum( x=>2*x); Ova dva izraza su ekvivalentna
var rez = niz.Select(x => 2*x).Sum();
• First() – vraća prvi element kolekcije. Može da se poziva bez parametara (tada vraća baš prvi element) ili sa
nekim uslovom kao parametar – u tom slučaju vraća prvi element koji zadovoljava traženi uslov. Ne može da
se poziva nad praznom listom ili nizom (InvalidOperationException)
var rez = niz.First(); //vraca prvi
var rez = niz.First(x => x % 2 == 0); //vraca prvi paran
Ukoliko bismo uradili sledeću liniju koda opet bi se javio InvalidOperationException:
var rez = niz.First(x => x >50);
Da se to ne bi dešavalo koristi se FirstOrDefault() koji radi identično kao i First(), samo što ne baca
InvalidOperationException već vraća default vrednost ukoliko upit ne može da se izvrši
• Last() / LastOrDefault() – isto kao i First, samo traži poslednji element
27
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
• FindAll() – radi isto kao i Where, samo što je FindAll više za listu, a Where je za niz. Obe metode mogu da se
koriste i za niz i za listu, razlika je samo u njihovoj implementaciji u pozadini.
44.Jul 2021. Koji, od navedenih izraza, vraća broj parnih brojeva u listi brojeva?
int[] niz = {48, 58, 38, 85, 100, 80}; //85 100 80
//(B:85,D:170),(B:100,D:200),(B:80,D:160)
var a = niz.Where(x => x/10 > 5).Select(x => new { B = x, D = (x+x) }).First();
Console.Write($”{a.B}: {a.D}”);
28
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
Haskell
48.Jun 2021. Šta je rezultat izvršavanja sledećeg koda u Haskell-u?
f a b c d = a – b * c + d * e
f1 = f 4 6
s
f2 = f1 7 2
f2 3
a. -54
b. -36
c. -32
d. -12
e. 12
f. 13
funkcija [] _ = 0
funkcija (glava: rep) broj
| glava > broj = funkcija rep broj
| glava <= broj = glava + (funkcija rep lista)
funkcija [4,1,2,5,7,6] 2 * 3
29
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
Prolog
52.Ako je dat sledeći kod u Prolog-u:
p(b, a). p(m, b). p(m,c).
q(e, d). q(m, c).
r(m, e). r(f, m).
z(X,Y) :- p(X,Y).
z (X, Y):- r(X,Y).
sa kojim vrednostima će se unificirati promenljiva X tokom izvršavanja upita:
?- z(m, X).
A. a
B. b
C. c
D. d
E. e
F. f
30
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
Assembly
PUBLIC Pristup bez ograničenja
PRIVATE
Pristup je moguć iz te klase i svih nasleđenik klasa iz istog assembly-ja
PROTECTED
53. Jul 2021. Koje od navedenih naredbi je ispravno napisati u nastavku Main
metode?
1. z.Metoda();
2. Console.Write(z.a);
3. Console.Write(z.b);
4. Console.Write(z.c);
5. Console.Write(z.C);
31
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
54. Jul 2021|Jun 2021. Iz kojih klasa bi se moglo pristupiti polju broj?
Prvi assembly
namespace N1 Drugi assembly (referncira prvi)
{ using N1;
public class K namespace N2
{ protected int broj; } {
public class A { } class C : B { }
public class B : K { } class D { }
} }
32
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
33
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
Teorijska pitanja
55.Koje su karakterisike atributa S-gramatike? DA LI
a) Atributi se evaluiraju u strogom postorder redosledu obilaska parsnog stabla
b) Procesiraju se pomoću ugrađenog eveluatora u ANTLR softverskom alatu
c) Atributi se evaluiraju pomoću LR parsera
34
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
35
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
76. PROLOG je
a) Logički jezik
b) Domensko specifičan
c) Funkcionalni
d) OO
e) Impretivni
36
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
b) ne
37
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
Jun 2021.
1. Entiteti označeni private klauzulom u programskom jeziku C++ vidljivi su:
38
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
A. za članice date klase
B. za članice izvedene klase
C. za članice friend klase
D. za friend funkcije
E. za sve funkcije
2. Specifikacija elementarnog tipa podataka NE obuhvata:
A. naziv
B. reprezentaciju
C. operacije
D. implementaciju operacija
3. Enkapsulaciona konstrukcija u programskom jeziku C++ je:
A. Klasa
B. package
C. namespace
D. Assembly
E. Header datoteka i implementaciona datoteka
4. U programskom jeziku Ada vidljivost imena definisanih u eksternim paketima se obezbeđuje:
A. inlude klauzulom
B. import klauzulom
C. with klauzulom
D. use klauzulom
E. using klauzulom
5. Koji od navedenih programskih jezika, koristi imenovanu enkapsulaciju package:
A. C++
B. Java
C. Ada
D. C#
6. Koji, od navedenih, predstavljaju izraze (expression):
A. x + y
B. 100
C. x??y;
D. (x > 0) ? x : 0
E. Nijedan
7. Ako funkcionalna kompozicija uzima dve funkcije g(t) i h(t) kao parameter, tim redom, koji rezultat
vraća primenom na argument t = 10, ako je:
g(t) = t * t i h(t) = t + t
A. 200
B. 400
C. (100, 20)
D. (100, 200)
39
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473
9. Koja, od navedenih, vrsta programskih jezika pripada klasi deklarativnih jezika?
A. Funkcionalni jezici
B. Imperativni jezici
C. Logički jezici
D. Objektno-orijentisani jezici
10. Na koji način se u programskom jeziku LISP zapisuje primena funkcije + na parameter a i b:
A. a + b
B. (a + b)
C. a b +
D. + (a b)
E. + a b
F. (+ a b)
11. Koje su, od navedenih, semantičkih akcija ispravne ako je dato sledeće produkciono pravilo:
L -> T L1 Svim neterminalima pridruženi su atributi: n(nasleđeni) i s(sintetizovani)
A. L.n = T.n
B. L1.n = T.n + 3
C. L.s = T.s
D. L1.s = L.s
E. T.n = L1.n
F. T.n = L.n
12. Koja faza može biti pretposlednja faza u procesu kompilacije?
A. Generisanje koda
B. Sintaksna analiza
C. Optimizacija koda
D. Leksička analiza
E. Semantička analiza
13. Koje su, od navedenih, karakteristike L-atributske gramatike:
A. Atributi se evaluiraju u postorder redosledu obilaska parsnog stabla.
B. Koriste se nasleđeni atributi.
C. Koriste se sintetizovani atributi.
D. Semantička analiza može da se izvršava za vreme parsiranja.
14. Koje su, od navedenih, karakteristike LR parsera:
A. Ulazni niz tokena procesira se sdesna na levo.
B. Grade parsno stablo od korena prema listovima.
C. Podržavaju samo S-atributske gramatike.
D. Koristi postupak redukcije koji je inverzan postupku desne derivacije.
40