Dr. Željko Jurić : Interaktivna računanja u programskom paketu Mathematica /skraćena verzija/Priručnik za laboratorijske vježbe na predmetu “Računarski sistemi”4. Upotreba promjenljivih i simboličko računanjePromjenljive predstavljaju jedan od fundamentalnih objekata u većini programskih jezika.Promjenljive u paketu Mathematica pružaju znatno više fleksibilnosti nego promjenljive u klasičnimprogramskim jezicima, stoga će im biti posvećeno više pažnje.Promjenljive, slično promjenljivim u matematici, zapravo predstavljaju imena kojima su dodijeljeneo<strong>dr</strong>eđene vrijednosti. U matematici su imena promjenljivih obično ograničena samo na jedno slovo, dokse u sistemu Mathematica (kao i u klasičnim programskim jezicima) imena promjenljivih mogu sastojatiod više znakova. U sistemu Mathematica imena promjenljivih mogu se sastojati od slova engleskogalfabeta i cifara, pri čemu prvi znak ne smije biti cifra (npr. “a2” je legalno ime, ali “2a” nije). Poredslova engleskog alfabeta i cifara dozvoljeni su još neki specijalni znaci, ali u detalje nećemo ulaziti. Imene smije sa<strong>dr</strong>žavati razmake. Velika i mala slova se razlikuju, tako da “Abc” i “abc” predstavljaju dvarazličita imena.Promjenljivoj možemo dodijeliti vrijednost pomoću operatora dodjele “=”. Tipičan primjerupotrebe operatora dodjele ima oblik ime = izraz. Na primjer:In[1] := a=5Out[1] = 5In[2] := a+2Out[2] = 7Ovim je ime “a” postalo promjenljiva čija je vrijednost 5, i svaka upotreba imena “a” u računu bićezamijenjena sa vrijednošću 5. Promjenljiva za<strong>dr</strong>žava svoju vrijednost sve do nove dodjele, ili do brisanjavrijednosti pomoću naredbe Clear, o čemu će biti govora kasnije. Primijetimo da je rezultat operatoradodjele jednak upravo dodijeljenoj vrijednosti, što omogućava lančano dodjeljivanje, kao u sljedećemprimjeru:In[3] := a=b=c=12Out[3] = 12In[4] := a+b*cOut[4] = 156Ukoliko želimo da spriječimo ispisivanje rezultata izvršavanja neke komande, komandu možemozavršiti znakom tačka-zarez (“;”). To je posebno važno prilikom kreiranja programa, jer bi, usuprotnom, prilikom izvršavanja programa bili ispisivani brojni međurezultati koji nas ne zanimaju. Naprimjer:In[5] := a=20;Rezultat nije ispisan. Međutim, lako se možemo uvjeriti da je dodjela a=20 ipak izvršena:In[6] := aOut[6] = 20Znak “;” također može služiti i kao separator koji omogućava da više izraza (tipično u formikomandi) zadamo u jednom redu. Također, prilikom dodjeljivanja, sa desne strane operatora dodjelemože se nalaziti izraz, a ne samo brojčana vrijednost:In[7] := put = 300; vrijeme = 6; brzina = put/vrijemeOut[7] = 50Vidimo da se u ovom slučaju prikazuje rezultat izvršavanja samo posljednje komande. Da smo iposljednju komandu završili tačka-zarezom, ne bi bilo prikazano ništa (mada bi sve dodjele bile ispravnoizvršene).– 15 –
Dr. Željko Jurić : Interaktivna računanja u programskom paketu Mathematica /skraćena verzija/Priručnik za laboratorijske vježbe na predmetu “Računarski sistemi”Ono u čemu se algebarski računarski sistemi kao što je Mathematica suštinski razlikuju od klasičnihprogramskih jezika kao što su Pascal, C, C++ itd. je mogućnost rada sa promjenljivim koje nemajunikakvu definiranu vrijednost. U tom slučaju one se smatraju za simbole (što donekle odgovara pojmuopćeg broja u matematici). Mathematica automatski vrši neka elementarna sređivanja nad izrazima kojisa<strong>dr</strong>že simbole:In[8] := y^5 + x*x + 2 + 5*x + x/x – x*3Out[8] = 3 + 2 x + x 2 + y 5U simboličkim rezultatima simboli se uvijek sortiraju po abecedi (tako da se umjesto y + x dobijax + y, a umjesto y – x dobija se –x + y itd.). Također, članovi sa nižim stepenima simbola uvijek se nalazeispred članova sa višin stepenima, a slobodni članovi ispred članova koji sa<strong>dr</strong>že simbole. Možemoprimijetiti da je sistem Mathematica automatski izvršio kraćenje u izrazu x/x (tj. izvršio njegovuzamjenu sa 1) mada je takvo kraćenje dozvoljeno samo za x 0. Mathematica u ovakvim situacijamapo<strong>dr</strong>azumijeva produženje po neprekidnosti, tj. u graničnim tačkama definicionog po<strong>dr</strong>učjapo<strong>dr</strong>azumijevaju se granične vrijednosti (tj. smatra se da je x/x = 1 bezuvjetno). Mada ova konvencijamože ponekad da smeta, njome se izbjegava generiranje veoma složenih izraza koji bi mogli da nastanuukoliko se ovakva kraćenja ne bi vršila bezuvjetno.Podsjetimo se da se znak množenja “*” u sistemu Mathematica može zamijeniti razmakom, tj.umjesto x * y možemo pisati samo x y. Razmak se može i izostaviti ako to neće dovesti do zabune. Tako,na primjer, možemo pisati 2x umjesto 2 * x ili 2 x, ali ne možemo pisati xy umjesto x * y, jer će xy bitishvaćeno kao jedna promjenljiva sa imenom “xy ”. S <strong>dr</strong>uge strane, x y možemo pisati umjesto produktax * y.Ukoliko je potrebno da uklonimo vrijednost koju posjeduje neka promjenljiva (tj. da je pretvorimo usimbol bez vrijednosti), možemo koristiti funkciju Clear kod koje u uglastim zagradima navodimo imepromjenljive ili popis imena razdvojen zarezima kojima brišemo vrijednosti. Na primjer:In[9] := Clear[a,b,c]Funkcija (naredba) Clear ne daje nikakav rezultat. Nakon ove naredbe promjenljive “a”, “b” i “c” (kojesu ranije imale vrijednost) postaju ponovo simboli bez vrijednosti:In[10] := a+b+cOut[10] = a+b+cPromjenljive u paketu Mathematica mogu čuvati daleko složenije strukture podataka nego uklasičnim programskim jezicima (poput Pascal-a, C-a, C++-a, itd.), kao što su liste, matrice, skupovi,algebarski izrazi, pa čak i grafikoni, crteži, geometrijski objekti itd. Tako, promjenljiva u sebi možečuvati izraz u kojem se javljaju simboli, odnosno <strong>dr</strong>uge nedefinirane promjenljive. Na primjer,promjenljiva x može kao svoju “vrijednost” sa<strong>dr</strong>žavati izraz (a+b)/(a–b) gdje su a i b nedefiniranepromjenljive. Ilustrirajmo ovo na jednom primjeru:In[11] := x=a+b–3; y=a–b;In[12] := x+yOut[12] = –3 + 2 aIzrazi mogu pored nedefiniranih promjenljivih sa<strong>dr</strong>žavati i nedefinirane funkcije. Naravno,Mathematica ne može izračunati vrijednost nedefiniranih funkcija, stoga ih ostavlja neizračunate, alimože izračunati ostatak izraza koji eventualno sa<strong>dr</strong>ži nedefiniranu funkciju. Na primjer:In[13] := 7+2*funkc[5+3*6]–4Out[13] = 3 + 2 funkc[23]U navedenom primjeru nedefinirana funkcija je funkcija “funkc”.– 16 –