Nenad Božidarević
Januar 2011.

Kalkulator kompleksnih izraza

Ovaj tekst je više pojašnjenje načina rada klase nego uputstvo za njeno pravljenje. Iz tog razloga bi bilo pametno prvo skinuti klasu i pratiti njen kôd uporedo sa čitanjem teksta.

Za jedan od projekata na fakultetu, iz predmeta Objektno-orijentisano programiranje, odlučio sam da uradim program za iscrtavanje grafika. Već sam se bavio ovim problemom, ali tri godine ranije, i to u Delphiju, pa sam ovaj put ozbiljnije prišao problemu koji je trebalo da realizujem u Javi.

Program je bio veoma jednostavan:

  • korisnik unese matematički izraz u kome figuriše promenljiva x
  • korisnik ručno unese granice za X i Y osu, odnosno odredi deo grafika koji želi da se prikaže (verovatno najveća mana programa)
  • grafik se iscrta

Sam GUI je realizovan uz pomoć Swinga, ali u to neću zalaziti. Ovde ću prikazati klasu za računanje (relativno) kompleksnih matematičkih izraza (doduše, ne na nivou Wolframa, pa ni kalkulatora koji dolazi uz Ubuntu) koja vuče korene iz tog projekta – pruža neke dodatne mogućnosti, ali bez iscrtavanja grafika (samim tim i bez promenljivih), pa je za demonstraciju njenih mogućnosti dovoljna konzolna aplikacija.

Pročitaj ostatak teksta

Borba sa Internet Explorerom

Ne mogu da kažem da sam se dovoljno bavio web sajtovima da bih bio HTML/CSS ekspert, iako to traje već nekoliko godina. Ali, ono što mogu da kažem jeste da sam se tokom tih nekoliko godina susreo sa previše problema, odnosno bagova. A ko drugi da bude kriv za to nego Internet Explorer.

Kada sam tek počinjao da se bavim ovim, XP je bio aktuelni Windows, i zajedno sa njim šesta verzija Internet Explorera. Otelotvorenje samoga đavola (ili Đavola?). Koliko god ja taj pretraživač želeo da potisnem, ostaje činjenica da se on i dalje koristi, kod nas verovatno i više nego u svetu, baš zbog te rasprostranjenosti Windowsa XP, pa zbog toga ne smem da ga zanemarim tokom razvoja nekog sajta.

Ovaj moj blog nije nikakav izuzetak. Proveo sam nekoliko nedelja radeći na HTML i CSS kôdu, pritom proveravajući njegov izgled samo u Firefoxu, pošto mi na Linuxu Internet Explorer i nije dostupan. Poučen pređašnjim iskustvom, znao sam na šta da obratim pažnju da ne bih posle morao da se patim ispravljajući greške, kao što sam znao da će sajt sigurno u redu izgledati u Operi, Chromu i Safariju ako ga sredim u Firefoxu.

I kao što sam znao da u Internet Exploreru neće. Pri samom kraju “dizajniranja” (ne smatram se dizajnerom, jer ni nemam oko za to) digao sam XP u virtuelnoj mašini, instalirao sve pretraživače, otvorio IE6, i… Pokušao da shvatim zašto se delovi teksta nalaze na najnelogičnijim mogućim mestima.

Pročitaj ostatak teksta

Rad sa velikim brojevima u C++u (1. deo)

Ovo je prvi u seriji tutoriala iz programiranja čiji cilj nije da u potpunosti i bez greške obrade neku tematiku, već da programera uvedu u određen način razmišljanja koji je potreban za rešavanje dotičnog problema. Osnovno poznavanje programskog jezika se podrazumeva. Ostale tutoriale možete naći pretragom po odgovarajućem tagu.

U najrasprostranjenijim programskim jezicima rad sa celim brojevima je ograničen kako arhitekturom računara, tako i samim jezikom. Jedan od najčešćih problema sa ovim jeste maksimalna vrednost koju možemo sačuvati u memoriji kada radimo sa celim brojevima. Uzevši u obzir rasprostranjenost 64-bitnih arhitektura, može se slobodno reći da je raspon koji ceo broj može da pokrije od 9.223.372.036.854.775.808 do 9.223.372.036.854.775.807 kada se radi sa negativnim brojevima, odnosno od 0 do 18.446.744.073.709.551.615 kada se radi samo sa pozitivnim – tačnije, 264 različitih brojeva.

Korišćenjem floating-point brojeva mogu se zapisati i veće vrednosti, ali ovaj format, zbog načina čuvanja u memoriji, ne pokriva ravnomerno skup brojeva, pa se neke vrednosti ni ne mogu zapisati, a u svakom slučaju ne mogu da se predstave apsolutno svi celi brojevi. Iz tog razloga ovo nećemo razmatrati kao rešenje.

U većini slučajeva, 264 vrednosti je sasvim dovoljno, ali čim se dođe do nekih ozbiljnijih primena i operacija nad velikim podacima, svi osnovni tipovi podataka su neupotrebljivi. Međutim, ono što se može uraditi jeste čuvati brojeve kao niz (decimalnih) cifara – najjednostavnije, ali i čoveku najprirodnije rešenje. Oni koji programiraju u Javi sigurno znaju da ovaj jezik već ima klasu BigInteger za rad sa velikim brojevima, a na Internetu postoji mnogo klasa i za druge jezike koje su sigurno bolje od ove. Međutim, kao što sam naveo na početku teksta, ja vas samo uvodim u problem i pružam osnovnu ideju. Na vama je da je posle bolje istražite, razradite i usavršite. S obzirom da se ne smatram stručnjakom svi predlozi za unapređenje kôda su dobrodošli.

Pročitaj ostatak teksta

Re-Volt i Windows 7

Prvi, svečani tekst na blogu… Žao mi je, ništa od fanfare-a.

Da bih probio led, odnosno writer’s block, odlučio sam da za prvi tekst iskoristim tekst sa mog prethodnog bloga, i to jedini koji je uopšte privukao neku pažnju. Možda ovde neće biti zainteresovanih, ali mi je pomalo žao da gledam početnu stranu ovako praznu…

Već neko vreme na svoj računar nisam instalirao nijednu igru, pa me je zbog toga odjednom zahvatila nostalgija. Da bih je se otarasio, počeo sam da preturam po svojoj višegodišnjoj gomili diskova – naravno, nakon što sam je izvukao i obrisao (isto tako višegodišnju) prašinu – i naleteo na, u mojim očima, stari klasik koji kao da nije dobio dovoljno pažnje u Srbiji. Re-Volt.

Nekim čudom, CD je i dalje radio, i bez problema sam odradio instalaciju na Windowsu 7, ali sam kod pokretanja igre naleteo na problem: Can’t flip display buffers i iskakanje na desktop. Naravno, u pitanju je problem oko kompatibilnosti sa Windowsom 7 i Vistom, s obzirom da je igra iz 1999. godine, ali se lako rešava.

  1. Nakon instalacije, potrebno je odraditi update igre na verziju 1.207 (fajlove je potrebno prekopirati u folder sa igrom)
  2. Napraviti shortcut za pokretanje igre na desktopu
  3. Izmeniti podešavanja za shortcut, i to:
    • dodati -sli u Destination, posle putanje do fajla
    • pod Compatibility tabom izabrati Windows 98 i Run as administrator
  4. Pokrenuti igru, koja će sada verovatno da radi