Download as pdf or txt
Download as pdf or txt
You are on page 1of 40

VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473

U nekim zadacima iz rokova ćemo koristiti nešto od ovoga


public enum Rok { Januar, Februar, Jun, Jul, Septembar, Oktobar }
public struct Index {
public int broj;
public short godina;
}
public class Ispit{
public string predmet;
public Index student;
public Rok rok;
public double brojPoena;
public int ocena;
}
public enum Vrsta { Kreditna, Debitna }
public interface IPrikaz { string Prikazi(); }
public struct Datum
{
public short mesec;
public int godina;
}
public class Kartica
{
public string vlasnik;
public Datum vaziDo;
public Vrsta vrsta;
public double stanje;
}
public enum TPovez { Korice, Karton, Spirala, Ostalo }
public struct TDimenzija
{
public short sirina;
public int duzina;
public double visina;
}
public class Knjiga
{
public string naziv;
public TDimenzija dimenzija;
public TPovez povez;
public short brojStrana;
public void Visina(double debljinaPapira)
{ dimenzija.visina = brojStrana * debljinaPapira; }
}

1
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473

Modifikatori pristupa
PUBLIC Pristup bez ograničenja

PROTECTED Pristup je moguć iz klase u kome je definisan i iz svih nasleđenih klasa

INTERNAL Tip ili članica su vidljivi u celom assembly u kome su deklarisani

PROTECTED Tip ili članica su vidljivi u celom assembly u kome su deklarisani, kao i
INTERNAL izvedene klase koja je deklarisana u drugom assembly

PRIVATE Pristup je moguć samo iz klase u kojoj je definisan

2
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473

Generički tipovi podataka


public class Vrednost<NekiTip> where NekiTip : struct {
public NekiTip podatak;
public Vrednost(NekiTip p) {
podatak = p;
}
public void resetuj(){
podatak = default(NekiTip);
}
}
class Proba {
public static void Main(){
Vrednost<int> v = new Vrednost<int>(10);
Console.WriteLine(v.podatak);
v.resetuj();
Console.WriteLine(v.podatak);
}
}

TIP OBJAŠNJENJE

Struct Možemo da prosledimo vrednosne tipove

Class Možemo da prosledimo referentne tipove

Osoba Možemo da prosledimo objekte klase osoba ili objekte klasa koje nasleđuju osobu

Interfejs Možemo da prosledimo bilo koji tip/strukturu koji implementira interfejs

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

2. Koja od navedenih naredbi je ispravna?


public class CeoBroj { }
public struct Broj { }
public class Podatak<T> where T : class { }
a) Podatak<char> p = new Podatak<char>();
b) Podatak<string> p = new Podatak<string>();
c) Podatak<Broj> p = new Podatak<Broj>();
d) Podatak< CeoBroj > p = new Podatak< CeoBroj >();

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

• Referentni tipovi: string, objekti, nizovi, liste..

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

4. DELEGAT Šta će se ispisati?


public delegate void Del(int a, ref int b);
public class Program
{
public static void Plus(int e, ref int f)
{
e = f + 5;
f = e + 5;
}
public static void Minus(int e, ref int f)
{
e = f - 5;
f = e - 5;
}
public static void Puta(int e, ref int f)
{
e = f * 5;
f = e * 5;
}
static void Main()
{
Del dg = Puta;
dg += Minus;
dg = Puta;
dg += Minus;
dg += Plus;
dg += Minus;
dg -= Plus;
int x = 0, y = 20;
dg(x, ref y);
Console.WriteLine(x+" "+y);
}
}

6
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473

5. DELEGAT Šta će se ispisati?


public delegate void Delegat(Broj a, ref int b);

public class Broj


{
public int broj = 6;
public void dodaj(Broj c, ref int d)
{
c.broj += d;
d++;
}
public void pomnozi(Broj e, ref int f)
{
e.broj *= f;
f++;
}

}
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

6. DELEGAT: Šta će se ispisati?


public delegate int Delegat();

public class Klasa


