Садржај

Статички полиморфизам, оператори - питања и задаци

Истоимени методи

  • Класа String има мноштво метода који се појављују у више облика, тј. могу да се позивају на различите начине. Покушајте да се сетите неколико примера.

  • Да ли знате неке примере два или више истоимених метода у некој другој класи из стандардне библиотеке?

  • Наведите примере класе која има више конструктора. Пошто су конструктори једне класе увек истоимени, ово је такође вид статичког полиморфизма.

1. Извлачење бројева

Написати класу Bubanj према опису који следи. Класа треба да симулира случајан избор једног или више бројева из неког скупа, као у играма на срећу.

Класа има следеће јавне методе и својства:

  • Конструктор класе, који прихвата један позитиван цео број n. Овај број представља величину скупа, односно број куглица које се на почетку налазе у бубњу. Куглице су означене бројевима од 1 до n. На пример, објекат генерисан помоћу Bubanj(5) може касније да врати бројеве од 1 до 5.

  • Метод Prazan без аргумената, који враћа логичку вредност. Метод Prazan враћа вреднсот true ако је из симулираног бубња већ извучено свих n куглица, тј. ако је до тренутка позива тог метода враћено укупно n бројева у позивима метода Izvuci (видети ниже).

  • Целобројно својство BrojKuglica, само за читање. Вредност овог својства представља број куглица које се још увек налазе у симулираном бубњу.

  • Метод Izvuci без аргумената, који враћа један од бројева који до тада нису враћени као резултат неког од метода Izvuci, тј. један од оних бројева који су и даље у бубњу.

  • Метод Izvuci са једним целобројним аргументом k, који враћа низ од k бројева који до тада нису враћени као резултат неког од метода Izvuci, тј. низ од неких k бројева који нису били извучени до тада.

Бројеви које враћају методи Izvuci се бирају на случајан начин, тако да сви бројеви који су још у игри имају једнаке шансе да буду извучени (у складу са квалитетом генератора случајних бројева). Ако при позиву неког од метода Izvuci нема довољно куглица у бубњу, метод треба да баци изузетак.

Класа треба да буде написана тако да следећи кôд може да се изврши.

Извршавањем датог кôда треба да се добијe резултат попут овог (извучени бројеви зависе од генератора случајних бројева, битно је само да се појаве сви бројеви од 1 до 5, сваки по једном):

Izvucen je broj 1
False
Broj preostalih kuglica: 4
Izvuceni su brojevi 3 5 4
Izvucen je broj 2
True
Broj preostalih kuglica: 0

Оператори

2. Време и оператори

Проширити класу Vreme са странице Енкапсулација - задаци следећим операторима.

  • Оператор који израчунава разлику два времена и враћага као цео број секунди.

  • Оператор који израчунава збир времена и броја секунди и враћа нови објекат типа Vreme.

Након имплементације ових оператора сабирања и одузимања, следећи кôд треба да се компајлира без грешака и извршава (програм треба да испише 3724, а затим 02:17:11).

Vreme t1 = new Vreme(1, 15, 7);
Vreme t2 = new Vreme(2, 17, 11);

int dt = t2 - t1;
Console.WriteLine(dt);

Vreme t3 = t1 + dt;
Console.WriteLine(t3);

1. Искористите ово проширење класе за ново решење задатка Чекање, тако да се у решењу користи одузимање објеката класе Vreme.

2. Приметимо да запис Vreme t3 = dt + t1; није синтаксно исправан (не може да се компајлира). Објасните зашто се добија синтаксна грешка и шта би требало урадити да би овакав запис постао синтаксно исправан.

3. Комплексни бројеви

У именском простору System.Numerics; стандардне библиотеке дефинисана је структура Complex, која имплементира комплексне бројеве. Ова структура има дефинисане бинарне оператроре +, -, *, /, унарни минус, као и метод ToString, тако да је њена употреба природна и једноставна.

Написати класу KompleksanВrој са што сличнијим особинама. Ова класа треба да омогући четири основне рачунске радње над објектима класе, као и између објеката класе и реалних променљивих.

Напомена: класа KompleksanВrој се тражи само ради увежбавања писања оператора. За практичну употребу препоручујемо да користите готову структуру кад год је могуће.

4. Велики бројеви

У именском простору System.Numerics; стандардне библиотеке, дефинисана је структура BigInteger, која имплементира велике целе бројеве. И ова структура се лако и природно користи захваљујући дефинисаним операторима и методу ToString (видети претходни задатак).

Мада вам за практичну употребу и овде препоручујемо да користите готову структуру кад год је могуће, у овом задатку треба, вежбе ради, да напишете класу VelikiCeoВрој са што сличнијим особинама. Ова класа треба да омогући унарни минус, сабирање, одузимање, множење и дељење објеката класе, као и између објеката класе и целобројних променљивих.

5. Линеарне функције

Написати класу LinFun, која представља линерану функцију.

Класа треба да има јавни метод double Value(double x), који враћа вредност функције за дато x. Поред тога, класа треба да омогући сабирање и одузимање линеарних функција, као и множење линеарне функције реалним бројем (резултат је у сва три случаја нова линеарна функција).

Имплементирати и статички метод LinFun Compose(LinFun a, LinFun b). Резултат извршавања овог статичког метода је нови објекат, тј. нова линеарна функција \(c\), дефинисана са \(c(x) = a(b(x)), x \in R\).


Класа треба да буде написана тако да следећи кôд може да се изврши.

Извршавањем датог кôда треба да се добијe следећи резултат:

f3(0) = 8, f4(0) = 13
f3(1) = 13, f4(1) = 19
f3(2) = 18, f4(2) = 25
f3(3) = 23, f4(3) = 31
(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+