[QGHG-it-dev-list] Zadatak 43 - implementacija klase polucelih brojeva

Marko Vojinovic vmarko at ipb.ac.rs
Mon Jun 22 00:24:13 CEST 2026


Implementirati klasu "Halfint" za manipulaciju polucelim brojevima, kojima se tipicno opisuju spinovi elementarnih cestica i njihove projekcije na z-osu...

Konkretno, objekt klase Halfint treba da bude broj tipa 0, 1/2, 1, 3/2, 2, 5/2, itd. Broj moze da bude i negativan, -1/2, -1, -3/2, itd. Najbolje je pamtiti ga u integer obliku, koji je duplo veci --- Halfint broj hn koji je celobrojan se pamti kao integer broj 2*hn, dok se Halfint broj hn koji je polucelobrojan pamti kao integer broj 2*hn + 1. Drugim recima, Halfint broj je zapravo int koji je bit-shift-ovan za jedan bit navise, tako da stanje najnizeg bita moze da se iskoristi da pamti "polovinu" ukoliko ova postoji.

Klasa treba da sadrzi konstruktore koji ce zadate int i double vrednosti da pretvara u Halfint (uz proveru da double ima polucelobrojnu vrednost). Ukoliko je moguce, bilo bi dobro overload-ovati i assignment operator "=" tako da mozemo u kodu da napisemo nesto tipa

   Halfint hn = -3.5;  Halfint hk = 17;

i da ovo automatski pozove odgovarajuci konstruktor i bude interpretirano kako ocekujemo.

Klasa treba takodje da sadrzi implementaciju svih relevantnih aritmetickih operacija (sabiranje, oduzimanje, mnozenje, celobrojno deljenje, celobrojni ostatak, inkrement za jedan, dekrement za jedan), kao i neke nove koje su prirodne (inkrement za pola, dekrement za pola, polucelobrojno deljenje, polucelobrojni ostatak). Postojece aritmeticke operacije treba overload-ovati, uz odgovarajuci casting int u Halfint, i eventualni casting Halfint u double. Takodje treba implementirati relacije poretka (strogo manje, manje-jednako, jednako, razlicito, vece-jednako, strogo vece), takodje overload-ovanjem postojecih operatora.

Ideja je da sve sto tipicno radimo sa int brojevima mozemo transparentno da radimo i sa Halfint brojevima, u onoj meri u kojoj to ima smisla (npr. bit-shift operacije nemaju smisla u kontekstu Halfint brojeva). Pre svega ce nam trebati raznorazne for-petlje, na primer

   for( Halfint hn = 0, hn < 5.5, hn++ ){...} ,   for( Halfint hn = -3.5, hn <= 0, hn.half_increment() ){...}

i slicno. Ideja je da ovu klasu kasnije dopunjujemo novim metodima, kao i overload-ovanjem postojecih, kako se kad za sta ukaze potreba.

Celu klasu i njene metode implementirati u nove fajlove halfint.hpp i halfint.cpp, koji ce da stoje u odgovarajucim include i src direktorijumima biblioteke.

Unutar triangulator/test/ putanje dodati novi fajl halfint_test.cpp, koji ce da izlista u petlji sve polucele brojeve od -10 do 10, zatim da testira sve aritmeticke operacije i relacije odozgo, i da ispise rezultate na stdout. I ovaj fajl cemo kasnije da dopunjujemo novim testovima, kako budemo dodavali nove metode u klasu.

Ukoliko imate bilo kakva pitanja ili sugestije vezane za ovaj zadatak, slobodno se javite.

:-)
Marko

P.S. Uskoro stizu i zadaci u kojima ce ova klasa masovno da se primenjuje, ali ti zadaci moraju da se resavaju redom, jer se svaki naslanja na resenje prethodnih...


Dr. Marko Vojinovic
Group for Gravitation, Particles and Fields
Institute of Physics
University of Belgrade
======================
home page: www.markovojinovic.com
e-mail:    vmarko at ipb.ac.rs




More information about the QGHG-it-dev-list mailing list