{
public int A() { Console.Write(4); return 1; }
public int B() { Console.Write(5); return 2; }
public int C() { Console.Write(6); return 3; }

}
public class Program
{

public static void Main()


{
Klasa x = new Klasa();
Klasa y = new Klasa();
Delegat dg = x.A;
for(int i = 6; i >= 1; i--)
{
if (i % 6 == 0) dg += x.B;
if (i % 5 == 0) dg = y.B;
if (i % 4 == 0) dg += y.C;
if (i % 3 == 0) dg -= x.C;
if (i % 2 == 0) dg += x.A;
}
int rezultat = dg();
Console.Write(rezultat);
}
}

8
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473

7. DELEGAT Šta će se ispisati?

public delegate int Delegat(ref int n);


public class Klasa
{
public int p;
public int A(ref int k) { k++;p += k;return 9; }
public int B(ref int k) { k++; p += k; return 8; }
public int C(ref int k) { k++; p += k; return 7; }
}
public class Program
{
public static void Main()
{
Klasa x = new Klasa();
Klasa y = new Klasa();
Delegat dg = x.A;
for(int i = 0; i <= 6; i++)
{
if (i % 6 == 0) dg += x.B;
if (i % 5 == 0) dg = y.B;
if (i % 4 == 0) dg += x.A;
if (i % 3 == 0) dg -= y.C;
if (i % 2 == 0) dg += x.A;
}
int j = 1;
int rezultat = dg(ref j);
Console.WriteLine($"{rezultat}{x.p}{y.p}");
}
}

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

9. Jun 2021. Šta će se ispisati?


public delegate void Del(int a, ref int b, int c);
public class Program
{ public static void Plus (int e, ref int f, int g)
{ e += g; f += g; }
public static void Minus (int e, ref int f, int g)
{ e -= g; f -= g; }
public static void Puta (int e, ref int f, int g)
{ e *= g; f *= g; }
static void Main()
{
Del dg = Minus;
dg -= Plus;
dg = Puta;
dg += Plus;
dg += Minus;
dg += Plus;
dg -= Plus;

int x = 5, y = 10, z = 15;


dg(x, ref y, z);
Console.WriteLine(x + y);
}
}

10.Jun 2021|Jul 2021. Šta je rezultat izvršavanja sledećeg koda?

public delegate void Operacija (ref int x);


class Skup
{
public int niz = { 2,3,4,5,6 };
public int this[int pozicija] { get { return niz[1-pozicija]; } }
}
static class Prosirenja
public static void Mapiraj (this Skup s, Operacija op) { for (int i=1; i<4; i++)
op(ref s.niz[i]); } }
class Program
{
static void Povecaj(ref int x) { x+=5; }
static void Smanji(ref int x) { x-=2; }
static void Main()
{ Skup X = new Skup(); Operacija o = Smanji; o += Povecaj; x.Mapiraj(o);
try { for (int i = -3; i<=0; i++) Console.Write (x[i]); }
catch (Exception) { Console.Write("X"); }
}

11
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473

11.Jul 2021. Koje od ponuđenih metoda se NE mogu pridružiti delegatu dg?

public delegate int Delegat(int a, short b);


public class Klasa{
public int A (ref int a, short b) => a + b;
int B(int a, short b) => a + b;
public static int c(int a, short b) => a + b;}
public class Program : Klasa {
public short D(int a, short b) => 1;
public static int E (int a, short b) => a + b;
public int F(short b, int a) => a + b;
public static void Main(){
Program P = new Program();
Delegat dg = … } }
A. p.A;
B. p.B;
C. C;
D. p.D;
E. E;
F. p.F;

12. Šta se ispisuje na ekranu?


public delegate int Delegat();
public class Klasa
{
int k = 5;
public int A() { Console.Write(++k); return 1; }
public int B() { Console.Write(k); return 2; }
public int C() { Console.Write(--k); return 3; }
}
public class Program
{
static void Main()
{
Klasa x = new Klasa(); Klasa y = new Klasa();
Delegat dg = x.A;
for(int i = 6; i >= 1; i--){
if(i%6 == 0) dg += x.B;
if(i%5 == 0) dg = y.B;
if(i%4 == 0) dg += y.C;
if(i%3 == 0) dg -= x.C;
if(i%2 == 0) dg += x.A;
}
int s = dg();
Console.WriteLine(s);
}
}

12
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473

13.Koje od ponuđenih metoda se mogu pridružiti delegatu u Main metodi?


public delegate int Delegat(string a, bool b);
public class Klasa
{
public int A( ref string a, bool b) { return 10; }
public short B(string a, bool b) { return 0; }
public static int C(string a, bool b) { return 0; }
protected int D( string a, bool b) { return 10; }

public class Program:Klasa


{

public static int E( bool b, string a) { return 10; }


public int F(bool a, string b) { return 0; }

static void Main()


{
Program p = new Program();
Delegat dg = ;
}
}

a) p.A
b) p.B
c) C
d) p.D
e) p.E
f) F

