Znanstveni kalkulator za mobilne uređaje Igor Bedek Sandra Bartoloti Luka Horvat Vedran Šikić
Ideja Napraviti
kalkulator za mobitele koji će moći konkurirati komercijalnim kalkulatorima Implementirati parsiranje složenih matematičkih izraza Implementirati naprednije matematičke operacije
Zahtjevi mobilnost
kalkulatora standardno korisničko sučelje algebarske funkcije logaritamske i eksponencijalne funkcije trigonometrijske i area (arcus) funkcije rad u radijanima i stupnjevima mogućnost parcijalne korekcije unesenog izraza
rad s matricama kompleksnih brojeva unos matrica po uzoru na MATLAB rad sa jednom ili dvije matrice množenje, dijeljenje (direktno množenje sa inverzom), zbrajanje, oduzimanje matrica, te traženje determinante, inverza i transponirane matrice zoran prikaz rezultata korisniku (u granicama koje veličina ekrana mobitela dopušta) Mogućnost parcijalne korekcije unesene matrice rad s bazama brojevnih sustava rad s 4 najčešće korištene brojevne baze (binarna, oktalna, dekadska, heksadekadska) lak i brz odabir početne brojevne baze sustava što veći raspon(zbog binarnog zapisa)
Analiza problema
Aplikacija ima 3 glavna dijela – „standardne” matematičke operacije, rad sa matricama i rad sa brojevnim sustavima Svaki dio ima svoje grafičko sučelje Zbog složenosti – program je podijeljen na nekoliko logičkih cjelina
UI dizajn Parser (za matematičke izraze) Matrice Kompleksni brojevi Brojevni sustavi Funkcije za reagiranje na događaje (povezivanje svih dijelova aplikacije
Podjela posla
Grafičko sučelje – Igor Bedek Klase za rad sa matricama, kompleksnim brojevima i brojevnim sustavima – Vedran Šikić Računanje matematičkih izraza, izlazne funkcije za prikaz podataka, povezivanje svih ostalih funkcija sa grafičkim sučeljem – Luka Horvat Dokumentacija i prezentacija na temelju dobivenih podataka – Sandra Bartoloti
Use-case dijagram sustava
Korištene tehnologije C++
- jezgra programa Qt – korisničko sučelje Symbian simulator – testiranje Mobilni telefon – testiranje u prirodnom okruženju
implementacija
ako je kliknuta brojka ili operator standardnog (computation) načina rada dodaj ga u izraz ako je kliknuto dugme "=" pozovi funkciju za evaluacija unesenog izraza te prikaži rezultat ukoliko je izraz ispravan, ukoliko nije ispiši grešku evaluiraj ukoliko se klikne dugme drugog moda rada, promjeni mod rada u zadani ako je kliknut operator u matrix ili base nacinu rada, evaluira se izraz te se izvršava zadana operacija ukoliko je izraz ispravan help i about dugmeta prikazuju relevantne informacije o digitronu
Kompleksni brojevi
klasa koja definira kompleksni broj imati 4 varijable koje predstavljaju podatke kompleksnog broja – realni, imaginarni, amplituda i faza algoritam PretvoriStringUKompleksni (text) x=unesi_i_pretvori_u_broj_znamenke_u_nizu(tex t) Ako jetexti = "+" ILI ako je texti="-" onda | realni=x | imaginarni=unesi_i_pretvori_u_broj_znamenke_u _nizu(text) inače ako postoji "j" u nizu (text) | imaginarni=x | realni=0 inače | realni=x | imaginarni=0 vrati kompleksni_broj
Matrice Svaka
matrica ima svoje dimenzije Definirane su funkcije za rad sa 2 matrice
Zbrajanje i oduzimanje Množenje
Funkcije
nad jednom matricom
Množenje skalarom Računanje determinante Transponiranje inverz
Računanje determinante matrice algoritam RacunajDeterminantu(A) Ako jedimx(A)=1 onda | rjesenje=A1,1
u suprotnom | Za svaki j=1 do dimx(A) | | Ako je i=neparan onda | | | rjesenje=rjesenje+A1,j∙RacunajDeterminantu | | |
| | |
| u suprotnom |
(RacunajPodmatricu(A,1,j)) rjesenje=rjesenje-A1,j∙RacunajDeterminantu
| | | vratirjesenje algoritamRacunajPodmatricu(A,x,y) k=1 dimx(B)=dimx(A)-1 dimy(B)=dimy(A)-1 Za svaki i=1 dodimx(A) | Za svaki j=1 dodimy(A) | | Ako je i ≠ x Iako je j≠onda | | | m=k / dimx | | | n=k moddimy | | | Bm,n=Ai,j | | vrati B
|
povećaj k za 1
(RacunajPodmatricu(A,1,j))
Brojevne baze
Veza između raznih brojevnih sustava je spremljena kao dekadska vrijednost broja u cjelobrojnom obliku long zbog veće preciznosti Svaki podatak koji korisnik unese ima još podatak o bazi u kojoj se nalazi (binarnoj, oktalnoj, dekadskoj ili heksadekadskoj) i vrijednost u obliku u toj bazi spremljenu u obliku stringa Potrebno je definirati algoritme za računanje dekadske vrijednosti nekog broja iz primljenog stringa i za računanje stringa iz dekadske vrijednosti
Grafičko sučelje U
potpunosti izrađeno u Qt frameworku
Parsiranje mat. izraza Parsiranje
u RP notaciji pomoću dva
stoga Rješavanje složenih matematičkih izraza kao što su
Zbrajanje, oduzimanje, množenje, dijeljenje Rad sa zagradama Trigonometrijske funkcije Logaritam, eksponencijalna funkcija, potencija, korjen
Kontrola
grešaka
Matrice
Baza Podržane
su pretvorbe između brojevnih sustava Za pretvorbe, dovoljno je kliknuti na početnu bazu, unijeti zadani broj, te kliknuti na bilo koju drugu bazu
Testiranje U
laboratoriju pomoću MATLAB-a provjereni su rezultati dobiveni testiranjem Izvan fakulteta, pomoću web-aplikacije „WolframAplha” također su provjereni rezultati Nakon simulatora, kreirana je instalacijska datoteka, te je kalkulator instaliran na dva Nokia telefona sa različitim operacijskim sustavima – 5800XM i C7
Sustav pomoći U
aplikaciju je ugrađen i kratki sustav pomoći, a dostupan je i ovdje Video sa prikazom korištenja kalkulatora na hrvatskom jeziku se može naći ovdje: PowerCalculator
Dokumentacija Unutar
aplikacije, sustav pomoći napisan je u HTML opisnom jeziku Video uputa snimljena je CamStudiom na simulatoru Dokumentacija na Hrvatskom jeziku
Reference
[1] Božidar Patača, Parsiranje Matematičkih Izraza, Osijek, 2010. [2] Dragan Jukić, Rudolf Scitovski: Matematika 1, Osijek, 2004. [3] Introduction to Algorithms T. Cormen, C. Leiserson, R. Rivest, C Stein, MIT, 2009. [4] Nokia’s Qt online dokumentacija: http://doc.qt.nokia.com/ [5] Aalat za snimanje ekrana CamStudio pronađen na: http://camstudio.org/ [6] Besplatni UML alat:http://www.umlet.com/ [7] Stringtutorial: http://www.cplusplus.com/reference/string/string/ [8] MATLAB: http://www.mathworks.com/products/matlab/ [9] Dev-C++: http://www.bloodshed.net/devcpp.html [10] Microsoft Office: http://office.microsoft.com/en-us/