ОО1/Септембар 1 2025 — разлика између измена
м (→Решење) |
м (→Решење) |
||
| (6 међуизмена истог корисника није приказано) | |||
| Ред 1: | Ред 1: | ||
{{tocright}} | {{tocright}} | ||
'''Испит у септембарском 1 року 2025. године''' одржан је 18. септембра и трајао је 90 минута. Сваки задатак носи по 5 поена. | |||
''' | |||
== 1. задатак == | == 1. задатак == | ||
=== Поставка === | === Поставка === | ||
У неком прoграму обpaђуje се више инстанци бинарниx стабала коjа се састоjе од чворова у коjима су одређени подаци. Клијенти обраду траже за дато стабло. Постоjи више различитик врста обрада коjе се, између осталог, састоjе и од различитих редоследа обиласка стабла (preorder, inorder, postorder), при чему се у будућности могу додавати нови начини обраде. Начин обраде може се конфигурисати за сваку поjединачну инстанцу стабла. Осмислии класе, њихове атрибуте и релациjе и распоредити одговорности по тим класамa. | |||
=== Решење === | === Решење === | ||
| Ред 23: | Ред 22: | ||
=== Решење === | === Решење === | ||
template <typename T> | |||
class ListElem { | |||
private: | |||
T t; | |||
ListElem* next; | |||
public: | |||
ListElem(T tt){ | |||
next = nullptr; | |||
t = tt; | |||
} | |||
void linkToPrev(ListElem* prev){ | |||
next = prev->next; | |||
prev->next = this; | |||
} | |||
... | |||
} | |||
== 3. задатак == | == 3. задатак == | ||
=== Поставка === | === Поставка === | ||
Прецизно објаснити шта је проблем у следећем делу програма: | |||
char* readln () { | |||
static char buffer [256]; | |||
int ch getchar(), i = 0; | |||
while (ch!=EOF && ch!='\n') { | |||
buffer[i++]=ch; | |||
ch = getchar(); | |||
} | |||
buffer[i]='\0'; | |||
return buffer; | |||
} | |||
=== Решење === | === Решење === | ||
Може се десити индексирање ван домена. | |||
== 4. задатак == | == 4. задатак == | ||
=== Поставка === | === Поставка === | ||
| Ред 37: | Ред 63: | ||
=== Решење === | === Решење === | ||
(*x)++; | (*x)++; | ||
y++ | y++; | ||
(*z)++; | (*z)++; | ||
== 5. задатак == | == 5. задатак == | ||
=== Поставка === | === Поставка === | ||
Класу X опремити декларацијама (не и дефиницијама) подразумеваног конструктора, конструктора копије, оператора доделе копирањем, оператора доделе премештањем и виртуелног деструктора. | |||
=== Решење === | === Решење === | ||
class X{ | |||
public: | |||
X() = default(); | |||
X(const X&); | |||
X& operator =(const X&); | |||
X& operator =(X&&); | |||
virtual ~X(); | |||
} | |||
== 6. задатак == | == 6. задатак == | ||
=== Поставка === | === Поставка === | ||
Класу X опремити оператором конверзије X* која може радити и имплицитно, тако да враћа показивач на објекат те класе који се конвертује. Кратким примером илустровати употребу ове конверзије. | |||
=== Решење === | === Решење === | ||
class X{ | |||
private: | |||
int val; | |||
public: | |||
X(int v=0): val(v){} | |||
operator X*(){ | |||
return this; | |||
} | |||
void print(){ | |||
cout<<val; | |||
} | |||
} | |||
int main(){ | |||
X x = new X(5); | |||
X* px = x; | |||
pc->print(); | |||
return 0; | |||
} | |||
[[Категорија:Рокови]] | [[Категорија:Рокови]] | ||
[[Категорија:OO1]] | [[Категорија:OO1]] | ||
Тренутна верзија на датум 28. септембар 2025. у 20:26
Испит у септембарском 1 року 2025. године одржан је 18. септембра и трајао је 90 минута. Сваки задатак носи по 5 поена.
1. задатак
Поставка
У неком прoграму обpaђуje се више инстанци бинарниx стабала коjа се састоjе од чворова у коjима су одређени подаци. Клијенти обраду траже за дато стабло. Постоjи више различитик врста обрада коjе се, између осталог, састоjе и од различитих редоследа обиласка стабла (preorder, inorder, postorder), при чему се у будућности могу додавати нови начини обраде. Начин обраде може се конфигурисати за сваку поjединачну инстанцу стабла. Осмислии класе, њихове атрибуте и релациjе и распоредити одговорности по тим класамa.
Решење
2. задатак
Поставка
Приказати како би следећи део програма био имплементиран на језику C++.
typedef struct {
ListElem* next;
T t;
} ListElem;
void ListElem_init (ListElem* e, T t) { e->next=0; e->t=t; }
void ListElem_linkToPrev (ListElem* e, ListElem* prev) {
if (prev) { e->next = prev->next; prev->next = e; }
}
Решење
template <typename T>
class ListElem {
private:
T t;
ListElem* next;
public:
ListElem(T tt){
next = nullptr;
t = tt;
}
void linkToPrev(ListElem* prev){
next = prev->next;
prev->next = this;
}
...
}
3. задатак
Поставка
Прецизно објаснити шта је проблем у следећем делу програма:
char* readln () {
static char buffer [256];
int ch getchar(), i = 0;
while (ch!=EOF && ch!='\n') {
buffer[i++]=ch;
ch = getchar();
}
buffer[i]='\0';
return buffer;
}
Решење
Може се десити индексирање ван домена.
4. задатак
Поставка
Написати изразе којима се целобројна променљива i увећаваза 1 посредством варијабли x, y и z респективно.
int i=0, *x=&i, &y=i, *&z=x;
Решење
(*x)++; y++; (*z)++;
5. задатак
Поставка
Класу X опремити декларацијама (не и дефиницијама) подразумеваног конструктора, конструктора копије, оператора доделе копирањем, оператора доделе премештањем и виртуелног деструктора.
Решење
class X{
public:
X() = default();
X(const X&);
X& operator =(const X&);
X& operator =(X&&);
virtual ~X();
}
6. задатак
Поставка
Класу X опремити оператором конверзије X* која може радити и имплицитно, тако да враћа показивач на објекат те класе који се конвертује. Кратким примером илустровати употребу ове конверзије.
Решење
class X{
private:
int val;
public:
X(int v=0): val(v){}
operator X*(){
return this;
}
void print(){
cout<<val;
}
}
int main(){
X x = new X(5);
X* px = x;
pc->print();
return 0;
}