14. Koje su, od navedenih, naredbi spravne?


static bool M(int x) => x%2 == 0;
A. Predicate<int>A =M;
B. Func<bool> B = M;
C. Action<int> C = M;
D. Func<int> D = M;
E. Nijedna

15. Koju od navedenih metoda je moguće pridružiti delegatu?


Func<int, int> D = ?
A. static void A(int x, int y) => Console.WriteLine(“A”); //nema povratnu vrednost
B. static int B(int x) =>x*x;
C. static void C(int x) => Console.WriteLine(“C”); //nema povratnu vrednost
D. static bool D(int x) =>x%2==0; // ne moze jer se I delegate zove D

13
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473

16.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(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

Objektno-orijentisan pristup, interfejsi, apstraktne klase I metode,


nasleđivanje, sakrivanje metoda
• Ako imamo klasu Osoba (atributi: ime i prezime) i tu klasu nasleđuje klasa Student (atributi: brIndeksa):
Osoba o = new Osoba();
Student b = (Student) a;
Ne možemo da radimo kastovanje na ovaj način jer tako za studenta ne kreiramo brIndeksa.
Obrnuto bi moglo, ali ako baš želimo da kastujemo Osobu u Studenta onda moramo da korisitmo sledeći
način:
Student b = a as Student;
U tom slučaju će se brIndeksa inicijalizovati na difoltnu vrednost (null za String)

18. Šta će se ispisati?


class Osoba
{
public static int broj1;
public int broj2;
public Osoba(int a, int b)
{
broj1 = a;
broj2 = b;
}
public static void Main()
{
Osoba o1 = new Osoba(6, 5);
Osoba o2 = new Osoba(9, 8);
Console.WriteLine("{0} {1}",o1.broj1, o1.broj2);
}
}

19.Da li je sledeći kod ispravan?

public class Osoba


{
protected string ime;
}
public class Student: Osoba
{
string indeks = "1/2016";
public Student()
{
ime = "Nepoznato";
}
}

15
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473

20.Šta će se ispisati?

public class Osoba


{
public string ime;
public Osoba(string ime)
{
this.ime = ime;
}

}
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");
}
}
}

21. Šta će se ispisati?


class A {
public A() : this(6) { Console.WriteLine(3); }
public A(int i) { Console.WriteLine(i); }
}
class B:A {
public B() : this(5) { Console.WriteLine(2); }

public B(int i) { Console.WriteLine( i); }


}
class C : B {
public C() : this(4) { Console.WriteLine(1); }
public C (int i) { Console.WriteLine(i); }
}
public class Proba {
public static void Main() {
A a = new A();
A a1 = new A(5);
B b = new B();
A b1 = new B(5);
A c = new C();
A c1 = new C(5);
}
}

16
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473

22. Koja od ponuđenih opcija je moguća?


public abstract class A { }
public abstract class B:A { }
public class C : B { }
A. A a = new B();
B. A a = new A();
C. A a = new C();
D. B b = new A();
E. C C = new A();

23. Jun 2021. Koje od navedenih naredbi su ispravne?


class X { }
class Y : X { }
class Z : Y { }
A. dynamic a = new Y(); a = new X();
B. object b = new Y(); b = new X();
C. Z c1 = new Z(); X c2 = c1;
D. X d1 = new X(); Y d2 = (Y)d1;
E. Y e1 = new Y(); X e2 = (X)e1;
F. X f1 = new X(); Y f2 = f1 as Y;

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();

