ОО1/К1 2020 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
(→‎G2: 5. fali 2 opcije, 6.)
м (Objašnjenja)
 
(Није приказано 17 међуизмена 4 корисника)
Ред 1: Ред 1:
{{tocright}}
{{tocright}}
* Za pitanja sa više odgovora, tačni odgovori su <span class="solution-example">podebljani i uokvireni</span>. Pritisnite na sledeće dugme kako biste ih sakrili ili otkrili: <span class="hide-solutions"></span>
{{rešenja}}
* Za pitanja za koje se odgovori unose, tačni odgovori su podvučeni i sakriveni: <span class="spoiler-example">ovako</span>. Pritisnite na sledeće dugme kako biste ih otkrili ili sakrili: <span class="unhide-spoilers"></span>
 
== G1 ==
=== 1. zadatak ===
Koji je tip promenljive <code>p</code> u sledećem programu:
<syntaxhighlight lang="cpp">
int main(void) {
    int i = 1;
    const int k = i;
    auto p = new int + k;
    return 0;
}
</syntaxhighlight>
<div class="abc-list" data-solution="single">
# <code>int</code>
# <code>const int</code>
# <code class="solution">int*</code>
# <code>const int*</code>
# Program se ne prevodi.
</div>
Objašnjenje: <span class="spoiler" data-solution="explanation">Vrednost <code>p</code> će biti pokazivač pomeren za <code>k</code>.</span>
 
=== 2. zadatak ===
Šta ispisuje sledeći program na jeziku C++?
<syntaxhighlight lang="cpp">
#include <iostream>
int &f(int &x){
  return ++x;
}
 
int main(void) {
  std::cout << f(2);
}
</syntaxhighlight>
<div class="abc-list" data-solution="single">
# 6
# 0
# <span class="solution">Program se ne prevodi.</span>
# 5
</div>
Objašnjenje: <span class="spoiler" data-solution="explanation">Funkcija prima referencu na lvrednost a 2 je dvrednost.</span>
 
=== 3. zadatak ===
Ime simbol predstavlja niz referenci na nepromenljiv pokazivač na int. Kako se deklariše u kodu?
<div class="abc-list" data-solution="single">
# ...
# ...
# <code>int * const &simbol[]</code>
# <span class="solution">Deklaracija za simbol se ne prevodi.</span>
</div>
 
