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

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
м (Objašnjenja)
 
(Није приказано 6 међуизмена 2 корисника)
Ред 1: Ред 1:
{{tocright}}
{{tocright}}
* Za pitanja sa više odgovora, tačni odgovori su <span class="solution-example">podebljani i uokvireni</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 sakrili ili otkrili: <span class="unhide-spoilers unhide-solutions"></span>


== G1 ==
== G1 ==
Ред 15: Ред 13:
}
}
</syntaxhighlight>
</syntaxhighlight>
<div class="abc-list" data-solution="single">
# <code>int</code>
# <code>int</code>
# <code>const int</code>
# <code>const int</code>
# <span class="solution"><code>int*</code></span>
# <code class="solution">int*</code>
# <code>const int*</code>
# <code>const int*</code>
# Program se ne prevodi.
# 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 ===
=== 2. zadatak ===
Ред 34: Ред 35:
}
}
</syntaxhighlight>
</syntaxhighlight>
<div class="abc-list">
<div class="abc-list" data-solution="single">
# 6
# 6
# 0
# 0
Ред 40: Ред 41:
# 5
# 5
</div>
</div>
Objašnjenje: <span class="spoiler" data-solution="explanation">Funkcija prima referencu na lvrednost a 2 je dvrednost.</span>


=== 3. zadatak ===
=== 3. zadatak ===
Ime simbol predstavlja niz referenci na nepromenljiv pokazivač na int. Kako se deklariše u kodu?
Ime simbol predstavlja niz referenci na nepromenljiv pokazivač na int. Kako se deklariše u kodu?
<div class="abc-list">
<div class="abc-list" data-solution="single">
# ...
# ...
# ...
# ...
Ред 51: Ред 53:


=== ?. zadatak ===
=== ?. zadatak ===
Zaokružiti tačna tvrđenja u vezi sa preklapanjem imena funkcija na jeziku C++:
: ''Isti zadatak se našao i na [[ОО1/Пробни тестови 2020#3. zadatak 3|probnom kolokvijumu za IR]].''
<div class="abc-list">
Koje tvrđenje je tačno?
# <span class="solution">Kada dve funkcije imaju isti naziv, statički tokom prevođenja programa se određuje koja funkcija će biti pozvana.</span>
<div class="abc-list" data-solution="single">
# Kada dve funkcije imaju isti naziv, dinamički tokom izvršenja programa se određuje koja funkcija će biti pozvana.
# <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>
# Kada dve funkcije imaju isti naziv, statički tokom izvršenja programa se određuje koja funkcija će biti pozvana.
# Mehanizam preklapanje<sup>[sic]</sup> imena funkcija je potpuno dinamički, koja funkcija će se pozvati određuje se u vreme izvršavanja.
# Kada dve funkcije imaju isti naziv, dinamički tokom prevođenja programa se određuje koja funkcija će biti pozvana.
# 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>
</div>


=== ?. zadatak ===
=== ?. zadatak ===
Koje od navedenih parova potpisa funkcija mogu postojati u istom programu, a da prevodilac ne prijavljuje grešku?
: ''Isti zadatak se našao i na [[ОО1/Пробни тестови 2020#4. zadatak 3|probnom kolokvijumu za IR]].''
<div class="abc-list">
Koja tvrđenja su tačna na programskom jeziku C++?
# <span class="solution"><code> int & f(int i, int j);</code> i <code> int && f(int i, int j); </code></span>
<div class="abc-list" data-solution="multiple">
# <span class="solution"><code> int const f(int i, int j);</code> i <code> int f(int i, int j); </code></span>
# <span class="solution">Metodi <code>int f() & { return 1; }</code> i <code>int f() && { return 3; }</code> mogu postojati u istoj klasi.</span>
# <code> float volatile f(int i, int j);</code> i <code> int volatile f(int i, int j); </code>
# <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>
</div>


Ред 93: Ред 97:
}
}
</syntaxhighlight>
</syntaxhighlight>
<div class="abc-list">
<div class="abc-list" data-solution="single">
# 1
# 1
# 2
# 2
Ред 101: Ред 105:
# Više od 5.
# Više od 5.
</div>
</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 u vezi sa referencama 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.
Ред 126: Ред 131:
}
}
</syntaxhighlight>
</syntaxhighlight>
<div class="abc-list">
<div class="abc-list" data-solution="single">
# 6
# 6
# 0
# 0
Ред 132: Ред 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 ===
Ред 138: Ред 144:
|+ 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č.
Ред 159: Ред 165:
=== 5. zadatak ===
=== 5. zadatak ===
Zaokružiti tačne tvrdnje u vezi sa pomerajućim konstruktorom 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.
# 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>
Ред 167: Ред 173:
=== 6. zadatak ===
=== 6. zadatak ===
Zaokružiti tačne tvrdnje u vezi sa funkcijama 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.
Ред 205: Ред 211:
}
}
</syntaxhighlight>
</syntaxhighlight>
<div class="abc-list">
<div class="abc-list" data-solution="single">
# 1
# 1
# 2
# 2
Ред 212: Ред 218:
# 4
# 4
</div>
</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 ===
=== 8. zadatak ===
Ред 235: Ред 242:
}
}
</syntaxhighlight>
</syntaxhighlight>
Odgovor: <span class="spoiler">132</span>
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 ===
=== 9. zadatak ===
Ред 260: Ред 269:
}
}
</syntaxhighlight>
</syntaxhighlight>
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <code> f(); </code>  
# <code>f();</code>
# <code> A a; f(a); </code>  
# <code>A a; f(a);</code>
# <span class="solution"> <code>f(A()); </code> </span>
# <code class="solution">f(A());</code>
# <code>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 u vezi sa statičkim poljima 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>

Тренутна верзија на датум 31. јануар 2022. у 22: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.