25. Jun 2021. Koja je od navedenih klasa ispravna?

class X { int x; public X(int i) { x=i; } }


class A { int a; public A(): base() { a=5; } }
class B : X { int b; }
class C : A { int c; public C(int y){ a=y; } }
class D : A { int d; public D(int y){ d=y; } }
class E : B { int e; public E(int z) :base (c) { e=z; }

17
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473

26.Jun 2021. Koja je od navedenih klasa ispravna?

interface I { void Metoda(); }

abstract class A { public abstract int M{ get; } }


class B : A { int b; } //nije ok
abstract class C : A, I { public void Metoda(); } }
class D : C { public override int M{ get => 1; } }
sealed class E : D { public int X => 1; }
class F: E {public int f; }

27. Koje od navedenih naredbi mogu da se izvrse ako je dat kod


sealed class Student : Osoba { }

abstract class Nastavnik : Osoba { }

a) Osoba o = new Student();


b) Student s = new Osoba();
c) Osoba o1 = new Nastavnik();
d) Nastavnik n = new Osoba();

28. Koja od navedenih klasa je ispravna


class Osoba { }
sealed class Student : Osoba { }
class RedovanStudent : Student { }
abstract class Nastavnik : Osoba { }
class Asistent : Nastavnik { }

29. Da li je sledeci kod ispravan?


abstract class Nastavnik
{
protected string ime;
public abstract string Ime
{
get;
internal set;
}
}
abstract class Asistent : Nastavnik
{
public string grupa;
}

18
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473

30.Jun 2021. Koja je od navednih naredbi ispravna?

interface A { void M(); }


abstract class B : A { public void M() {} }
sealed class C : B { }
class D : B { }
A. B a = new C();
B. A b = new B();
C. D c = new C();
D. dynamic d = new A();
E. object e = new D();

31. Šta će se ispisati?


public class A
{
public List<int> lista = new List<int>();
public A(): this(7) { lista.Add(1); }
public A(int i) : base() { lista.Add(i + 2); }
}
public class B : A { }
public class C : B
{
public C() : this(8) { lista.Add(3); }
public C(int i) { lista.Add(i + 4); }

}
public class D : C
{
public D(int i) { lista.Add(i + 5); }
public D() : this(9) { lista.Add(6); }
}
class Program
{

static void Main()


{
D d = new D();
foreach (int broj in d.lista) Console.Write(broj);
}
}

19
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473

32. Koja od navedenih klasa je ispravna?


public class A
{
int x;
int y;
public A(int z) { x = z; }
}
public class B : A { int b = 1; }

A. A
B. B
C. Nijedna

33. Da li je sledeći kod ispravan?


public class Osoba
{
string ime; public Osoba(string i) { ime = i; }
}
public class Student : Osoba
{
string indeks; public Student(string b) { indeks = b; }
}

34.Da li je sledeći kod ispravan?


public class Osoba
{
int godine = 20;
public int Godine => godine; //geter za godine
}
public class Student : Osoba
{
public void Prikazi() { Console.WriteLine(Godine); }
}

35. Šta se ispisuje na ekranu? (Klasa Osoba je definisana u prethodnom zadatku)


object r = new Osoba();
Console.WriteLine(r.Godine);

A. Greška prilikom kompajliranja


B. Greška prilikom izvršavanja
C. 20

20
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473

36. Šta će se ispisati?


public class A
{
public A() : this(6) { Console.WriteLine(3); }
public A(int i) { Console.WriteLine(i); }
}
public class B : A
{
public B() : this(5) { Console.WriteLine(2); }
public B(int i) { Console.WriteLine(i); }
}
public class C : B
{
public C() : this(4) { Console.WriteLine(1); }
public C(int i):base(i) { Console.WriteLine(i); }

public class Program


{
public static void Main()
{
A a = new C(0);

}
}

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

37. JUL 2021. Šta se ispisuje na ekranu?

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); }