=== ?. zadatak ===
: ''Isti zadatak se našao i na [[ОО1/Пробни тестови 2020#3. zadatak 3|probnom kolokvijumu za IR]].''
Koje tvrđenje je tačno?
<div class="abc-list" data-solution="single">
# <span class="solution">Mehanizam preklapanje<sup>[sic]</sup> imena funkcija je potpuno statički, koja funkcija će se pozvati određuje se u vreme prevođenja.</span>
# Mehanizam preklapanje<sup>[sic]</sup> imena funkcija je potpuno dinamički, koja funkcija će se pozvati određuje se u vreme izvršavanja.
# Mehanizam preklapanje<sup>[sic]</sup> imena funkcija je potpuno statički, koja funkcija će se pozvati određuje se u vreme izvršavanja.
# Mehanizam preklapanje<sup>[sic]</sup> imena funkcija je potpuno dinamički, koja funkcija će se pozvati određuje se u vreme prevođenja.
</div>
 
=== ?. zadatak ===
: ''Isti zadatak se našao i na [[ОО1/Пробни тестови 2020#4. zadatak 3|probnom kolokvijumu za IR]].''
Koja tvrđenja su tačna na programskom jeziku C++?
<div class="abc-list" data-solution="multiple">
# <span class="solution">Metodi <code>int f() & { return 1; }</code> i <code>int f() && { return 3; }</code> mogu postojati u istoj klasi.</span>
# <span class="solution">Metodi <code>int f() & { return 1; }</code> i <code>int f() const & { return 3; }</code> mogu postojati u istoj klasi.</span>
# Metodi <code>int f() & { return 1; }</code> i <code>void f() & { }</code> mogu postojati u istoj klasi.
</div>
 
=== 7. zadatak ===
Šta ispisuje sledeći program na programskom jeziku C++:
<syntaxhighlight lang="cpp">
#include <iostream>
using namespace std;
 
class K {
    static int staticId;
    int id = staticId++;
public:  
    K() = default;
    K(const K&) {}
    int m(K arg) {
        return arg.id;
    }
};
 
int K::staticId = 1;
int main()
{
    K a;
    K b;
    K c(a);
    cout << a.m(c);
}
</syntaxhighlight>
<div class="abc-list" data-solution="single">
# 1
# 2
# 5
# 3
# <span class="solution">4</span>
# Više od 5.
</div>
Objašnjenje: <span class="spoiler" data-solution="explanation">Svakom objektu se dodeljuje novi ID pri stvaranju, a poslednji napravljeni objekat pre izvršavanja metode jeste sami argument metode, kopiran prilikom prosleđivanja.</span>


== G2 ==
== G2 ==
=== 1. zadatak ===
=== 1. zadatak ===
Zaokružiti tačne tvrdnje vezane za reference na jeziku C++:
Zaokružiti tačne tvrdnje u vezi sa referencama na jeziku C++:
<div class="abc-list">
<div class="abc-list" data-solution="single">
# <span class="solution">Moguće je definisati referencu na pokazivač.</span>
# <span class="solution">Moguće je definisati referencu na pokazivač.</span>
# Moguće je definisati niz referenci.
# Moguće je definisati niz referenci.
Ред 12: Ред 116:
# Moguće je definisati pokazivač na referencu.
# Moguće je definisati pokazivač na referencu.
</div>
</div>


=== 2. zadatak ===
=== 2. zadatak ===
Ред 28: Ред 131:
}
}
</syntaxhighlight>
</syntaxhighlight>
<div class="abc-list">
<div class="abc-list" data-solution="single">
# 6
# 6
# 0
# 0
Ред 34: Ред 137:
# 5
# 5
</div>
</div>
Objašnjenje: <span class="spoiler" data-solution="explanation"><code>x++</code> vraća dvrednost, a ne lvrednost.</span>


=== 4. zadatak ===
=== 4. zadatak ===
Povezati tvrdnje vezane za modifikatore metoda:
Povezati tvrdnje u vezi sa modifikatorima metoda:
{| class="wikitable"
{| class="wikitable"
|+ Modifikatori
|+ Modifikatori
|-
|-
| <code>volatile </code> <span class="spoiler">b.</span>
|
 
<div data-solution="select" data-options="a,b,c,d,e,f,g,h">
<code>const </code> <span class="spoiler">e.</span>
# <code>volatile </code> <span class="spoiler">b</span>
 
# <code>const </code> <span class="spoiler">e</span>
<code>& </code> <span class="spoiler">g.</span>
# <code>& </code> <span class="spoiler">g</span>
 
# <code> && </code> <span class="spoiler">f</span>
<code> && </code> <span class="spoiler">f.</span>
</div>
|| <div class="abc-list">
|| <div class="abc-list">
# Metoda se može zvati samo ako je tekući objekat pokazivač.
# Metoda se može zvati samo ako je tekući objekat pokazivač.
Ред 59: Ред 163:
|}
|}


=== 5 zadatak ===
=== 5. zadatak ===
Zaokružiti tačne tvrdnje vezane za pomerajući konstuktor na jeziku C++:
Zaokružiti tačne tvrdnje u vezi sa pomerajućim konstruktorom na jeziku C++:
<div class="abc-list">
<div class="abc-list" data-solution="single">
# Definisanjem podrazumevanog konstruktora briše se ugrađeni premeštajući konstruktor.
# <span class="solution">Definisanjem kopirajućeg konstruktora briše se ugrađeni premeštajući konstruktor.</span>
# <span class="solution">Definisanjem kopirajućeg konstruktora briše se ugrađeni premeštajući konstruktor.</span>
# Pomerajući konstruktor mora da ima samo jedan parametar.
# Pomerajući konstruktor mora da ima samo jedan parametar.
</div>
</div>


=== 6 zadatak ===
=== 6. zadatak ===
Zaokružiti tačne tvrdnje vezane za funkcije na jeziku C++:
Zaokružiti tačne tvrdnje u vezi sa funkcijama na jeziku C++:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <span class="solution">Mogu se definisati više funkcija istog imena ako imaju različiti broj parametara bez podrazumevanih vrednosti. </span>
# <span class="solution">Mogu se definisati više funkcija istog imena ako imaju različiti broj parametara bez podrazumevanih vrednosti. </span>
# Mogu se definisati više funkcija istog imena ako su im različite povratne vrednosti.
# Mogu se definisati više funkcija istog imena ako su im različite povratne vrednosti.
# Ne mogu se definisati više funkcija istog imena, jer kompajler ne bi mogao da ih raspozna.
# Ne mogu se definisati više funkcija istog imena, jer kompajler ne bi mogao da ih raspozna.
# <span class="solution">Mogu se definisati više funkcija istog imena ako imaju različite tipove parametara </span>
# <span class="solution">Mogu se definisati više funkcija istog imena ako imaju različite tipove parametara. </span>
</div>
 
=== 7. zadatak ===
Šta ispisuje sledeći program na programskom jeziku C++:
<syntaxhighlight lang="cpp">
#include <iostream>
using namespace std;
 
class L {
    L(const &L l) = delete;
};
 
class K {
    static int staticId;
    int id = staticId++;
    L l;
public:
    K() = default;
    K(const K&) {}
    int m(K arg) {
        return arg.id;
    }
};
 
int K::staticId = 1;
int main()
{
    K a;
    K b;
    K c(a);
    cout << a.m(c);
}
</syntaxhighlight>
<div class="abc-list" data-solution="single">
# 1
# 2
# <span class="solution">Program se ne prevodi</span>
# 3
# 4
</div>
Objašnjenje: <span class="spoiler" data-solution="explanation">Nije moguće kopirati klasu K pri prosleđivanju metodi jer njeno polje klase L ne može da se kopira.</span>
 
=== 8. zadatak ===
Šta ispisuje sledeći program na programskom jeziku C++?
<syntaxhighlight lang="cpp">
#include <iostream>
using namespace std;
 
class Klasa {
    static Klasa *napravi()
    {
        cout << 1;
        return new Klasa{0};
    }
    Klasa *clan = napravi();
    public:
        Klasa() { cout << 2; }
        Klasa(int a) : clan(nullptr) { cout << 3; }
};
 
int main() {
    Klasa k;
}
</syntaxhighlight>
Odgovor: <span class="spoiler" data-solution="text">132</span>
 
Objašnjenje: <span class="spoiler" data-solution="explanation">Prvo se pravi člansko polje pozivanjem statičke metode koja ispisuje 1 a onda poziva konstruktor sa argumentom, i posle toga se inicijalizacija završava pozivom podrazumevanog konstruktora.</span>
 
=== 9. zadatak ===
Dopuniti XXX sa linijom tako da je program ispravan:
<syntaxhighlight lang="cpp">
#include <iostream>
 
class A {
        A(const A& a) = delete;
    public:
        int n = 1;
        A() = default;
        A(A&& a) { };
};
 
void f(A a) {
    std::cout << a.n;
}
 
int main(void)
{
    XXX
    return 0;
}
</syntaxhighlight>
<div class="abc-list" data-solution="multiple">
# <code>f();</code>
# <code>A a; f(a);</code>
# <code class="solution">f(A());</code>
# <code>f(A);</code>
</div>
</div>
Objašnjenje: <span class="spoiler" data-solution="explanation">U jedinom tačnom odgovoru se vrednost ne kopira nego premešta.</span>


=== 10. zadatak ===
=== 10. zadatak ===
Zaokružiti tačne tvrdnje vezane za statička polja u klasama na jeziku C++:
Zaokružiti tačne tvrdnje u vezi sa statičkim poljima u klasama na jeziku C++:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# U definiciji klase se mogu definisati promenljiva statička polja.
# U definiciji klase se mogu definisati promenljiva statička polja.
# <span class="solution">Doseg imena statičkog polja je klasa.</span>
# <span class="solution">Doseg imena statičkog polja je klasa.</span>
# Statičkom polju s iz klase K se pristupa koristeći izraz K.s.
# Statičkom polju s iz klase K se pristupa koristeći izraz K.s.
</div>
</div>
[[Категорија:Рокови]]
[[Категорија:ОО1]]

Тренутна верзија на датум 31. јануар 2022. у 21:27

  • За питања са више одговора, тачни одговори су подебљани и уоквирени
  • За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
  • Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:

G1

1. zadatak

Koji je tip promenljive p u sledećem programu:

int main(void) {
    int i = 1;
    const int k = i;
    auto p = new int + k;
    return 0;
}
  1. int
  2. const int
  3. int*
  4. const int*
  5. Program se ne prevodi.

Objašnjenje: Vrednost p će biti pokazivač pomeren za k.

2. zadatak

Šta ispisuje sledeći program na jeziku C++?

#include <iostream>
 
int &f(int &x){
  return ++x;
}

int main(void) {
  std::cout << f(2);
}
  1. 6
  2. 0
  3. Program se ne prevodi.
  4. 5

Objašnjenje: Funkcija prima referencu na lvrednost a 2 je dvrednost.

3. zadatak

Ime simbol predstavlja niz referenci na nepromenljiv pokazivač na int. Kako se deklariše u kodu?

  1. ...
  2. ...
  3. int * const &simbol[]
  4. Deklaracija za simbol se ne prevodi.

?. zadatak

Isti zadatak se našao i na probnom kolokvijumu za IR.

Koje tvrđenje je tačno?

  1. Mehanizam preklapanje[sic] imena funkcija je potpuno statički, koja funkcija će se pozvati određuje se u vreme prevođenja.
  2. Mehanizam preklapanje[sic] imena funkcija je potpuno dinamički, koja funkcija će se pozvati određuje se u vreme izvršavanja.
  3. Mehanizam preklapanje[sic] imena funkcija je potpuno statički, koja funkcija će se pozvati određuje se u vreme izvršavanja.
  4. Mehanizam preklapanje[sic] imena funkcija je potpuno dinamički, koja funkcija će se pozvati određuje se u vreme prevođenja.

?. zadatak

Isti zadatak se našao i na probnom kolokvijumu za IR.

Koja tvrđenja su tačna na programskom jeziku C++?

  1. Metodi int f() & { return 1; } i int f() && { return 3; } mogu postojati u istoj klasi.
  2. Metodi int f() & { return 1; } i int f() const & { return 3; } mogu postojati u istoj klasi.
  3. Metodi int f() & { return 1; } i void f() & { } mogu postojati u istoj klasi.

7. zadatak

Šta ispisuje sledeći program na programskom jeziku C++:

#include <iostream>
using namespace std;

class K {
    static int staticId;
    int id = staticId++;
public: 
    K() = default;
    K(const K&) {}
    int m(K arg) {
        return arg.id;
    }
};

int K::staticId = 1;
int main()
{
    K a;
    K b;
    K c(a);
    cout << a.m(c);
}
  1. 1
  2. 2
  3. 5
  4. 3
  5. 4
  6. Više od 5.

Objašnjenje: Svakom objektu se dodeljuje novi ID pri stvaranju, a poslednji napravljeni objekat pre izvršavanja metode jeste sami argument metode, kopiran prilikom prosleđivanja.

G2

1. zadatak

Zaokružiti tačne tvrdnje u vezi sa referencama na jeziku C++:

  1. Moguće je definisati referencu na pokazivač.
  2. Moguće je definisati niz referenci.
  3. Moguće je definisati referencu na referencu.
  4. Moguće je definisati pokazivač na referencu.

2. zadatak

Šta ispisuje sledeći program na jeziku C++?

#include <iostream>
 
int &f(int &x){
  return x++;
}

int main(void) {
  int x = 5;
  std::cout << f(x);
}
  1. 6
  2. 0
  3. Program se ne prevodi.
  4. 5

Objašnjenje: x++ vraća dvrednost, a ne lvrednost.

4. zadatak

Povezati tvrdnje u vezi sa modifikatorima metoda:

Modifikatori
  1. volatile b
  2. const e
  3. & g
  4. && f
  1. Metoda se može zvati samo ako je tekući objekat pokazivač.
  2. Oznaka kompajleru da ne vrši optimizacije.
  3. Oznaka kompajleru da vrši optimizacije.
  4. Metoda je mutator.
  5. Metoda je inspektor.
  6. Metoda se može zvati samo ako je tekući objekat dvrednost.
  7. Metoda se može zvati samo ako je tekući objekat lvrednost.
  8. Metoda se može zvati samo ako je tekući objekat konstantan.

5. zadatak

Zaokružiti tačne tvrdnje u vezi sa pomerajućim konstruktorom na jeziku C++:

  1. Definisanjem podrazumevanog konstruktora briše se ugrađeni premeštajući konstruktor.
  2. Definisanjem kopirajućeg konstruktora briše se ugrađeni premeštajući konstruktor.
  3. Pomerajući konstruktor mora da ima samo jedan parametar.

6. zadatak

Zaokružiti tačne tvrdnje u vezi sa funkcijama na jeziku C++:

  1. Mogu se definisati više funkcija istog imena ako imaju različiti broj parametara bez podrazumevanih vrednosti.
  2. Mogu se definisati više funkcija istog imena ako su im različite povratne vrednosti.
  3. Ne mogu se definisati više funkcija istog imena, jer kompajler ne bi mogao da ih raspozna.
  4. Mogu se definisati više funkcija istog imena ako imaju različite tipove parametara.

7. zadatak

Šta ispisuje sledeći program na programskom jeziku C++:

#include <iostream>
using namespace std;

class L {
    L(const &L l) = delete;
};

class K {
    static int staticId;
    int id = staticId++;
    L l;
public: 
    K() = default;
    K(const K&) {}
    int m(K arg) {
        return arg.id;
    }
};

int K::staticId = 1;
int main()
{
    K a;
    K b;
    K c(a);
    cout << a.m(c);
}
  1. 1
  2. 2
  3. Program se ne prevodi
  4. 3
  5. 4

Objašnjenje: Nije moguće kopirati klasu K pri prosleđivanju metodi jer njeno polje klase L ne može da se kopira.

8. zadatak

Šta ispisuje sledeći program na programskom jeziku C++?

#include <iostream>
using namespace std;

class Klasa {
    static Klasa *napravi()
    {
        cout << 1;
        return new Klasa{0};
    }
    Klasa *clan = napravi();
    public:
        Klasa() { cout << 2; }
        Klasa(int a) : clan(nullptr) { cout << 3; }
};

int main() {
    Klasa k;
}

Odgovor: 132

Objašnjenje: Prvo se pravi člansko polje pozivanjem statičke metode koja ispisuje 1 a onda poziva konstruktor sa argumentom, i posle toga se inicijalizacija završava pozivom podrazumevanog konstruktora.

9. zadatak

Dopuniti XXX sa linijom tako da je program ispravan:

#include <iostream>

class A {
        A(const A& a) = delete;
    public:
        int n = 1;
        A() = default;
        A(A&& a) { };
};

void f(A a) {
    std::cout << a.n;
}

int main(void)
{
    XXX
    return 0;
}
  1. f();
  2. A a; f(a);
  3. f(A());
  4. f(A);

Objašnjenje: U jedinom tačnom odgovoru se vrednost ne kopira nego premešta.

10. zadatak

Zaokružiti tačne tvrdnje u vezi sa statičkim poljima u klasama na jeziku C++:

  1. U definiciji klase se mogu definisati promenljiva statička polja.
  2. Doseg imena statičkog polja je klasa.
  3. Statičkom polju s iz klase K se pristupa koristeći izraz K.s.