38. JUL 2021. Šta se ispisuje na ekranu?

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

39.JUN 2021. Šta se ispisuje na ekranu?


class A
{
public static int a = -1;
public int M1() => a += 8;
public virtual int M2() => a -= 2;
}
class B : A { public override int M2() => a += 9; }
class C : B { }

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

40. Šta ce se ispisati?


public class A
{
public virtual int Prva() { return 10; }
public int Druga() { return 8; }
}
public class B : A
{
public override int Prva()
{
return 6;
}
}
public class C : B
{
public override int Prva()
{
return 4;
}
}
public class D : C {
public new int Druga()
{
return 2;
}
}
public class Program
{
public static void Main()
{
int broj = 150;
A x = new B();
broj += x.Prva();
broj += x.Druga();
C y = new D();
broj += y.Prva();
broj += y.Druga();
Console.WriteLine(broj);
}
}

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.

41.Ako je definisana sledeća parcijalna klasa:

partial class K
{
public int broj;
public K(int b) { broj = b; }
public virtual int M(){ return broj; }
}

koje od navedenih parcijalnih klasa bi se mogle takođe definisati?


a. partial class K { string broj; }
b. partial class K { public K(): this (-1){}}
c. partial class K { static int M() { return 0; } }
d. partial class K { byte M(){ return 0; }
e. public partial class K
{ public int M(int x = 0) { broj=x; return 0; } }
f. public partial class K
{ void override int M(){ broj += broj;}}
g.

42.Ako je definisana sledeća paricijalna klasa K, koje od navedenih parcijalnih klasa


bi se mogle takođe definisati?
public partial class K
{
public int vrednost;
public virtual int M() { return vrednost; }
}

A. partial class K { public K() : base() { } }


B. partial class K { abstract void M(); }
C. partial class K { override int M() { return 0; } }
D. partial class K { byte M() { return 0; } }
E. partial class K { static int M() { return 0; } }
F. partial class K { void M() { vrednost+=1; } }

25
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473

43. Šta će se prikazati na ekranu?


public partial class Podatak
{
public int broj=10;
}
partial class Podatak {
public void Promeni() { broj += 5; }
}
public class Proba
{
public static void Main()
{
Podatak k = new Podatak();
k.Promeni();
Console.WriteLine((k.broj!=10) ? "X" :"Y");
}
}

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.

• Skip() Take() – preskače/uzima određen broj elemenata iz niza


var rez = niz.Take(3); // uzima prva 3 //1, 2, 3
var rez = niz.Skip(3); // preskače prva 3, uzima ostatak //4,3,2,1

44.Jul 2021. Koji, od navedenih izraza, vraća broj parnih brojeva u listi brojeva?

a. int a = lista. Count (x => x%2==0);


b. int b = lista. Select (x => x%2==0).Count();
c. int c = lista. Where (x => x%2==0). Count();
d. int d = lista.FindAll(x => x%2==0).Count();
e. int e = lista. All(x => x%2==0). Count();
f. Int f = lista. Any (x => x%2==0).Count();

45.Jul 2021. Šta se ispisuje na ekranu?

int[] niz = {1, 2, 3, 4, 5, 2, 3};//1 2 3 4 5//0 1 1 2 2


var v = niz. Distinct().Select (x=>x/2). Average();
Console.Write (v);

46.Jul 2021. Šta se ispisuje na ekranu?

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}”);

47.Šta se ispisuje na ekranu?


int[] niz = {48, 58, 95, 100, 80};
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?

funkcija [] lista = lista


funkcija (glava: rep) lista
| glava > 3 - glava: (funkcija rep lista)
| glava <= 3 = (funkcija rep lista)
funkcija [2,5,8,1] [4,7,6]

49.Jul 2021. Sta 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

50.Šta je rezultat izvršavanja sledećeg koda u Haskell-u? //CHECK

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

51. Jun 2021. Šta je rezultat izvršavanja sledećeg koda u Haskell-u?


fabcd=a–b*c+d
f1 = f 2 7
f1 4 6
a. -50
b. -20
c. -18
d. -14
e. -1
f. 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

Pristup je moguć iz klase u kome je definisan i iz svih nasleđenih klasa (iz


PROTECTED
istog ili bilo kog drugog assembly-ja)

INTERNAL Tip ili članica su vidljivi u celom assembly u kome su deklarisani

Tip ili članica su vidljivi u celom assembly u kome su deklarisani (I u


PROTECTED
nasleđenim klasama, ali I u baznim), kao i izvedene klase koja je
INTERNAL
deklarisana u drugom assembly

PRIVATE Pristup je moguć samo iz klase u kojoj je definisan

PRIVATE
Pristup je moguć iz te klase i svih nasleđenik klasa iz istog assembly-ja
PROTECTED

Ukoliko je potrebno dodatno pojašnjenje:


https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers

53. Jul 2021. Koje od navedenih naredbi je ispravno napisati u nastavku Main
metode?

Prvi assembly Drugi assembly (referncira Treći assembly (referncira


namespace N1 prvi) prvi i drugi)
{ using N1; using N1;using N2;
public class X namespace N2 class Z : Y
{ { {
int a; public class Y : X static void Main()
protected int b; { {
internal void Metoda() public int c; Z z = new Z();
{ } protected int C => c; …
} } }
} } }

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 { }
} }

Treći assembly (referncira prvi i drugi)


using N1; using N2;
namespace N3
{
class E : B { }
class F : C { }
}

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

56.Koje su karakterisike atributa L- atributske gramatike? DA LI


a) Atributi se evaluiraju u strogom postorder redosledu obilaska parsnog stabla
b) Koriste se i sintetizovani i nasleđeni atributi
c) Koriste se samo sintetizovani atributi
d) Atributi se evaluiraju pomoću LL parsera

57.BISON je za koje parsere?


a) LL
b) LR

58.ANTLR je za koju vrstu parsera?


c) LL
d) LR

59. Koje su karakteristike LL parsera? DA LI


a) Koristi postupak redukcije koji je inverzan postupku desne derivacije
b) Koristi postupak redukcije koji je inverzan postupku leve derivacije
c) Ulazni niz tokena procesira s leva na desno
d) Podržavaju samo L-atributske gramatike

60.Koja od navedenih tvrđenja su tačna?


a) U apstraktnom tipu podatka focus je na internoj reprezentaciji tipa
b) U hibridnim implementacionim sistemima izvorni kod programa se prevodi u medjukod
c) Leksički analizator (skener) obično se specificira korišćenjem atributskih gramatika
d) Softverski alat ANTLR generiše LL parser
e) LR parser koristi top down pristup za generisanje parsnog stabla

61.Enkapsulaciona konstrukcija assembly sadrži


a) Mašinski kod
b) MSIL instrukcije i meta informacije
c) C# kod

62. Koje su imenovane inkapsulacije


a) Header datoteka i implementaciona datoteka u C++
b) Namespace u C#
c) Assembly u C#

34
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473

63.Vidljivost interfejsa apstraktnog tipa podatka u PJ ADA obezbedjuje


a) Public modifikator pritupa
b) Specifikacioni paket
c) Public klauzula

64.Koja od navedenih tvrđenja su tačna?


a) BISON softverski alat na osnovu zadate gramatike nekog jezika generiše top-down parser
b) Parsno stablo je kondenzovanno apsotraktno sintaksno stablo
c) Parser se obično specificira pomoću atributske gramatike
d) U atributskoj gramatici, terminali mogu imati samo sintetizovane atribute

65.Enkapsulaciona konstrukcija u programskom jeziku C je?


a) Package
b) Klasa
c) Nemaspace
d) Header datoteka i implementaciona datoteka
e) assembly

66.Enkapsulaciona konstrukcija u programskom jeziku C++ je?


a) Klasa
b) Nemaspace
c) Header datoteka i implementaciona datoteka
d) Package

67.Logički jezici se zasnivaju na?


a) Lambda računu
b) Predikatima
c) Von Neumanovoj arhitekturi

68. Imperativni jezici se zasnivaju na?


A. Lambda računu
B. Predikatima
C. Von Neumanovoj arhitekturi

69. Funkcionalni jezici se zasnivaju na?


A. Lambda računu
B. Predikatima
C. Von Neumanovoj arhitekturi

70. LISP je?


A. Logički jezik
B. Domensko specifičan jezik
C. Funkcionalni jezik
D. Objektno orijentisan
E. Impretivni

35
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473

71. Odvajanje specifikacije ATP od njegove implementacije je


A. Enkapsulacija
B. Sakrivanje informacija
C. Proceduralna apstrakcija

72. YACC softverski alat služi za generisanje?


A. LL parsera
B. LR parsera
C. AST-a

73. Dodeljivanje ključna je karakteristika?


f) Logičkih jezika
g) Funckionalnih jezika
h) Domensko specifičnih jezika
i) Imperativnih jezika

74. Assembly se definiše pri


a) Kompajliranju
b) Kreiranju
c) izvršenju

75. Koja od navedenih formalnih sistema obezbeđuje semantičku osnovu


za programski jezik PROLOG?
a) Lambda račun
b) Predikatski račun
c) Proporcionalna logika

76. PROLOG je
a) Logički jezik
b) Domensko specifičan
c) Funkcionalni
d) OO
e) Impretivni

77. Ključna operacija kod OO paradigme je ?


a) Dodeljivanje vrednosti
b) Prenošenje poruke
c) Izvršavanje funkcije

78. Programske paradigme obezbedjuju model


projektovanja/implementacije softverskih sistema?
a) Da
b) ne

36
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473

79. Da li je tačna tvrdnja: Konstruktori se ne nasleđuju, izvršavaju se


hijerarhijski i mogu imati modifikator pristupa?
a) DA
b) NE

80. Da li je tačna tvrdnja: Izvedena klasa može da nasledi sve članove


bazne klase sem konstruktora i destruktora
a) DA
b) NE

81. Atributska gramatika se koristi za specifikaciju


a) Sintakse
b) Statičke semantike
c) Dinamičke semantike

82. Unifikacija je ključna operacija kojih jezika?


a) Funkcionalnih
b) Imperativnih
c) Logičkih
d) Domensko- specifičnih

83. Da li je IL viši PJ?


a) DA
b) NE

84. Program napisan u PJ PROLOG se sastoji od?


a) Kompozicije primene funkcija
b) Skupa činjenica i pravila izvođenja
c) Sekvence instrukcija

85. Koji su funkcionalni programski jezici?


a) Haskel
b) Java
c) Scheme
d) C++
e) ML
f) Ada

86. Koja je bazna klasa u C#?


- System.Object

87. Da li u C# nasledjivanje moze da bude visestruko?


a) da

b) ne

37
VANJA VIZI ČASOVI P1 P2 SPA PJ 0612974473

88. S-Attribute gramatika, koja su tačna tvrđenja:


a) Izvršava se u linearnom vremenu
b) Vezuje se za top down parsiranje (bottom-up je za S-Attribute, a top-down je za L-Attribute)
c) Koriste se LR parseri (LL parseri koristi L-Attribute gramatika)
d) ANTLR se koristi kao softverski alat (L-Attribute gramatika)
e) Koristi nasleđene i/ili sintetizovane atribute (koristi samo sintetizovane atribute(iz skripte))

89. Koje su tačne karakteristike za ANTLR: (top-down)


a) Redukcija izvođenja sa leva (bottom-up)
b) Redukcija izvođenja sa desna
c) …
d) …

90. LISP je:


a) Logički jezik (Prolog)
b) Domensko-specifični (valjda script, markup i upitni jezici)
c) Funkcionalni (LISP, Scheme, Haskell)
d) Objektno-orijentisani (Java, C++, C#)
e) Imperativni (FORTRAN, COBOL, Pascal, C)

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)

8. U kojim, od navedenih programskih jezika, postoji koncept promenljive:


A. Lisp C. Python E. Prolog
B. Haskell D. Scala F. ML

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.

15. Common Intermediate Language (CIL) se:


A. Interpretira
B. Kompajlira
C. Direktno izvršava

40

You might also like