Dr sci. Mevludin Avdi6
FORTRAN PROGRAMIRANJE ZA WINDOWSE
UNIVERZITET U TUZLI RUDARSKO-GEOLOSKO-GRADEVINSKI F AKULTET
Recenzenti: Dr sci. Jugoslav Stailov, red.prof. Tehnoloskog fakulteta u Tuzli Dr sci. Naser Prljaca, docent Fakulteta elektrotehnike i masinstva lzdavac: Rudarsko-geolosko-gradevinski fakultet u Tuzli Za izdavaca: red. prof. df sci. Sadudin Hodzi6 Mevludin S. Avdic TeJ.1nicka priprema i DTP: doc. dr sci. Mevludin Avdi6 i mr sci. IZlldin BaJrektarevic Stampa: DOO "COPY GRAF" - Tuzla Tiraz: 250 primjeraka
!
--~------------.------------'~--.
CIP - Katalogizaeija U pllblikaeiji Naeionalna i univerzitetska biblioteka I Bosne i Hercegovine, Sarajevo
I 004 . 432 .2 FORTRAN ( 075 . 8 ) I 004 . 42 : 004 . 432 .2] (075. 8 ) AVDIC, Mevludin S. Fortran: programiranje za Windowse I Mevludin S. Avdic. - Tuzla : Rudarsko-geolosko-gradevinski fakultet, 200 1. - 197. str. : i]ustr. , 24 em Bibliografija: str. [198-199] ISBN
9958-628-02-3
COBISS/BiH-lD 9224198 TUZLA, 2001.
Predgovor Ova je knjiga namijenjena studentima RGGF-a, Univerziteta u Tuzli, kao i onima koji izucavaju FORTRAN programskijezik. Tzlazena materija abuhvata nekolika segmenata, koji magu predstavljati cjelinu, ali je prvenstveno orijentirana na sintaksi FORTRAN programskog jezika, sa tezistem na windaws apiikacije. Prije desetak godina rad sa FORTRAN-am, kaji nije imaa mnaga interfejsa sa astalim programskim jezicima, bio je sa V AX-FORTRAN-am. Danas je na nasim PC racunarima maguce koristiti nave verzije FORTRAN-a kaje su obagacene sa magucnastima interfejsa sa drugim programskimjezicima. Nave verzije pragramskog jezika FORTRAN amogucuju bagatu graficku podrsku (QWIN, zahvaljujuci API-ju), magllcnost kambinacije sa drugim pragramskim jezicima (Visual Basic, C, C++ i u okviru Developed Studia). Za strucnu pamac i sllgestije zahvaljujem recenzentima prof dr Jugaslavu Stahavu i dr Naseru Prljaci, te mr tzudinu Bajrektarevicu, mr Ruzi Celikavic mr Husrefu Bukvicll, Zeljku Kavacevicu, Celikavic Mevludinu,.
Organizacija knjige
Napamena: Reprodukavanje (fotakopiranje iIi l1a bila kcijP'11acin njeno umnozavanje) iii ponavna abjavljivanje ove knjige, u cjelini iii dijelovima, nije dazvaljena bez"pretbodne izricite saglasnosti i pismenag adabrenja izdavaca.
Knj iga je napisana u cetiri dijela od koj ih svaki maze cla predstavlja ZaSebl1Ll cjelinu. Jedini zajednicki sadrzilac je FORTRAN pragramski jezik i to kompajleri: POWER STATION 1, POWER STATION 4 i DIGITAL FORTRAN (Visual FORTR~N). Uvadni dia knjige sadrzi asnavne elemente razvoja algaritma. Navedeni prirnjeri 11 ovom dijelu koristelli w i u drugom ciijelu. Drugi dio daje osnavne elemente programiranja za windawse sa pragramskim jezikam FORTRAN. Razradena je sintaksa avag programskog jezika U obimu koji je neapbodan za studente, a za korisnike koji rade, ili studente koji nastavljaju koristiti avaj programski jezik, date su tabelarna apisane funkcije i kratak opis magucnasti FORTRAN-a. Svi primjeri su za konzolnu aplikaciju. U trecem su dijelu ukratko oSl1avni elemenati racunarske grafike i karistenje FORTRAN-a za pisanje vlastitih pragrama. U ovam dijelu dato je teziste na "Qwickwin" i standardnu graficku aplikaciju. Kao posljednji dio dat je apis koristenja FORTRAN-a sa drugim programskim jezicima (Visual Basic i C++). Ovaj clio saddi kratak rezime avih programskib jezika, ali koristenje DLL ap likacije trazi ad karisnika poznavanje i jednag iii oba ava programska jezika pared poznavanja FORTRAN-a. Kratki i jednastavni primjeri amogucuju korisnicima da sa avim informacijama i mastam naprave vlastite karisnicke programe.
SADRZAJ Koristene skracenice
I DVOD D RI\CDNARE 1. DVOD ................................................................. . 2. ISTORIJAT R4..CDNARA ......................................... 2 2.1 PODJELA RACUNARA ............................................ , 3 3. SAST A ¥NI DlJELOVI RACUNARA ........................... 6 3.1 PREGLED KOMPJUTERSKOG HARD VERA I SOFTVERA ........................................................... 6 3.2 MIKROKOMPJUTERSKI SISTEMI .............................. 9 3.3 PROGRAMSKI JEZICI ............................................. 16 4. RAZVOJ ALGORITMA I PRA VLJENJE PROGRAMA ........................................................ 21 4.1 OSNOVNE PROGRAMSKE NAREDBE ........................ 22 II FORTRAN-PROGRAMSKI JEZIK ZA WINDOWSE 1. DVOD ................................................................. 35 2. OSNOVNI ELEMENTI FORTRAN JEZIKA ............... 36 2.1 REDOSLIJED NAREDBI U FORTRAN-U ..................... 37 2.2 PRAVILA PISANJA PROGRAMA U FORTRAN-U ......... 38 3. TIPOVI PODATAKA U FORTRAND ......................... : 39 3.1 KONSTANTE U FORTRAN-U .................. :............... 39 3.2 PROMJENLJIVE U FORTRAN-U .............................. 40 3.3 OPERATORI U FORTRAN-U ...................... .............. 42 3.4 SISTEMSKE FUNKCIJE U FORTRAN-U ...................... _4c-:-4_ _~, 4. NAREDBE ULAZA I IZLAZA: INPUT-OUTPUT ........ :. 49 4.1 OPISIV ACI ZA CIJELE VRIJEDNOSTI ........................ 52 4.2 OPISlV ACI ZA REALNE VRIJEDNOSTI ..................... 52 4.3 OPISIV ACI ZA KARAKTER VRIJEDNOSTI .. . . . . ... .. . ... .. 54 55 4.4 OPISIV ACI ZA STRINGOVE I KONTROLU ................. 5. NAREDBE KONTROLE OSNOVNIH ODLUCIVANJA .................... ............................... 56 5.1 BEZUSLOVNI PRELAZAK GOTO ................. ............ 56 5.2 USLOVNE NAREDBE I KONSTRUKCIJE GRANANJA ........................................................ 59 5.3 IF NAREDBA ....................................................... 61 5.4 IF STRUKTURA ................................................... 62 5.5 SELECT CASE. . .. . . . . .. . . . . . .. . . . .. . .. . . . . ... .. . . .. . . . . .... . . . . ... 65 6. PETLJE - CIKLICKE STRUKTURE ....................... 67 6.1 PETLJE SA BROJACEM ............ ......... .................... 67 71 6.2 USLOVNE PETLJE ........ ......... ...............................
7. NIZOVI - INDEKSIRANE V ARIJABLE ................. .. 7.1 NAREDBE DEKLARISANJA NIZOVA ..................... .. 7.2 INPUT/OUTPUT NIZOVA ...................................... . 7.3 RAD SA NIZOVllVIA ........... '" ., .... ' ........ " .. , ...... , ... . 8. PROGRAMSKE JEDINICE ................................... . 8.1 GLAVNI PROGRAM ............................................ . 8.2 PROGRAMSKA JEDINICA FUNCTION ..................... . 8.3 PROGRAMSKA JEDINICA SUBROUT]J\i'E ................ .. 8.4 PROGRAMSKA JEDINICA MODULE ...................... .. 8.5 PROGRAMSKA JEDINICA BLOCK DATA ............... . 9. RAD SA DATOTEKAMA .......................... _.. , .. 10. PRIMJERI FORTRANSKIH PROGRAMA ............... . 10.1 PRIMJERI FORTRANSKIH PROGRAMA IZ I DIJELA .......................................................... . 10.2 PRIM JERI IZ MEHANlKE ...... _......... _................... . 10.3 MJESOVITI PRIM JERI ........................................ . HI RACUNARSKA GRAFIKA SA FORTRANOM 1. UVOD ............................................................ .. 2. OSNOVNI ELEMENT! RACUNARSKE GRAFIKE ...................................................... _.. 2.1 RAV ANSKE TRANSFORMACIJE ........................... . 2.2 PROSTORNE TRANSFORlVIACIJE ......................... . 2.3 GRAFIKA SA FORTRANOM (VISUAL FORTRAN) ... .. 3. GRAFIKA SA PAKETOM ARRAY VISUALIZER .. _.. 4. GRAFIKA SA P AKETOM PLOT88 ................. " .... . ----_. XV FORTRAN I DRUGI PROGRAMSKI JEZICI 1. UVOD ......................................... _.................. . 2. PROGRAMSKI JEZIK C/C++ ............ , ................. . 2.1 OSNOVA STRUKTURA C JEZIKA .................. " " ... 2.2 PROCES STV ARANJA PROGRAMA ....................... . 2.3 VISUAL FORTRANIVISUAL C++ ......................... .. 3. PROGRAMSKI JEZIK VISUAL BASIC ................... . 3.1 VISUAL FORTRANIVISUAL BASIC ....................... . INDEX LITERATURA
72 73 81 8J 84 84 87 91 94 a~
/ !
97 109 109
113 l22
129 130 130 141 152 161
169
177 178 179 180 185 191 193
KORISTENE SKRACENICE
AI ALU API ASCII BCD BIT BPC CAD CAE CAM CAP CASE CPS CPU DBMS DLL EBCDIC GL GUI HPGL
IBM PC FPS RAM ROM SQL SVGA VDU
_ _. -
Artificial Inteligence Arithmetic Logic Unit Application Programming Interface American Standard Code for Information Interchanae Binary Coded Decimal '" Binary Digit - binarna citi'a Business Planning and Control Computer Aided Desing Computer Aided Engineering Computer Aided Manufacturing Computer Aided Programming Computer Aided Software Engineering Couple Procesor Sistems Central Procesing Unit Data Base Management Systems Dynamic Link Library Exterded BCD Interchange Code Generation Languages Graphic User Interface Hewlell Packard Graphic Language International Business Machiness Personal Computer Production Planing and Control Random Acces Memory Read Only Memory Structured Query Language Super Visual Graphics Adapter -Visual Display Unil
1. UVOD Ni jedan izum do danas nije toliko doprinio nauci i inzinjerstvu i izmijenio njihov tok kao sto je kompjuter. Kompjuter ima fascinantnu ulogu u svim naucnim clisciplinama. Digitalni kompjuteri (poznati sa oclomacenim nazivom kao kompjuteri - racunari) Llcestvuju Ll razlicitim "egzoticnim" granama za proracun trajektorija svemirskih broclova, upravljanja i vodenja zeljeznickog i avionskog saobracaja (Ll posljeclnje vrijeme - pocetkol11 2000. gocline i putnickog saobracaja - eksp. fazi), digitalnog prijenosa signala slike sa planeta naseg sustava koje su bilionima kilometara claleko, simultanog vodenja ratnih operacija, projektovanja i dizajniranja nuklearnih reaktora, rjesavanja problema biomehanike i ostalih disciplina nauke, tehnike, politike itd. Prvobitna cijena racunara i njihova primjena bila je clostupna samo oclrec1enol11 krugu pojedinaca iii firmi kojimaje budzet to omogucavao. Neke od inicijativa u siroj primjeni racunara su rezervacije za avionski i zeljeznicki saobracaj, prikaz bankovnog stanja, prevodenje sa jednog jezika na drugi, projektovanje elektricnih generatora, prijenos i distribucija, projektovanje grac1evinskih i rudarskih konstrukcija i objekata, optimalizacija velike skale ekonomskih i socijalnih sistema, kontrola biznisa, izrada horoskopa i astroloskih predvictanja, video igara (ukljucujuci sah), tekst-procesori, dijagnoze i predvidanje dogadaja, elektronske kOll1unikacije (ukljucujuci i telell1atiku), robotika, geoloski procesi, projektovanje podzell1nih objekata i projektovanje u grac1evinarstvu i masinstvu. Mnogi !judi posmatraju racunar kao imaginarnu stvar i ll1isteriozni predll1et koji "misli" i "rjesava" sve probleme sa kojima se susrecell1o. Jednostavno receno, kompjuter je sofistificirana elektronska masina, kao i sve druge !lIasi!le, sal!IO 5tO ona moze da clizajnira. CoYjek upravija kompjuterom, a ne kompjuter covjekom. KOll1pj uter izvrsava set instrukcija za odred~ni posao. Ne treba biti poseban naucnik iii savrsen matematicar da bi se bio programer. Program moze napisati inteligentna osoba koja razumije problem koji treba rjesavati i kodiranje (kompjuterski jezik) koje sluzi za kOll1unikaciju covjek - masina. Rad za poznavanje programiranja u bilo kojem programskom jeziku moze biti uspjesno okon6an za nekoliko sedmica sa intezivnom praksom od 3+4 sata dnevno.
FORTRAN programiranje za windowse
Uvod u racunare
2. ISTORIJAT RACUNARA
Do nedavno rjesavanje proracuna, osim vrlo jednostavnih, nije bilo moguee, jer su !judi za ove postupke upotrebljavali deset cifara (0-9). Prvi komk prema razvoju mehanickih uredaja za racunanje, a istovremeno i kljucni korak u razvoju matematike, predstavljala je pojava razlicitih nacina fizick~g oznacavanja i zapisivanja. Najranija forma fucnog pomagala za racunanje je "Abacus". U kratkim crtama opisat ee se evolucija racunara: ,/
Abacus - prema nekim izvorima napravljen je prije 5000. god. u Kini, a neke verzije koristene su u Japanu i zemljama Evrope. . ,/ Pascal - napravio je prvi mehanicki kalkulator za sabiranje i oduzimanJe 1642. god. ¥' N;lpier - dao je poj
.?O
2
konstruisan 1952, bio je baziran na zamislima koje je 1945. godine postavio matematicar John von Neumann. Naime, on je predlozio da se program kompjutera smjesti u ultrabrzu internu memoriju, te da se i podaci i instrukcije interno predstavljaju binarnim brojevima umjesto, kao do tada, dekadnim. To je pregled koncepta koji formira osnovu i danasnjih kompjutera. Od tadaje razvijeno nekoliko generacija kompjutera: Kompjuter UNIVAC (Universal Automatic Computer) je bio prvi opstenamjenski elektronski digitalni kompjuter na trzistu. On je oznacio pocetak prve generacije elektronskih kOl11pjutera. Druga generacija kompjutera se pojavila 1959. godine i imala je slijedeee glavne karakteristike: ,/ Porast primjene ,/ Kompjuteri druge generacije SLI bili znacaJno manji i brzi, a osim toga znacajno pouzdaniji od kompjutera prve generacije. ,/ Upotreba magnetnih jezgara kao primarne unutrasnje memorije, kao zamjenljivih grupa magnetnih diskova druga su veea poboljsanja hardvera u kompjnterima druge generacije. Magnetna traka je postala najsire koristeni medij za ulazlizlaz i sekundarnu memorijn, dok su busene kartice ostale u sirokoj upotrebi. ,/ Vakuumske cijevi zamijenjene su tranzistorima Promocija IBM System!360 serije 1964. god. oznacila je dolazak trece generac:ije kompjutera. Karakteristike generacije su: elektronika sa tranzistorima zamijenjena je integrisanim kolima. Tn su svi e1ementi elektronskog kola bili sadrzani na maloj kriski silicijuma iIi cipu. Takvi elektronski sklopovi su bili marlji i pouzdaniji nego oni sa tranzistorima i znacajno su uveeali brzinu i smanjili dimenzije kompjutera treee generacije. Sedamdesetih godina, cetvrta generacija vrlo brzih kompjutera bila je razvijena upotrebom LSI (Large Scale Integration) iii VLSI (Very Large Scale lintegration) cipova koji su kombinacija funkcija nekoliko manjih IC-ova. Sredinom sedamdesetih razvijen je jednostavni cip - mikroprocesor, a samim tim pojavili su se i personaini racunari. Danas se vee uveliko radi, narocito u Japanu i SAD, na razvoju pete generacije kompjutera. Ishod je nova vrsta inteligentnih kompjutera koji vrse pm-alelnu obradu podataka i trebalo bi da "misle", da komuniciraju vizuelno i glasom.
3
FORTRAN programiranje za windowse
Uvod u racunare
2.1 PODJELA RACUNARA U oclnosli na konstrukciju, nacin rada i primjenu razlikuju se tri tipa racunara: digitalni, analogni i hibridni racLlnari. Analogni meunari se primjenjuju u optimalizaciji regulacionog upravljanja kompleksnim tehnickim procesima. Rade sa neprekidnim velicinama. U elektronskom analognom racunaru matematicke promjenljive iIi fizicke velicine, predstavljene SLl analognim elektricnim naponom iii strujom. Umjesto ispitivanja postavljenog problema vrsimo ispitivanje analognog elektricnog model a koji se formira na analognom elektricnom racunaru. . Ovi racLlnari se danas sve rjede upotrebljavaju, prvenstveno zbog njihove cijene. Na slici 1.1 je prikazan analogni racLlnar TARA koji sluzi za rjesavanje problema provjetravanja rudnika i/ili protoka Huida.
-./
kompjutera, a najmoeniji minikompjuteri su jaci od nekih sllperkompjutera. ani su se pojavili sredinom 60-tih godina, a veoma rasirili krajem 60-tih i pocetkom 70-tih godina zbog rapidno rastueeg trzista kompjutera i potraznje za njima. Hardverski gledano, minikompjuteri imaju sve kvalitativne karakteristike velikih kompjutera, S tim da su obicno nesto kvantitativl10 oslabljeni. Sitematski softver za minikompjutere ukljucuje niz veoma moenih i razvijenih operativnih sistema i sistema za upravljanje bazama podataka, kao i niz prevodilaca za kompjuterske jezike (FORTRAN, COBOL, PASCAL, itd.) Veliki kompjuterski sistemi - climenziono Sll veei i mocnlJ! od minikompjuterskih sistema. To, naravno, vrijedi kada uzimamo tipicne predstavnike tih klasa kompjuterskih sistema. Njihova snaga se ogleda u slijedeeem:
I.
2.
3.
Slika 1.1
Digitalni racllnari rade na principu vrlo brzih diskretnih elektricnih impulsa sa vrlo visokom lIcestaloseu. lmpulsi slijede po jednom logickom redu koj i je strogo odreden postavljenim programom. Danas se ovi racunari sve vise lIpotrebljavaju u svim segmentima zivota i rada, i sve brZe razvijaju. Hibridni meunari su kombinacija analognih i digitalnih racunara. S obzlrom na to da se za upravljanje tehnoloskim sistemima i obradu digitalnih podataka koristi digitalni racunar, to eemo analiziOrati nacin rada samo ovog tipa racunara, pri cemu se naglasava da se termin "racunar" odnosi na ovu vrstu racunara. Prema velicini, racunare mozemo podijeliti na: ./ Mini racllnari - su , u principu, mali opstenamjenski kompjuteri. Oni su u prosjeku moclliji od mikrokompjutera, a slabiji od velikih i superkompjutera. Ipak, najmoeniji mikrokompjuteri su jaci i od nekih mini4
Posjeduju jedan iii vise veoma moenih procesora (32 - bitnih iii jacih ) koji rade na veeim brzinama (reda desetina miliona instrukcija u sekundi). Imaju veci kapacitet prinlarne 11lelTIOrije (reda nekoliko 111egabajta) i veiiki kapacitet medija sekundarne memorije (nekoliko desetina gigabajta memorije u magnetnom disku). Sposobni su da usluzuju nlnogo korisnika istovrel11eno, posto istovremeno mogu iZVfS(lVati nekoliko program a i kontrolisati veei broj ulaznihlizlaznih jedinica.
Dok se mikrokompjuteri koriste za obradu fJodataka za samo jednog za manje grupe iii organizacije, veliki sistemi se koriste da bi zadovoljili potrebe de5etina i "totina Korisnika u velikim organizacijama koje su liZ to i prostorno distribuirane. i tipovi racunara koj i imaju svoje glavne specificnosti, a to su: -./ Superkompjuteri (Supercomputer) - predstavljaju posebnu klasu izuzetno mocnih kompjuterskih sistema. Manji broj slIperkompjutera se namjenski izradi godisnje, i uglavnom se koriste za potrebe armija, meteoroloskih i naucnih zavoda i 51. Vodeei pro izvodaci superkompjutera su:' Cray Research, sa modeJima Cray I, Is, X-MP i Y-MP, te Control Data Corporation sa razlicitim modelima Cyber. Cijene ovih kompjuterskih sistema variraju, idu i do 15 miliona $. ./ Opstenamjenski kompjuteri (General - purpose computers) - koji sluze za obradu informacija i koji su konstruisani za sirok spektar primjene. Nekad je daleko ekonomicnije kreirati specij
5
FORTRAN programiranje za winciowse
robotoll1 iIi ll1ikrotalasnO!Tl peenicom, iii pak kompjuter koji cita etikete na proizvodill1a iii kreditne kartice sa magnetnim zapisom. Mnogi se kompjuteri cetvrte generacije mogu klasifikovati kao multiprocesorski kompjuterski sistemi (Multiprocessor computer systems). Za obavljanje svojih operacija ne koriste jedan CPU, vee vise njih. Meau najznacajnije tipove multiprocesorskih sistema spadaju: v' Sistemi sa pomoenim procesorom (Support processor systems). Kljucno 1I ovom konceptu muitiprocesorskih sistema je koristenje mikroprocesora za obavljanje pojedinih vaznih funkcija obrade, kao 5to je ulazliz!az, kontrola urectaja za sekundarnu memoriju, komunikacija. Tako se oslobada glavni procesor (koji se nekada naziva i instrukcionim procesorom) za obavljanje kliucnih zadataka obrade. v' Sistemi sa spregnutim procesorima ( Couple procesor systems). Ovaj dizajn podrazumijeva kori5tenje nekoliko razlicitih ravnopravnih CPU-ova, koji dijele zajednicke memorijske resurse. v' Grupe specijalizovanih procesnih sistema (Subsidiary processing systems). Ova zamisao predstavtja udruzivanje autonomnih kompjuterskih sistema, koj i se organizuju u zeljenu hijerarhiju, sa fiksiranim zadacima. v' Distribuirani procesni sistemi (Distributed processing systems) predstavljajn mrezllo spregnute nezavisne kompjuterske sisteme, koji 1110gU biti organizaciono i prostorno disperzirani unutar organizacije.
Uvod u racunare -----------------------Periferna oprema i mediji (nosioci podataka)
Kategorija hardvera ukljucuje sve uredaje koji Sll izvan sistema iii su (iii mogu biti) ONLINE - u sklopu sistema, tj. elektronski povezani i kontrolisani od CPU. Periferali ukljucuju siroki opseg ulaznih/izlaznih oprema (kao 5tO su na primjer video-terminali za prikazivanje). Mediji za perifernu opremu sastoje se primarno od magnetnih diskova i traka, kao i papirnih dokumenata.
GLAVNA MEMORJJSKA JEDINICA
, ,,, , ,, ,, ,,, ,
, ,, ,, ,,, ,
,----------------- -----
- ______ - __ - - - - - - - - - - - . 1
---- --- --- - - CPU
DATA SIGNAL!
3. SASTAVNI DIJELOVI RAC:UNARA
KONTROLNA JEDINICA
KONTROLNI SIGNAL!
[
--~-
- --,,
KON~OLA
ARITMETICKA LOGICKA JEDINICA (ALU)
3.1 PREGLED KOMPJUTERSKOG HARDVERA I SOFTVERA Kompjuterski hardver sastojise od opreme koja cil1i kompjuterski sistem, kao i ulazno-izlaznih i memorijskih medija (kao 5to su magnetna traka iIi diskovi) koji su stvarni, opipljivi materijali na koji se podaci zapisuju. Hardver se moze podijeliti na slijedeee glavne kategorije.
Procesor kompjutera Primarna hardverska jedinica kompjuterskog sistema je CPU, koja se zove i mikroprocesorom kod mikrokompjuterskih sistema, ALU kontrolna jedinica i primarna memorijska jedinica, zatim drugi specijalizovani ureaaji kao 13to su bafovi i ulazno-izlazni portovi. Mnogi savremeni kompjuterski sistemi ukljucuju dodatne specijalizovane procesore (kao sto su aritmeticki i ulaznil izlazni procesori) koji pomazu CPU u izvrsenju zadaiaka.
6
Slika 1.2 Sastavni dijelovi hardvera
Pomocna opl"ema i mediji
Ova kategorija ukljucuje opremu kojaje offline - nezavisna, tj. oprema kojaje odvojena i nije pod kontrol0111 CPU. Pomoena oprema pomaze funkciju lliaza, izlaza i memorisanja kompjuterskog sistema i ukljllcuje: (I) offline opre11111 za unos podataka (priprema lllaza) kao sto su busaci traka iIi disk masine koje pretvaraju podatke sa izvornih dokumenata na magnetne ulazne medije za kasniji ulaz u kompjuterski sistem, (2) offline oprema za izlaz i memorisanje, kao 5tO Sll ureaaji za kopiranje i razvrstavanje, (3) nosioci obradenih podataka kao 5to su papirni formulari koji se koriste u radu kompjuterskog sistema. Mnogi tipovi kompjuterskih periferala i medija mogu se koristiti i za ulaz i za sve tri funkcije lliaza, izlaza i sekundarnog memorisanja. Npr. oprema
7
FORTRAN programiranje Z(l windowse
Uvod 1I racunare
magnetnog diska koristi magnetne diskove kao nosioca podataka i izvrsava sve tri funkcije ulaza, izlaza i sekundarnog memorisanja. Kompjuterski terminali se sastoje od tastature za direktan unos podataka u kompjuterski sistem i CRT video ekrana za direktni pnkaz ·vlzuelnog lzlaza. Oni se zovu ulazno/izlazni uredaji. KOMPJUTERSKI SOFTVER ukljucuje sve tipove program a koji daju naredbe i kontrolisu kompjuterski hardver kod izvrsenja funkcija obra?e informacija. Kompjuterski softver moze se podijeliti u dvije glavne kategorIJe: sistemski softver i aplikacioni softver. Kao primjer mozemo navesti slijedece program~ke pakete: . ,/ Sistemski softver - programi koji kontrolisu ! podrZavaJu operacije kompjuterskog sistema. ,/ Operativni sistem -integrisana grupa program a koj i kontrollsu I podrzavaJu operacije kompjuterskog sistema dok se izvrsavaju apllkatlVI1l programl korisnika. .. ,/ Sistemi za upravljanje bazom podataka (DBMS) - grupa program,~ kO}1 kontrolisu kreiranje, oddavanje i upotrebu baze podataka, memonsal.11h podataka i informacija kojima se moze pristupiti preko nekollko korisnikovih aplikacija. .. ,/ Prevodilac programskog jezika - program koji prevodi instrukclJe programa napisane u programskom jeziku, kao npr. BASIC iIi FORTRAN u bl~arno bazirane kodove instrukcija masinskog jezika koje racunar. moze ?a izvrsava. On korisnicima i programerima omogucava da pisu svoJe vlastlte programe. 'v'
v
iy
Paket elektronskih prikaza obrazaca - program koji prika~uje obrasce iIi redove i kolone u koje korisnik moze upisati podatke I formule kOJe predstavljaju model korisnikovog problema. Program zati~ ~utoma~s~~ maniPlllise podacima U obrascima prema komandama kons111ka, daJucl odlicno sredstvo za analizu i planiranje. ,/ Paket za obradu teksta - program koji automatski.~ Jreira, ureduje i stampa dokumenta (pisma, izvjestaje, itd.), elektronski obradujuci tekst podataka (rijeci, fraze, recenice, i s1.) za korisnika.
8
Paket za pracenje poslovanja - programi koji vrse potrebne aktivnosti obrade informacija za opsta racunanja iIi druge poslovne funkcije. Primjer su analize placanja, potraznih i dugovnih racuna, kontrole inventara, opsta racunanja glavne knj ige i obrade plata.
Svi kompjuterski sistemi funkcionisu na Istlm princlplma, ali i pored toga meau njima postoje znacajne razlike u vezi sa unutrasnjom organizacijom i procesnom snagom. Stoga se mogu podijeliti na osnovu nekoliko kriterija: ,/ Po velicini - na mikrokompjutt;re, mini-kompjutere, velike i superkompjutere, ,/ Po vrsti - na digitalne i analogne kompjutere i hibridne ,/ Po namjeni - na opstenamjenske i specijalizovane
•
APLIKACIONI SOFTVER - programi koji daju direktive za obradu pojedinacnog posla iii aplikacije kompj:ltera .. Aplikacioni softve~, aplikacioni programi, od~eauje trazel:e .aktlvno~tl ?br~de za kOl~pletlr~:lJI~ specificnih zadataka kompJutersklh kons111ka. AplIkaCIOl1l softver ~e cesto dlJed na poslovne aplikacione programe, naucne aplikacione programe I razne drul?e kategorije aplikacionih programa. Primjeri mogu biti kontrol.a ll1ventara, Jil programi obrade placanja u pos\ovima, i inzenjerstvu,. I. progra.I::1 za kompjuterske - pomocne instrukcije ili video igre U obrazovanJu I rekreaclJl: ,/
,/
Kompjuterskim sistemima se cesto daju imena, kao sto su: personalni kompjuteri , mali poslovni kompjuteri , naucni kompjuteri iii multiprocesorski kompjuteri.
3.2 MIKROKOMPJUTERSKI SISTEMI Od 1975. godine, bda su se pojavili u elektronici, mikrokompjuteri su presli ogroman put i postali uobicajena licna i poslovna potrepstina. Danas se mogu nabaviti u raznim oblicima: od cipova, dzepnih kompjutera, kompjutera velicine sveske, sve do velicine aktovke iii tv-aparata. Mikrokompjuter se sastoji od mikroprocesora i odgovarajuce elektronike za funkcije kontrole, memorije, i ulaz/izlaz, kojaje smjestena ujednom cipu. Po velicini se razlikuju: mikrokompjuteri na jednom cipu, dzepni mikrokompjuteri, rucni mikrokompjuter, mikrokompjuteri velicine sveske, mikrokompjuteri koji staju na krilo-Laptop, mikrokompjuteri koji se mogu transportovati i stoni mikrokompjuteri. S obzirom na namjenu, mikrokompjuteri mogu biti specijalizovani, kucni, personalni, profesionalni, mali poslovni, i radne stanice. Medutim, danas je za mikrokompjutere najpopularnije ime personalni kompjuter, zbog toga sto se oni koriste svuda, u kuci, u skoli i na poslu . Gd velicine, vrste i namjene mikrokompjutera zavisi hardver kojim ce oni biti opremljeni. Ipak, najcesca je organizacija hardvera kao na slici 2.6. Naravno, treba imati na umu da je i mikrokompjuter kompjuterski sistem. Drugim rijecima, on mora posjedovati hardver koji omogucava obavljanje osnovnih funkcija sistema za obradu informacija - ulaz, obrade, izlaz, kontrole i memorisanja: -/ Ulaz se sastoji od tastature, ekranskog misa i drugih uredaja. ,/ Gbrada i kontrola se vrse u glavnom dijelu sistema, koji sadrzi mikroprocesor i kontrolnu elektroniku.
9
FORTRAN programirallje za windowse
Uvod u racunare
Memorisana primarna memorija se sastoji od ROM i RAM cipova u glavnom dijelu sistema, sekundarna memorija se sastoji od uredaja za flopi diskove, urectaja za fiksne diskove i drugih ureaaja, koji mogu biti iii dio glavnog dijela sistema iIi spolja prikopeani. .,/ Izlaz se vrsi koristenjem video-monitora i printera (uz generator zvuka i ostale uredaje).
disketa idu od nekOliko stotina kilobajta do jednog iii dva megabajta, a kapaciteti hard diskova od nekoliko desetina do nekoliko stotina megabajta. Najeesci primjeri oba tipa medija magnetnih diskova Sll 5,25 i u zaclnje vrijeme sve cesce 3,5 inca. Za smjestaj podataka PC kOlllpjuteri se opremaju i dr. medijillla kakva je magnetna traka iii strimer, eiji je kapacitet ogroman. N,~jcesca ulaznajeclinica za mikrokompjutere je tastatura. Ona je iIi zaseban ureaaj iii je fizieki ukomponovana u glavnu jedinicu mikrokompjutera. Pored standardnih postoje i nUlllericke tastature za brzi lInos poclataka, zatilll kursorski i funkcijski tasteri. Pristup komunikaciji korisnika sa kompjuterom moze se vrsiti i preko drugih ulaznih jedinica vecinom vezanih za kontrolu. To je u stvari kursor iIi pokazivac kojeg po ekranll pOllljeramo uz POlllOC misa. Pored misa, za istu svrhu moze se koristiti i svjetlosna olovka, graficki tablet, ekran osjetljiv na dodir, palica za igru i dl'. Najcesca mikrokompjuterska hardverska izlazna jedinica je vizuelni displej. Drllga vazna izlazna jedinica je printer, koj i sluzi za dobijanje rezultata u stampanoj formi. Najcesce se koriste matricni, lepezasti, ink - dzet, i termalni printeri. Pored ovih vrsta printera za prirllcno stampanje se sve vise koriste laserski printeri. Druge izlazne jedinice SlI sintetizatori zVllka i govora. Modem se moze koristiti kao ulazno-izlazna jedinica za komunikaciju dvaju kompjutera. Kao sto je slueaj sa svim kompjllterima, tako je i hardver bezivotan bez softvera. I ovdje softver ima dvije komponente: sistemski i aplikacioni softver. Najvaznij i paket sistemskog softvera je operativni sistem. Meau najpoznatije operativne sisteme kod danasnjih mikrokompjutera spadaju: MS-DOS, UNIX, OS/2, Windows, System17, QNX, NeXT. Druga vazna grupa sistemskih programa su prevodioci kompjuterskih jezika, kako im samo ime kaze prevode programe pisane u nekom oel kompjuterskih jezika (C, Pascal, FORTRAN, COBOL, itd.) u masinski jezik koji "razumije" CPU. Slijedeca vazna vrsta sistemskih programa za mikrokompjutere su sistemi za upravljanje bazama podataka (DBMS). Oni olaksavaju i standarelizuju stvaranje, oddavanje i koristenje baze podataka. Popularni DBMS paketi za mikrokompjutere su: dBASE III+, Clipper, Clarion, Fox Base, Paradox, Oracle, SQL i dl'. Tri su osnovna tipa DBMS ito: ./ Hijerarhijski ./ MreZni ./ Relacioni
./
Da bismo stekli bolji lltisak 0 tome kako mikrokompjuter funkcionise, pogledajmo jedan IBM PC kompatibilni kompjuter. Integrisana kola (eng. integrated circutis - iii eipovi), koja su u njega ugractena nalaze se u plastienim kl1Cistima koja su iJi zalemljena na stampanu ploeu iii mehanicki uglavljena u lezista koja su sama zalemljena za maticnu ploeu. Meausobno su povezana elektricnim vodovima, a tu SLI otpornici i kondenzatori. Glavna komponenta je eip koji sadrzi mikroprocesor, U ovom slucaju tipa Intel 80486, veoma visokih performansi. Radni takt ovoga mikroprocesora je 33 MHz (megaherca-miliona ciklusa u sekundi). MIKROPROCESOR
GLA VNA MEMORlJA
/-Z~7l!]lUJ Itt 1 SJSTEMSKi BUS
tI
1
(clat~
DRUGI SISTEl'vlSKI KONTROLERJ I UREflA.Jl
bus - address bus - control bus)
1
Tastatura interfejs
Video clisplej
Paraielni inrerfe:js
kontroler
kontroler
kontroler
t 'if
Flopi disk kontroler
t I
!
Slika 1.3 Hardver mikrokompjuterskog sistema Memorijski cipovi PC kompjutera sadrze 32 KB (Kilobyte - kolieina od 1024=2 10 bajta). Najveci dio eipova memorije za citanje i pisanje se koristi za smjestanje aplikacionih programa i korisnikovih podataka. Mikrokompjuteri koriste ROM iii RAM cipove za primarnu memoriju. Kapacitet primarne memorije se tipicno mjeri stotinama kilobajta iii megabajta. Pri tome se velieina memorije sastoji od RAM eipova. U RAM memoriji se smjestaju podaci i programi koje mikrokompjuteri izyr.savaju za korisnika. U ROM memoriji, koja se ne moze pisati, tj. modifikovati, cuvaju se odreaeni dijelovi operativnog sistema koji treba da budu na usluzi sve vrijeme rada mikrokompjuterskog sistema. Najpopularniji mediji sekundarne memorije za mikrokompjutere su magnetni diskovi, bilo diskete iIi fiksni diskovi. Kapaciteti 10
Postoji mnogo paketa aplikacionih softvera koji se mogu koristiti na danasnjim mikrokompjuterima, a neki od njih sluze za: ./ Obradu dokumenata - programi koji automatizuju kreiranje, modifikaciju i stampanje dokumenata elektronskom obradom tekstualnih i slikovnih podataka. 11
FORTRAN programiranje za
./
./
./
./ ./
./
./
windo~vse
Elektronske tabelarne proracune - programi koji prikazuju tabele u cije celije, poredane u redove i kolone, korisnici mogu ubacivati podatke i formule, kreirajuci model svog problema, Graficke primjene - kompjuteri su sposobni pretociti grupe tekstualnih podataka u tabele, dijagrame i os tale vrste prikaza. Ovdje spadaju paketi kao 5to je Harward Graphics, Corel Draw, PhotoPaint i dr. Rad u integrisanom okruzenju - postoji niz, za korisnika veoma ugodnih, radnih platformi koje povezuju i omogucavaju istovremen rad raznih komplikacija. Takve platforme naJcesce su: Presentation Manager operativnog sistema OS/2 na PC kompjuterima, GEJ\:I na Macintoshovom operativnom sistemu Systeml7, te odgovarajuce komponente operativnog sistema Windows i NeXT. Opste poslovne primjene - kompjuterski programi za takve primjene su obracuni plata, analiza prodaje, vodenje inventara itd . Zabava i hobiji - jedan od cestih vidova upotrebe mikrokompjutera za mnoge korisnike postale SLJ igre. Mec!u igrama se mogu naci i one koje jacaju logicko razmisljanje, prostorno snalazenje, brzinu reakcija i dr. Kucne primjene - u voc!enju domacinstva takoc!e se mogu koristiti l11ikrokompjuteri. Npr. vOdenje evidencije 0 placanju racuna, utrosku struje, vode i dr. Obrazovanje i licni razvoj sa sirokim spektrom programa koji se mogu naci u raznil11 dOl11enima takoc!e se mogu upotrijebiti l11ikrokompjuteri za sire obrazovanje. Memorisanje informadja u memorijskoj jedinici (binami sistem, oktalni sistem, heksadecimalni, 32-bitni) Rinarni sistem brojeva
U obicnom radu, iIi dosadasnjem radu, koristili smo decimalni sistem brojeva koji se sastoji od brojeva 0,1,2,3,4,5,6,7,8,9 na osnovu kojih mozemo napisati bilo koji broj. Svakom broju odgovara odreaena potencija od baze 10.
Uvod u racunare
i+21=3 =II 4=100 5=101 6=IIO Prednost ovog sistema jeste u tome sto je prilicno jeclnostavan, jer se sve 4 racunske operacije mogu svesti na sabiranje i oduzimanje. Binarni brojevi su 3,3 puta cluzi od obicnih i imaju 3,3 puta vise znakova. Medutim, to SLl jedine mane, ali Ll primjeni racunara prednosti su visestruke. Binarni znakoviu racunaru ostvaruju se kao elektricni signali kod kojih je jedinica pozitivni napon, a binarne nl1le nulti napon, tj. bez napona, a ti znaci su u racunaru upisani na principu magnetizma. Oktaini i heksadecimalni sistem brojeva Posto je binarni broj duzi od decimalnog, daje nepregledan i nepogodan za citanje, onda se umjesto binarnog sistema koristi oktalni iIi heksadecimalni sistem brojeva. Njime se koristimo kad zelimo interpretirati iii raditi sa binarnim brojevima, npr. zelimo dati sadrzaj memorije (DUMP). Okta1nim brojevima je baza 8, a heksadecimalnim brojevima je baza 16. Na taj nacin jedna okta1na zamjenjuje tri binarna, ajedna heksadecimalna cetiri binarna znaka. Oktalni sistem brojeva koristi znake 0-7,a proizvoljan se broj predstavlja zbirom proizvoda tih znakova i odgovarajuce potencije od baze 8.
Primjer: 2 1 423(8) =4.8 +2.8 +3·8° =256+16+3=257(10)
Da bi se oktalni broj pretvorio u binarni potrebno je svaki oktalni znak pretvoriti U odgovan0uci troznamenkasti binarni broj. 465 (8) = 100
Npr. Broj 357,06 3· 10 2 + 5 . 10 1 + 7.10° + O· 10-1 + 6 .10-2 Binarni sistem je mnogo jednostavniji i sastoji se od sarno dva znaka: 0 i 1. Za razliku od decimalne jedinice upotrebJjava se rimska oznaka I iii slovo L.
12
WI
Heksadecimalni sistern brojeva irna za bazu 16 i sastoji se od: 0, 1,2,3, 4,5,6,7, 8, 9, A, B, C, D, E, F. Primjer:
3EC(16) Prirnjer: Binarni znaci nazivaju se BIT (BINARY DIGIT) 0=0 =0 2°=1 =1 2 1+°=2 =IO
no
= 3.16 2 + 14 .16 1 + 12 .16 0 = 1004(10)
13
___________ u=-_vo,-,d-,-,,-u-,--r=ac:..:~l=tn:..:.a=r=e_ _ _ _ _ _ _ _ _ __
FORTRAN programirwrje za windowse
Tabela !.1
00100001 00100010 00 IOO() II 00100100 00100101 00100110 00100111 00101000 00101001 00101010 00101011 00101100 0010110 I 00101110 00101111 OOIIIOID 00111D11 00111100 00111 101 0011 I I 10 00 I I I I I I 01000000 01011011 01011100
41 42 43 44 45 46 47 50 51 52 53 54 55 56 57 72 73 74 75 76 77 IDO 133 134
21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 3A 3B 3C 3D 3E 3F 40 5B 5C
90 127 123 91 108 80 125 77 93 92
01011101 93 01011110 94 0101111 1 95 oI 100000 96 01100001 97 o11000 10 98 99 ! 01100011 01100100 100 01100101 101 01100110 i 102 103 I 01100111 01lO1000 104 01101001 105 01101010 106 01101011 107
135 136 137 140 141 142 143 144 145 146 147 150 151 152 153
5D 5E SF 60 61 62 63 64 65 66 67 68 69 6A 6B
-
I
"
#
A B C D E F G H T
65 66 67 68 69 70 71 72
i
74 75 76 77
J
K
I
!
L
M N
78
0 P
79 80 81 82 83 84 85 86 87 88 89 90 48 49 50 51 52 53 54 55 56 57 32
Q R
S T U V W
X Y
Z
0
I 2 3 4 5 6 7 8 9 Blank 14
73
,
I
01000001 01000010 0100001 I 01000100 0100010] OlOOOllO 01000 I I I 01001000 01001001 0100.1010 0100101 I 01001100 01001101 0100 I I 10 OIOOlIII 01010000 01010001 01010010 010 lOO I0 0101001 I OIOIOIOI 01010! 10 01010111 01011000 01011001 01011010 00110000 0011000 I 00110010 00110011 00110100 00110IOI 00110110 00110 III 00111000 00111001 00100000
101 102 103 104 105 106 107 110 III 102 113 114 lIS 116 117 118 121 122 123 124 125 126 127 130 13 I 132 60 61 62 63 64 65 66 67 70 71 40
I
I
41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 30 31 32 33 34 35 36 37 38 39 20
I I OO()OO I 193 194 110000 I 0 195 I 10000 I I 196 I 1000 I00 197 11000 I0 I 198 11000110 199 I 100 II I 200 I 100 I000 201 1100 I 00 I 209 11010001 210 11010010 21 I IIOIOOll 212 11010100 213 11010101 IIOlOllO 214 215 I 10 101 II 216 11011000 110 II 001 217 226 I 101 1000 227 II lOOOI J 228 11 100l 00 229 1] lOO 10 I 230 11100110 231 I I I 100 III 232 I I 101000 233 11101001 240 11110000 241 I II 10001 111]0010 242 243 1]110011 244 I III IOIOO 245 11110101 246 I I I 101 10 247 J U 101! I 248 11111000 250 11111001 01000000 64
I
I
I
301 CI 302 CH 303 C3 304 C4 305 C5 C6 306 C7 307 310 C8 311 C9 321 I DI D2 322 D3 323 D4 324 325 D5 326 D6 -~ D7 327 330 I D8 : 331 D9 E2 342 343 I E3 344 E4 65 345 346 E6 E7 347 Ell 350 351 E9 FO 360 FI 361 362 F2 F3 I 363 F4 364 365 F5 366 F6 367 F7 370 F8 371 F9 100 40
$ %
& ( )
+
comma, minus /
<
> '? @
[ [
\ 1 1\
-
a b
c d
e f 'J b
h
i J I
k
I
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 58 59 60 61 62 63 64 91 92
I I
78
107 96 75 97 122 94 76 126 110 III 124 -
OlOllDlO
01111111 01111011 01011011 01101100 01010000 01111101 01001101 01011101 01011100 01001110 OliO 10 11 01100000 01001011 01100001 OllllOlO 01011110 o100 II 00 OIl I I 110 01101 I 10 01101 I I I 01111100 ------------
132 177 173 133 154 120 175 lIS 135 134 116 153 140 113 141 172 136 114 176 156 157 174
SA 7F 7B 5B 6C 50 7D 4D 5D 5C 4E 6B 60 4B 61 7A 5E 4C 7E 6E 6F 7C
-
340
EO
-------------
-
-
109
-------------
-
-
01101101
155
6D
-
-------------
-
224
129 130 131 132 133 134 135 136 I 137 I 145 146
II 11100000
201 10000001 202 10000010 203 10000011 10000100 204 205 10000101 206 10000110 207 100001li 10001000 I 210 211 10001001 221 10010001 222 10010010
-
81 82 83 84 85 86 87 88 89 91 92
15
Uvod u racunare
FORTRAN programiranje za windowse I
108
m
109
n
I 10
0
III
01101111
P
112
01110000
q
113
01110001
161
r
114
01110010
162
s
lIS
01110011
163
01101100
154
6C
oI I () I 101
155
6D
]48
01101110
156
6E
149
157
6F
150
100 I 0 II 0
160
70
151
10010111
71
152
72
153
73
147
I
10010011
--------------------------223
93
I 00 I 0 100
224
94
10010101
225
95
226 I 227
96
10011000
230
98
100] 1001
231
99
162
10100010
242
A2
97
l
J 16
0] 110100
164
74
163
10100011
243
A3
u
117
01 J 10101
165
75
164
10100100
244
A4
v
118
01110110
166
76
165
10100101
245
AS
w
119
01110111
167
77
166
10100110
246
A6
x
120
01111000
170
78
167
10100111
247
A7
Y
121
01111001
171
79
168
10101000
250
A8
z
122
01111010
172
7A
169
10101001
251
A9
{
123
01111011
173
7B
192
11000000
300
CO
I
124
01111100
174
7C
79
01001111
117
4F
}
125
01111101
175
7D
208
11010000
320
DO
-
126
01111110
176
7E
-
------------
-
-
DEL
127
01111111
177
7F
-
-------------
-
-
¢
------
----------
-----
-------
74
01001010
112
4A
/
-------
----------
-----
-------
95
01011111
137
5F
I
i
3.3 PROGRAMSKI JEZICI
Masinski jezik i Asembier Prvi su se racunari programirali samo u masinskom jeziku. Program u masinskom jeziku sastoji se od niza nula i jedinica pa je gotovo necitljiv za ljude. Da bi se olaksalo citanje i pisanje, uveden je simbolicki zapis programa koji se zove Assembler. ledna naredba Assemblera prevodi se u jednu naredbu masinskog jezika. Svaki procesor ima razlicit masinski jezik, pa ima i razlicit Assembler. On je vrlo neproduktivan sa gledista programera, ali se njime mogu maksimalno iskoristiti sve mogucnosti racunara. On se i danas upotrebljava za pisanje kratkih kriticnih dijelova programa kad je potrebno postici maksimalnll brzinu i efikasnost. Da bi se ipak, koliko je moguce, povecala produktivnost programera, uvedena su razlicita poboljsanja U odnosu p·re,ma masinskomjezikll. Npr. niz asemblerskih naredaba koji se vise puta upotrebljava, moze se zamijeniti jednom makronaredbom.
16
Proceduralni jezici Ubrzo su se pojavile ideje visib programskih jezika. Ti jezici su orijentirani prema problemu koji se rjesava, pa su citljivi i za !jude, ali racunari ne mogu neposredno izvrsavali tako napisane programe. Potrebno je prije prevesti programe na masinski jezik. Citljivost za !jude je vazna zbog lakseg ispravljanja pogresaka, modifikacija, ucenja tehnike prograllliranja itd. Svaka naredba u visem programskom jeziku prevodi se obicno u mnogo naredbi masinskog jezika pa se visilll jezicima znatno skracuje zapis program a i ml1ogostruko povecava procluktivnost program era. Programi za prevodenje s viseg u masinski jezik zovu se interpreteri i compileri. To su zapravo kompjuterski programi ciji su ulazni poclaci naredbe II viselll programskom jeziku, a rezllitati naredbe u Assembleru. Visim programskim jezicima pripadaju ALGOL, FORTRAN, BASIC. PASCAL, C. FORT!!, COBOL, PLl,MODULA-2, ADA, ... Navedeni se jezici ZOVll proceduralni, jer se u njima masini propisuje svaka operacija koju treba izvrsiti. Svaki jezik ima svoje karakteristike i svoje podrucje primjene. Stepen citlj ivosti programa za ljude bitno ovisi 0 sistematicnosti programera, mnemotehnickom izboru imena varijabli, podjeli programa na potprograme itd. Da bi se omogucilo programerima da pislI programe maksimalno pregledno i citljivo, uvecleno je tzv. strukturno programiranje koje predstavlja niz pravila za dobru organizaciju programa, te programski jezik koji nastoj i onemoguciti nj ihovo krsenje. Takvo strukturno programiranje se primijenilo u jeziku PASCAL. Kasnije je autor PASCALA, Niklaus Wirth, tu ideju usavrsio u jezicima MODULA-2 i OBERON. S c1ruge strane, disciplina koja namece strukturalno programiranje predstavlja ogranicenje slobode progralllera I smallJenJe tleksibilnosti, posebno kad se radi 0 nestandardnim zahtjevima u sistemskim programima. Za izradu takvih programa vrlo je popularan jezik C, premda odstupa od pravila strukturalnog programiranja. Dobar programer se ipak drzi discipline, osim na onim mjestima u programu gdje je "nedisciplinirano" rjeSenje jednostavnije.
Masinski jezik
Kod operanda
Operand
JOlO
11001
(Zamijeni tekuGu vrijednost u akumulatoru za vrijednosti Y na lokaciji flOOI)
IOJJ
11010
(Dodaj vrzjednost Z na lokaciji I IOlO na vrijednost Z it akumulatoru) 17
FORTRAN priJRramimnje za windowse
__________________________~[_~)_C_)c_l_lI_r_(_lc_·i~Il~/[~lr~e___________________________
Funkcionalni jezici 1100
11011
(Pohrani vrijednost Xu akumulatoru IW lokaciju lIOll )
Asemblerski jezik Kod operanda
Operand
LD
X
(Na[Jllni X u akumulutor)
AD
y
(Dociaj YakullwLatoru)
ST
z
(Pohrani re::.ultat u Z)
Jezici PRO i MIRANDA. primjeri su funkcionalnih jezika. LISP je takode funkcionalni jezik iako ima i pfoceduralnih elemenata. LISP je najpopuldrniji funkcionalni jezik koji se (kao i PROLOG) mnogo upotrebljava u poclrucju "ullljetne inteligencije". Funkciollalni jezici opisuju citave programe pomocu niza Illedusobno nezavisnih funkcija. Ne postoje globalne varijable. Ovi su jezici takode vrlo produktivni za programera, ali najcesce sporiji za racunar od proceduralnih. PonekacI su deklarativni jezici bolji oel funkcionalniil, dok je Ll nekim clrugim situacijama obrnuto. Teoreticari "umjetne il1teligencije" predvic1aju cIa ce jezici sljedeee generacije, koji ce precistavijati poopeenu sintezu obaju tipova jezika, biti mnogo pogodnij i od jednih i clrugih. Takvi jezici danas jos ne postoje jer nije dovoljno razvijena potrebna teorija. Objektno orijentirani jezici
Jezik visokog nivoa Fortran
X=Y+Z
Cohol
COMPUTE X=Y+Z
Jezik 4. generacije
Danas se takode intenzivllo razvijajll objektno orijentirani jezici. Prvi njihov predstavnik je SMALLTALK. Osnovna je ideja da se clefiniraju objekti i operacije meau njima. Normalno, ista operacija ima razlicito znacenje kad se primjenjllje na razlicite objekte. Novi objekt moze, po zelji programera, naslijecliti neka svojstva od prije definiranih objekata, a druga se svojstva mogu posebno definirati. Tako se opis slicnih ali ne potpuno jednakih objekata zllatno skracuje, pojednostavljuje i cini jos pregleclnijim. Time se poveeava efikasnost ___________ progranlera.
SUiv! THE FOLLOWING TWO NUMBERS
Deklarativni jezici Osim proceduralnih jezika uvedene Sll i druge vrste jezika. PROLOG je primjer deklarativnog jezika. U njemu se opisuju relacije meau simbolickim objektima i pravila stvaranja slozenijih relacija uz pomoc jednostavnijih. Korisnik zatim moze postavljati pitanja na koja program odgovara. Programer ne mora opisivati postupak trazenja odgovora jer je postupak ugraaen u sam jezik. Time se u odnosu prema proceduralnim jezicima visestruko ubrzava rad programera, barem za one za koje je PROLOG pogodan a to je posebno u podrllcju "lImjetne inteligencije". Ipak se programi u PROLOG-u redovito sporije izvrsavaju nego u proceduralnim jezicima.
18
Cini se ela jezik SJ\!lALLTALK nije postigao narocitu popularnost, ali icleja objektne jest, pa su nastale nove objekll1o orijentirane verzije mllogih vee oel prije postojeeih jezika. Tako je nastao C++ (objektno orijentirana verzija jezika C), nekoliko varijanti objektno orijentiranog PASCliLA, OBERON (nastao evolucijom PAS'CALA i MODULE-2) itd. Postoji i objektno orijentirana verzija PROLOG-a. Paralelni i vektorski jezici Da bi se iskoristile prednosti raclinara s paraleinim procesorima, jezici se moraju prilagoditi takvoj arhitekturi racunara. OCAM je kOl1cipiran specijalno kao jezik za paralelne procesore transportere, ali su razvijene "paralelne" verzije mnogih paralelnih programskih jezika od FORTRAN-a dalje. Postoji i PARLOG, 5to znaci "paralelni PROLOG". Slicno postoje i varijante raznih jezika za vektorske procesore.
19
FORTRAN progrc/illiranje ~([ windmvse
Automatsko generiranje programa Godine 1978. izraden je program namijenjen generiranjll FORTRANskog programa za metodu konacnih elel11enata. Upotrijebljen je sil11bolicki jezik /vJACSYMA koji analiticki provodi operacije s polinol11il11a, ukljucujuei derivacijll i integracijll. Slieni su programi izradeni za kvantnu fiziku, nebesku mehaniku, opeu relativl1ost, fiziku plazme i hidromehaniku. , U posljednje se vrijeme razvilo vise specijalnih programa za pisanje kompjuterskih programa na bazi malog broja zahtjeva. To se podrueje zove CASE (Computer Aided Software Engineering). Mnogima od tih programa zadaje se dijagram toka koji se pomoeLi specijalnih editora crta na ekranu, a oni generiraju program u nekom visem jeziku. Za sada se CASE primjenjuje najvise za poslovne programe. Generatori compilera
Compileri su se na poeetku pisali u Assembleru a kasnije i U V1Slm jezicima. Zanimljivo je da je prvi PASCAL compiler napisan u PASCAL-u, a FORT!! compiler u FORTII-u. Pisanje cOl11pilera je vrlo opsezan i tezak posao pOl se pojavila ideja stvaranja specijalnih jezika za pisanje compilera. Ti se jezici zovu generatori compilera iIi compiler compileri. To su specijalni programi kojima su ulazni podaci opisi sintakse i semantike visih jezika za koje se zeie generirati compileri, a rezultati su sami compileri. To su COCO, CERES, YACe. Generatori compilera mogu se, osim navedenoga, primijeniti i za pisanje ulaznih modula kompjuterskih programa U obliku specijaliziranih jezika. "Umjetna inteHgencija" AI Treba odmah istaknuti da naziv "umjetna inteligencija" (AI - Artificial Inteligenee) stvara zabunu kod neupueenih jer je pretjeran i neadekvatan. S druge strane, on je odomaeen u svjetskoj literaturi pa ga je sada tesko zamijeniti nekim skromnijim i pogodnijim nazivom. Radi se zapravo 0 revolucionarnom tipu softwera kod kojeg je dominantna manipulacija simbolima. Pri tome se doista postizu izvanredni rezultati ali to nije inteligencija. AI treba shvatiti kao termin koj i nema doslovno znacenje. To je podrucje u intenzivnom razvoju i, kako je spomenuto, dosadasnji su rezultati impresivni. AI se bavi problemima prirodnog jezika, eksperimentalnim sListavima, prepoznavanjem oblika, robotikom, analiwm i sintezom glasa, automatskim dokazivanjem matematickih teorema. generiranjem kompjuterskih programa i mnogim drugim. Granice izmeau AI i konvencionaln_og programiranja nisu evrste jer se iskustva AI sve vise prihvaeajll i II drllgim podruejima.
20
----------------------------Uvod u racunare Prirodni jezik To je bilo koji ljudski jezik, u praksi najeesee engleski. Nastoji se da jezik komunikacije eovjeka i masine bude 5tO blizi prirodnom jeziku. To se upotpunjuje hardwareom i softwareom za analizu i sintezn ljudskog glasa, pa ee uskoro covjek usmeno razgovarati s raeunarom. Dakako, pravi je prirodni jezik govor koj im se !judi medusobno sporazumijevaju, pun asocijacija, nepreciznosti, dvosmislenosti, ironije i drugih teskoea za cije je razumjevanje potrebna prava inteligencija. Razgovor eovjek - racunar ee se odvijati ipak, barem neko (po svojoj prilici ne bas kratko) vrijeme, na jeziku koji je samo donekle sliean prirodnom. Vee danas neki konvencionalni programi imaju takav ulazni dio.
Ekspertni sistemi To su progral11i koji zal11jenJu.lu zivog eovjeka eksperta. Upotrebljavaju se za probleme 0 kojima postoji "meko znanje" te za probleme s "kol7lbinatorickom ekspZozijom". "Jvleko znanje" je ono koje ima samo pribliznu - najcesee empirieku vrijednost (npr. l11edicinska dijagnostika), za razlikll od npr. aksiomatski zasnovanog znanja matematike koje se moze nazvati "tvrdim" Ekspertni sistemi sadrZe "baz.u znunjCl". To je niz pravila kojima se iz podataka izvode zakljueci u konkretnoj situacij i. Osim toga redovno su povezani s bazama podataka. Cesto se sluze "mekom logikom" (Fuz.zy logic). To je logika kod koje ni premise ni konkluzije nemaju potpunu sigurnost. Ekspertni sistemi mogu zakljucivati i na osnovi nepotpllnih i djelimieno pogresnih podataka. Korisnik, osim rezultata, moze dobiti i objasnjenja 0 upotrijebljenim pravilima i logiekim koracima. Baza znanja moze se form irati 1I konsultacijama tzv. znzenjera znanja sa zivim ekspertima. J)ruga je moguenost da se programu "pokazuju" primjeri s rezultatima iz kojih onda program indllktivno "uci" pravila.
Neuralne mreie One SLl vee opisane 1I vezi S razvojem hardwarea. Osim hardverskih razvijene su i mnogo jeftinije, ali sporije softverske simulacije tih mreZa. One formalno ne spadaju u AI, ali konkuriraju ekspertnim sistemima prema podrucju primjene. Umjesto programiranja one se "treniraju" na primjerima. Postoje suprotna misljenja medu vrhunskim ekspertima 0 blldllenosti neuralnih mreza. Uglavnom svi se slazu da ee takve mreze imati znaeajnu primjenu u interpretacij i podataka koj i ulaze u raeunar preko senzora. Npr. opticki senzor "gleda" nacrt a neuralna mreza ga interpretira i konvertira u digitalne podatke koji onda ulaze u program za staticki proracun, troskovnik i ostalo.
21
FORTRAN progr({lilirollje
W IVilldmvse
4. RAZVOJ ALGORITMA I PRAVLJENJE PROGRAMA Pisanje kompjuterskog programa za ljesavanje problema je visesrepeni proces koj i se sastoj i od najmanje cetiri glavna koraka. ZabiljeZeno je da je samo jedan clio ovog procesa fokusiran na koristenje odreoenog programskog jezika. Ostala tri koraka odnose se na razvoj i pristup rjesavanju problema. Prvi korak razvoja programa je najznacajniji. Ako brizljivo definisete problem, L10cicete da je rjesenje jeclnostavno, a ako ga pogresno clefinisete, iniJ{:ete vel ike teskoce 1I kasnijim koracima. Drugi korak u razvoju programa je pravljenje algoritma. Algoritam je lllapa za izbor ljesenja problema. Ovom semolll se precizllo odreouje red kojim· ce se izvrsavati jJ!·ogram. Kao sto se moze vicljeti, svi problemi, bez obzira koliko slozeni bili, mogu se reclukovati na kombinacijll samo tri osnovna bloka izgradnje. Dalje se da uvidjeti da je algoritam nezavisan od jezika (programskog). To znaci cia programer 1I FORTRAN-ll moze koristiti algoritam razvijen i od programera koji radi sa Paskalom. Treci korak 1I razvoju programa jeste kocliranje, tj. konverzija (prevoctenje) algoritma u zeljeni programski jezik. Algoritam daje programeru vizuelan pregled rjesenja, ali je isuvise neprecizan za njegovo izvrsavanje na racunaru. Zbog toga 11l0ramo promijeniti algoritam u mnogostrukturnu semu izvornog koda iii progral11a. Program ce slijediti odredena pravila zahtijevana 00 ocirectenogjezika (tj. svaki program il11a svoja pravila pisanja). ZavrSni korak u proceSLl programiranja jeste testirnje i otklanjanje siabih tacaka. Vecina programa saorzi 'siabe tacke' koje se mogu rangirati 00 jednostavnih gresaka Ll primjeni jezika (sintaksne greske) do kompleksnih gresaka u samom aigoritmu (lol;ic)
Uvod u raCUf7are
----------------------~
Svaki od ovih blokova moze imati nekoliko razlicitih varijanti, ali Sll lIvijek prepoznatljivi. Npr., operacija grananja nastaje izborom izmeoll clva alternativna bloka instrukcija. Ali tll su i drugi oblici ovog operatora gdje se bira izmec1u tri iii vise izbora. Tri osnovna bloka uz odgovarajuce simbole sel1le toka, gclje su koristene stanclardne figure za prikaz oclredenih programskih instrukcija, clata Sll na slici 3.1. KOl1lbinovanjel1l ovih simbola 1110zete izracliti mapu algoritl11a koja cini 111110go laksim vizuelno rjesenje problema. Strelice na clijagramu toka su redosljed izvrsenja naredbi u programu. Logicka kontrola se vrsi jeclnostavnim slijedol11 strelica elo sIjeelece naredbe (instrukcije) za izvrsenje. Simbol paralelograma se koristi za preclstavljanje ulaznih iii izlaznih poelataka. Ulaz se obicno (ali ne Llvijek) koristi na pocetku program a, clok se izlaz obicno daje na kraju. Zaclnji simbol II sekvencionalnoj kategoriji je pravougaonik koji preclstavlja proces kao 5tO su matematicke operacije.
4.1 OSNOVNE PROGRAMSKE STRUKTURE Uvicljecete cia Sll vam potrebna samo tri osnovna bloka izgraclnje za razvoj ljesenja problema. Ovi blokovi su nezavisni od jezika i mogu se koristiti za razvoj konceptualnog plana za rjesenje problema. Tri osnovna bloka su: / sekvencionalno-izvrsne, gdje se instrukcije izvode jedna za drugom, / razgranate operacije, gclje se odreduje izvodenje jedl)og bloka instrukcija iii clrugog, / operacije preskakanja, gdje se blok instrukcija ponavlja. 22
23
Uvod u rae un are
FORTRAN programiranje za winc/owse
Primjerl_1: Napraviri algoritam i semu toka za racunanje tezine w suplje kugle, precnika d, debljine zida t i specificne tezine y, koristeci slijedece formule: d
Koraci razvoja programa: logick~
greskc
sinlaksne greske
fo
=-
2
d
r =--t
f--I I Y
,
READ *,X,Y
2
IFeX.LE.Y) THEN
~ \ I I~ EL~~X*Y '--y'
M ~
~
a) programski konccpt
b) razvoj algorilm<-t
BLOK
Z=X/Y
w=y·
I ~
L
V
END IF
1"'N"'2 c) programsko kodiranje
SemLl toka
A igoritwn
d) isprJ.vljanj.; gresaka
FUNKCIJA
sekvencionalnc narcdbc
grananje
'--y'
SIMBOL
Racunanje vanjskog poluprecnika 1'0
bczuslovni prclaz Racunanje unutrasnjeg poluprecnika rj ulaz iii izlaz Racunanje zapremine kugle l)roces w=Llv
V
Racunanje teZine kugle w
uslovni preiaz
uslovna petlia
Primjer 1_2: Napraviti algoritam i semu toka za racunanje tezine w suplje kugle, precnika d, deblj ine zida t i specificne tezine y, koriste6i slijede6e formu Ie:
petJje
SIika 1A Osnovni blokovi izgradnje programa 24
25
FORTRAN prograllliral1je za windowse
_____________.-:=Uvod u racunare Pril17jerl_3: Prepisati prethodne primjere, s tim cia se racuna tezina kugle za razlicite ulazne podatke.
d ro =2 d r· = - - t 2
Sema toka
Aigoritam
I
V=~'TC.(r~ -r/) Read d, t, Li
w=y·v Sve prol'acune smo smjestiliu jecinu procesnu kutiju cia pojecinostavimo sel11u toka. Takocter Sl110 koristili iste simbole u semi i za ulaz i za izlaz. Oak se koriste ovi isti simboli, obicno se u njih jos cloclajll i natpisi Read iIi Print da bi se izbjegla zabuna. Zaclnja sekvencionalna naredba jeste neuslovni prelazak. Ovo je jedlla ad jednostavnijih naredbi. To je prosto premjestanje izmeau tacaka u programll. Ova naredba odgovara GO TO naredbi. Mozete koristiti ovu naredbu za ponavljanje niza drugih instrukcija, npr. 5kok preko drugog niza instrukcija.
Serna taka
~'Ii==d/2 ri
== d/2 - t
v == 4rr13(rr/-r/)
w == Liv
Unosenje precnika d i podataka t i Li
Racllnanje unutrasnjeg i vanjskog poluprecnika ro i rj Racllnanje zapremine kugle v Racllnallje tezine kugle w
Stampanje podataka vi w i ponovni unos podataka
Ai gorita/11 Operacije grananja Unosenje precnika d i podataka t i L1
"0 == d/2 rj==d/2-t v == 4rr13(r/-r/)
w == Liv
Racunanje unutrasnjeg i vanjskog poillprecnika ro i rj Racunanje zapremine kllgle v Racunanje tezine kugle w
Sa sekvencijalnim instrukcijama, kompjuter lzvrsava instrukcije jednu za drugom. Nema 11l0gucnosti preskakanJa preko jedne instrukcije sa sekvencijalnom operacijom. Meautim, cesta se javlja potreba za grananjem. Grana je tacka u programu gclje ce kompjuter oclluciti koji ce !liz instrukcija izvrsiti. U FORTRAN-LI ovo grananje predstavlja izbor izmeau dvije alternative. Na pitanje koje koristimo za odluku na koju granu ce preci, odgovor 1110ze biti samo DA iIi NE. Sematski simbol za grananje je romb u koji se postavlja pitanje. Pitanje se mora postaviti tako da je jedini 1110guci odgovor LI izlazu DA iIi NE. Tacla, zavisllo od odgavora, kontrolne strelice vode u jednom iIi drugom smjeru.
Stampanje podataka v i w
26
27
FORTRAN programiranje za windowse
Uvod u racunarc
----------------------------------------
Sema toka
Alr;oritam
Pril7ljerl_4: Napraviti algoritam i semu toka za citanje elva broja i odreouje da Ii su jeelnaki.
Ucitaj r, x, y Sema toka
Algoritam
(X 2+./)'12
ne
< r"
Unesi vrijednosti xi y poc!rLlcja"
Da lije (X2 + /)112 < r? Ako jeste, stampaj 'unutra' Racunaj z = (X2 + /)112 Stampaj z Ako nije, stampaj 'van'
x jednako y ?
Ako j'iste pisi 'jednako' Ako riije pisi 'nije jednako' Kraj grananja
Kraj grananja
Stop
Primjerl _5: Napraviti algoritam i semu toka za odrec1ivanje cia Ii taci
Ugnijeidene operaci:je grananja
U prethodnom primjeru grananja bile Sl! moguce samo dvije alternative, ali u mnogo slucajeva 1l10ramo praviti izbor izmec1u vise nego dvije alternative. Jedan oci mogu6ih nacina za rjesenje ovog problema jeste umetanje jedne operacije prebacivanja s drugom. Primjer J_6: Napraviti algoritam i semu toka za provjeru da Ii je broj N negativan, pozitivan iii jecinak nuli.
28
29
FORTRAN programironje za windowse
[!vod u racunare
----------------------~
,~ema toka
Alr;oritam CV
Ucitaj n CV=I
da
II
< ()
?
nc
Da Ii je n
CV=2
CV=3
CV=4
lT
Kraj pelljc Kraj petlje
Primjerl_7: Napraviti algoritam i semu toka za racunanje vrijeclnosti, a na osnovu formule: a = y*z a=31z a = 5*y/z
kadaje x = I kaclaje x = 3 kadajex=5
Sema toka
Algoritam
Struktm'a odabira slucaja (Select Case) Jednostavniji nacin rjesavanja problema visestrllke alternative Jeste struktura odabira slllcaja. Ova naredba nije aktivna u FORTRAN-u 77. Na slijeclecem dijagfall1U prikazana je ova strukturno Otvoreno je nekoliko alternativa, ali se samo jeclna moze izv[siti. Nakon ovog niza izvrsnih instrukcija ide se na kraj strukture. Mozete imati onoliko alternativa koliko zelite. Kompjuter odlucuje koji ce set instrukcija izvrsiti ispitivanjem vrijednosti CV. Ako je CV = 1, izvrsit ce se instrukcija ispod CV = I, i tako dalje za sve druge mogu6e vrijeclnosti CV.
Ucitaj vrijeclnosti x, y, z x
Oclaberi sIucaj (na osnovu vrijednosti x) a = y*z kadaje x = 1 a=31z kaclaje x =3 a = 5*ylz kadaje x = 5 Kraj odabira slucaja
Stampaj vrijednost a
30
31
FORTRAN programiranje za windowse
Petlje Petlje Sll treci glavni tip kontrolne strukture koj i je potreban za izvrsenje. Postoje dva razlicita tipa petlji, petlje sa brojacem i uslovne petlje. Petlja sa brojacem ponavlja odrec1eni broj pula n~redbe, dok uslovna petlja ponavlja dok se ne zadovolji postavljeni uslov. Razlike izmeoll ove clvije struktllre Sli bitne. Brojac u brojivoj petlji clrzi put izvooenja petlje. Kada brojac otkrije jeclnolll predefinisani broj, petlja se zatvara. Vazna tacka 1I ovomje claje granica za broj izvodenja naredbi odreoena prije samog pocetka petlje i lle moze se izmijeniti kada se petlja pokrene. Uslovna petlja, u clrugu ruku, nellla clefinisanll tacku prekicla, Svaki put kacla se petlja izvoditestira se i oclreduje kacla ce se zaustaviti. Brojiva petljaje najcesce koristena petlja u kompjuterskim programima. Sestougaonik je sematski simbol za brojivu petlju. Unlltar sestougaonika upisuje se pocetna i zavrsna vrijeclnost za kontro!nu vrijeclnost petlje. Takode se claje korak kojim ce kOlllpjuter definisati koliko puta ce izvrsiti petlju,
Primjer 1_8: Napraviti algoritam i semu toka za stampanje brojeva od 1 do 100 i nj ihovih kvadrata. Serna toka
ALRoritam
start = I stop = 100 step = I
Print LCY, LCy2
Petlja (n, pocetna vrijeclnost kraj = 100; korak = 1
I
=
I;
Stampaj vrijednost LCV i LCV
Kraj petlje
I LCY - brojac ponavljanja (li ovom siucaju je to varijabla n) 32
2
1. UVOD
FORTRAN (FORmula TRANslation) je vjerovatno najpoznatlJI I najrasireniji programski jezik. Dokaz za to je njegova egzistencija u periodu koji traje vise od cetrdeset god ina. Naime FORTRAN je prvi put standardizovan 1966 godine pod imenom FORTRAN IV i FORTRAN66, zatim 1978 poznat pod imenom FORTRAN77 i 1991 godine pod imenom FORTRAN90. FORTRAN je u pocetkll bio projektovan za nllll1ericka izracllnavanja i nallcne aplikacije. Za upravljanje numerickim izracunavanjima FORTRAN ima veliki spektar operatora i predefinisanih funkcija. Treei ciklus standardiz3c,iJe FORTRAN-a po ceo je kao logicna posljedica sve ve6ih aplikacija osamclesetih goclina. Radni naslov ove verzije je bio FORTRAN8x, a ova verzija nije trebala samo cia predstavlja prosto prosirenje FORTRAN77 nego se gledalo i na druge jezike za koncepcijska rjesenja i nove funkcionalne komponente. Osnovni problem predstavljalo je ubacivanje napreclnih i dokazanih funkcionalnosti clrngih programskih jezika a da se pri tome ne narnsi kompatibilnost sa prethoclnim verzijama FORTRAN-a. Logicna posljedica tako visoko postavljenih zahtijeva je i veoma dugacak otvoren proces (vise ocl 10 godina) sto svjedoci i ime sa sufiksom 90 umjesto 8x kako je prvobitno bilo planirano. Osnovne karakteristike za rad sa Windowsima Sll slijede6e: ../ Startovanjem FORTRAN-a pojavljllje se izbor mogu6nosti za rad sa programoll1 za slijede6e aplikacije:
FORTRAN program.skijezik w windowse
FORTRAN programiranje za wit/dowse
Tabela 2.1
To je tzv. radni prostor za projekte, a mogucnosti pojedinih opcija su slijedece: v'" Fortran Console Application omogucava koristenje iii izradu program a u FORTRAN-u sa standardnim aplikacijama, bez mogucnosti grafike i koristenja studija, a izvrsna verzija programa je sa ekstenzijom .EXE. ./ FOliran Dynamic Link Library omogucava izradu programa u FORTRAN-u sa mogucnosti povezivanja programa sa dijelovima programa napisanim u drugom programskom jeziku u sklopu studija (VB, C, C++, EXCEL), a izvrsna verzija programa je sa ekstenzijom .DLL. Koristenje grafickih naredbi u sklopu ovog izbora aplikacije nije omogu6en. ./ Fortran Standard Graphics or QuickWin Application omogucava izradu programa u FORTRAN-u za graficke aplikacije u jednostavnoj iIi QuickWin grafici, iIi Windows aplikaciji. Izvrsna verzija je sa ekstenzijom .EXE. Pri koristenju ove opcije mora se voditi racuna da je display setovan na 256 boja. v'" Fortran Static Library omogucava koristenje klasicne biblioteke fortranskih programa U ovom poglavlju obraaena je Fortran konzolna aplikacija, a graficka i
.DLL aplikacije obraaene su u narednim poglavljima.
Karakter =
+ / ( )
Opis prazno mjesto jednako plus mlllUS mnozenje-zvjezdica podijeljeno-kroz lijeva zagrada dcsna zagrada z.arez decimalna tacka aposlrof
Karakter I
" &
%
I
< > )
$
Opis dvotacka usklicnik dupli apostrof znak pridruzivanja postotak tacka-zarez manje od vece od znak pitanja-upitnik znak dolara
2. I REDOSLIJED NAREDBI U FORTRAN-u Naredbe opisuju, specificiraju i klasificiraju elemente programa, kako dobro i koje 6e aktivnosti program imati. Ansi standard za FORTRAN opisuje redoslijed naredbi i linija u Fortranskim programskim jedinicama. U tabeli 2.2 dat je redoslijed tih naredbi.
_.-
Tabela? ?
2. OSNOVNI ELEMENTI FORTRAN JEZIKA ASCII karakter set Fortrana ukljucuje: v'" velika i mala slova engleske abecede (A-Z, odnosno a-z), ./ deset cifara od 0 do 9. Cifre mogu biti upotrijebljene za definisanje imena promjenljivih iii varijabli, ali ne mogu biti na prvom mjestu, ./ specijalne znakove i.simbole sadrzane u ASCII setl! karaktera ukljucujuci i prazno mjesto i TAB karakter. Znak ( _ ) mo'Ze biti upotrijebljen za definisanje varijabli iIi imena promjenljivih, ali ne moze biti na prvom mjestu.
Fortran kompajler prepoznaje velika i mala slova u svakom pogJedu, na primjer PRINT *, i print potpuno su identicne naredbe, ali 'ijk' i 'ljK' su razliciti izrazi, odnosno varijable (karakter konstanta). Dvadesetjedan specijalnikarakter je saddan u Fortranu. To su slijede6i karakteri:
36
I
Linije komentara, INCLUDE Naredbe i direktive
OPTIONS naredbe PROGRAM, FUNCTION, SUBROUTINE, MODULE iii BLOCK DATA naredba USE naredbe IMPLICIT NONE naredbe P ARI\METER IMPLICIT naredbe naredbe NAMEUST, interfejs blokovi, tipovi FORMATi deklaracionih naredbi, PARAMETERi ENTRY naredbe funkcijskih DATA naredbe naredbe potprograma i specificirane naredbe Izvrsne naredbe DATA naredbe CONTAINS naredbe Interni potprogrami iIi Module pOtjJrogrami END naredba
Data tabela oznacava redosljed naredbi u programu iii programskoj jedinici. Tabela je predstavljena sa verikalnim linijama koje pomazu u poziciji naredbi a horizontalne linije odvajaju pojedine grupe naredbi.
37
FORTRAN proRrarnskijezik za windowse
FORTRAN programiranje za wit/dowse
Na prirnJer, nareba IMPLlCIT koja deklarise promjenljivu mora biti prije naredbi DATA iii END. Kao dopuna ove tabele mora se istaci slijedece: ,/ Svaka programskajedinica mora imati naredbu END ,/ Linije komentara mogu biti bilo gdje ,/ Naredbe BLOCK DATA, FUNCTION, PROGRAM i SUBROUTINE moraju biti na pocetku prije svih drugih naredbi. ,/ Naredbe navedene u tabeli bit ce obraaene u narednim dijelovima knjige uabenika. 2.2 PRA VILA PISANJA PROGRAMA U FORTRAN-u Program u FORTRAN-u sastoji se od niza linija. Postoje dva nacina pisanja FORTRAN programa ito: ,/ slobodni format i ,/ fiksirani format. Broj kolona za fiksirani format je 72, a za slobodni format duzina linija moze biti 132 I Meautim, u dokumentacij i za kompaj ler pozeljno je provjeriti navedenu duzinu. Sigurno je da ce program raditi bez ikakvih problema ako se koriste linije od 72 kolone. Program se moze poceti pisati bilo gclje u liniji, ali je to obicno od ko]one I, za sloboclni format, oclnosno od kolone 7 za fiksirani format. Marke naredbi moraju biti na pocetku od prve kolone, i 1ll0gU biti sastavljene oel pet cifara. Komentar pocinje sa znakolll "!" (sloboelni format), odnosno sa s]ovom "C" (fiksirani format). Linije komentara mogu biti smjestene bilo gelje u programu. Kontinuitet linija, gclje naredba preiazi 72 kolone, ostvamje se znakom "&" na kraju linije za sloboelni format, odnosno ciframa 1-9 u sestoj koloni za fiksiran format.
SLOVA' READ *,1ME PRINT *,' DOBRO DOSLl " 1ME,' NA KURS FORTRANA' END
Primjer: Ponoviti prethodni primjer, s tim da je program napisan u fiksiranom formatu. listing 2
-,
4
5
6
7
1234567R901234567R901234567890123456789012345678901234567R90123456789012 C
PROGRAM DOBRODOSLICE PROGRAM ZDRA VO CHARACTER *201ME PRINT *,' UNESI POD APOSTROFOM SVOJE 1ME I PREZIME - DO 20 SLOVA' READ *,IME PRINT *,' DOBRO DOSLI " 1ME,' NA KURS FORTRANA' END
input: korisnik korisnik output: DOBRO DOSLI korisnik korisnik NA KURS FORTRANA
3. TIPOVI PODATAKA U FORTRAN-u U FORTRAN-u postoji sest sustinskih tipova podataka. Oni se mogu podijeliti u elvije kategorije: Ilumericke i nenumericke. Numericki tipovi su integer, real, double precision i complex. Nenumericke podaci su character (karakter) i logical (logicke) konstante. 3.1 KONSTANTE U FORTRAN-u
INTEGER konstante Primjer: Napisati FORTRAN program u slobodnom formatu koji korisniku zeli dobrodoslicu na kursu Fortrana. PROGRAM DOBRODOSLICE PROGRAM ZDRAVO CHARACTER *20 1ME PRINT *,' UNES1 POD APOSTROFOM SVOJE 1ME I PREZ1ME - DO 20 & I Ovo se odnosi na FORTRAN 90 ( ) 38
Integer (intidzer) vrijednosti su cijeli brojevi. Rang vrijednosti, koji moze biti, zavisan je od tipa racllnara. Tipicno podrucje je od _T12_1 do + 2 32 _1, za 32-bitne racllnare.
REAL i DOUBLE PRECISION konstante Ovo je drugi tip numerickih konstanti, a nazivajll se realne (real). Realni brojevi se memorisu II racunaru kao dvDe komponente: mantisa reda velicine iz;medu 0.1 j 1.0 i eksponencijalnog dijela sa eksponentom 10. Realne konstante 39
FORTRAN programiranje za windowse SU obicni frakcioni brojevi koji mogu biti pozitivni iii negativni i uvijek imaju decimalnu tacku. Ovi brojevi se primjenjuju za izvoaenje aritmetickih radnji, dok se integer konstante upotrebljavaju za kontinuitet izvrsenja programa.
COMPLEX konstante
a+b+c 2 P=s· ~(s -a)' (s - b)· (s -c) s-
listing:
U inzinjerstvu i nauci cesto se koriste kompleksni brojevi, na primjer 4 + 2i (gdje je i 2 =_ 1), sto predstavlja jedan broj koji ima realni i imaginarni dio.
Algebarski prikaz: Prikaz u FORTRAN-u:
FORTRAN progrwnskijezik za windowse
---------------------------
realni dio + i (imaginarni dio) (realili dio, imaginarni dio)
CHARACTER konstante Ovo je tip konstanti neophodan za rad sa nenumerickim vrijedl1ostima, l1a primjer imena i adrese studenata. konstanta je bilo koji set znakova iii simbola koji se l1alazi izmeou apostrofa (') iii ("): ../ mogu biti slova (velika iii mala) ../ brojevi 0 do 9 ../ specijalni karakteri +-0.,*/='$;%<>7!& ../ prazno mjesto ../ znak podvlacenja_
konstante Ovo je posljednji tip konstanti, i one mogu imati samo dvije vrijednosti. Njihovaje uloga vrlo jednostavna: utvrditi da Ii je ndto istinito .TRUE. iIi Iazno .FALSE..
2.4 PROMJENLJIVE U FORTRAN-u PromjenIjive (varijable) u FORTRAN-u su imena koja dajemo za identifikaciju razlicitih kvantiteta u programu. One mogu mijenjati svoju vrijednost u toku izvrsenja programa, da budu ulazni podaci jli izlazni podaci. Primjer: Izracunati povrsinu trougla koristenjem Heronovog obrasca.
PROGRAM lrougao PRfNT *, ' unesi slranice troughl a, hie' READ'" a, b, c s= (a+h+c)/2. P=SQRT (s*(s-a)*(s-b )*s-c)) PRINT *, ' povrsina lrougia je P=',P END
input: unt:si stranice trougla a, b i c 3.,4.,5.
output: povrsina trougia je P=6 . Kada dajemo imena varijabli-promjenIjivih, mora se voditi racuna 0 sIUedecem: -/ -/ -/ -/ -/
varijabia moze imati 1-32 karaktera duzine samo slova (A-Z), brojevi (0-9) i znak podvlacenja( _ ) se l110gu koristiti prvi karakter mora biti siovo veiika i mala slova su ekvivalclItlId za razliku od ranijih verzij a Fortrana prazna mjesta nisu dozvoljena.
U prethodnom dijelu opisano je sest tipova konstanti, ali nisu definisane varijable. Ako broj ima decimalnu tacku tretira se kao rea! an, a ako ne, onda je cjelobrojna velicina - integer. U FORTRAN-u se promjenIjive mogu implicitno definisati na osnovu prvog slova imena promjenljive:
../ Promjenljive koje pocinju sa prvim slovom A-H iii O-Z su realne. -/ Promjenljive koje pocinju sa prvim siovom J-N Sll intidzer (integer). Eksplicitno definisanje promjenljive u FORTRAN-l.I je jednostavna procedura da specificiramo kako ce se koja promjenljiva tretirati: kao realna iIi cjelobrojna. Moze biti upotrijebljeno nekoliko nacina deklarisanja promjenljivih:
input: a,b,c, (stranice trougla) postupak: 40
41
FORTRAN programski jezik za windowse
FORTRAN programiranje za windowse
Primjer: Tabela')-.-"\ Opis naredbi RE/\L ::X,Y,Z REAL :: LENGTH INTEGER :: COUNT COMPLEX :: PHASE LOGICAL :: YESNO DOUBLE PRECJSlON ::X
ReZl.lltat Deklarisanje X, Y i Z kao relane varijeble Definisanje LENGTH kao realne variiable Definisanje COUNT kao intidzer varijable Definisanje PHASE kao kompleksne varijable Definisanje YESNO kao logicke varijable Dcfinisanje X kao double precision varijable
3.3 OPERATORI U FORTRAN-u
Promjenljive ilili konstante dovode se u meousodni odnos pomocl! odreoenih operacija, koje se dijeJe na: ,/ aritmeticke operatore ,/ operatore poreoenja ,/ logicke operatore
y+ 2z- d x=----.Y- 7,. u FORTRAN-n. Rjesenje: x=(y +2*Z-D)/(Y-Z)
Kad radimo sa realnim brojevima, rezultat ce biti real an broj i bit ce tacan. Meoutim, cesto se dolazi II situaciju operacija cjelobrojnih iii mjesovitih vrijednosti. U tom slucaju mora se voditi racuna da se dijeljenjem dvije cjelobrojne velicine dobija cje!obrojna velicina: ,/ rad sa realnim vrijednostima: 3.0/2.0 = 1.5 (rezultat je realan braj) ,/ rad sa cjelobrojnim velicinama: 3 / 2 = 1 (cjelobrojne veliCine nemaju decima/a !) Operacije poreoenja i odgovarajuci operatori dati su u narednoj tabeli:
Logicke operacije Sl! samo za logicke promjenljive aritmeticke i poredbene operacije za ostale.
Tabela'25
konstante, a Operator .LT.
U tabeli 2.4 datje prikaz aritmetickih operacija i hijerarhijski redoslijed rjesavanja.
-
Tabela') ..d.
.LE. .ECl.
Prioritet
Algebarski simbol
Fortran simbol
Opis
.NE.
]
Ab
**
.CiT.
2 2 3 3
X
*
+
+
-
-
Eksponent Mnozenje Dijeljenje Sabiranje Oduzimanje
/ .
Kad kreiramo matematicki izraz, to mora biti u jednostavnoj liniji, za razliku od zadataka u algebri, gdje se moze upotrijebiti vise linija. Na primjer, da napisemo izraz: x podijeljeno sa z, u FORTRAN-u je napisano: XJZ. Sve racunske operacije su ekvivalentne hijerarhijiskom redoslijedu (osim **), i izvode se sa Jijevo u desno. Na primjer: 9.012.0*4.0 daje 18.0, jer se prvo vrsi operacija dijeJjenja, 2**3**4 je isto kao 2**(3**4) iIi 2**81, jer se operacija vrsi sa des no u lijevo. Primjer: Napisati matematicki izraz:
42
.GE.
Opis Less than (manje od)( <) Less than or equal to ( manje iii jednako od )«) equal to ( jednako) (=) Not equal to (nije jednako) (;to) Great than ( vece od) (» Great than or equal to (vece iIi jednako)(»
I
I
Primjer 1<2
RezuHat Istina (True)
3.14 <=100
Istina (True)
0-10 0/=]0 1>2
Laz (False) Istina (True) Laz (False)
4>=3
Isti na (True)
Kao rezultat poreoenja dviju velicina dobija se logicka konstanta: istina .TRUE. iii laz: .FALSE ..
Logicki operatori Bilo koji logicki izraz daje logicku vrijednost. U tabeli 2.6 dat je pregled logickih operatora: Tabela 2 6 Operator .NOT. .AND. .OR.
Opis Negacija Oba simultano IIi
Broj argumenata 1 argument 2 argumenta 2 argumenta
43
FORTRAN progrwnskijezik::(1 windowse
FORTRAN progrwlliranje z,a windowse
----------------------~
Logicki operatori opensu II logickim izrazima. Prvi (.NOT.) rnijenja logicku vrijednost argumenta. Ako je A Istinita (true), tad a je (.NOTA) lui (false) . Drllgi operatori porede dvije logicke vrijednosti i vracaju jednostavnu vrijednost koja se nalazi u ovom intervalu. Primjer: Pomocu logickih operatora 5tampati sve brojeve koje se nalaze < x < 10.
1I
inetervalu: 1.0
DPROD(x,y)
dupla prceiznosl proizvoda x i y
EXP(x)
eksponeneijal
INT(x)
I
I! I
Kao 5to se moze vicljeti, matematicki izraz je: 1.0
realni
Realni
D. Prce.
realni D. Pree.
skracivanje u ejelobrojno
Realni D. Pree.
eijeli eijeli
J=INT(3.99999) J= INT(O.3999DO I)
FLOAT(x)
promjena u real Jl()
Cijeli D. Pree.
realni realni
X=FLOAT(4) X=FLOAT(OADO I)
LOG(x)
prirodni logaritam
Realni D. Pree.
I
realni
I
D. Pree.
I X=LOG(2.17828) Z=LOG(O.2718D01)
logaritam baze 10
Realni D. Pree.
I
MAX(.)
elavanje najvece vrijednosli
MIN( ... )
elavanje najmanje vrijcelnosli
LOGIO(x)
I I
I
3.4 SISTEMSKE FUNKCIJE U FORTRAN-u Funkcije u FORTRAN-u obicno clef'inisu matematicke funkcije kao 5to je kvadratni korijen, trigonomerijske funkcije i s1. Upotrebljavaju se sa oclreaenim imenom i argumentom u izrazu. U narednoj tabeli clat je pregled nekih standardnih funkcija koje se nalaze u FORTRAN-u.
Naziv
Opis
ABS(x)
apsolutna vrijednost
I
Argument
I I I
ACOS(x)
ASIN(x)
44
arkuskosinus
arkusinus
\
Cijeli Rcalni Double Pree. Realni Double Pree. Realni Double Pree. Realni Double Pree. Realni Double Pree.
I
Rezultat eijeli realni Double Pree. realni (rad) Double Pree. (rad) realni (rad) Double Pree. (rad) realni (rad) Double Pree. (rad) realni (rael) Double Pree. (rad)
ATAN
arkustangens
COS(x)
kosinus
COSH(x)
kosinus hiperbolno
Realni
realni (rad)
DELE(x)
promjena u Double Pree.
Cijeli Realni
Double Pree.
MOD(i,j) NINT(x)
Tabela 2 7 Primjer
J=ABS{ 51) X= ABS(-173) Z=ABS(-O.lD04) X= ACOS(0.5) Z= ACOS(O.5DO) X= ASIN:O.S) Z= ASIN:O.5DO) X=ATAN:.O.S) Z= ATAN:.O.SDO) X= COS: 1.0475) Z= COS: 1.0475DO)
y = COSg2.00)
·1 I
A=DPROD(2.0,3'(»
Realni
I
READ"', X IF(l.O .LTX .AND.X. LT.IO.O) PRINT", X,' izmedju vrijednosti 1.0 i 10.0'
f
I
razlika iij zaokruzivanje I na najblizu eijelu vrijecinost
SIN(x)
sinus
SINH(x)
sinus hiperbolno
SQRT(x)
kvadratn i korjcn
TAN(x)
tangens
TANH(x)
I
tangens
hiperboino
I
X=EXP(I.O) Z=EXP( I .ODO)
D. Pree.
X=LOG I O( 1(0) Z=LOG I (XO. J DO)
Cijeli Realni D. Pree.
eijeli realni D. Pree.
I=MAX(S, I ,6,2) X=MAX(O.2,5.6) Z= MAX(l DO,3D3)
Cijeli Realni D. Pree.
cijeli realni D. Pree.
I=MIN(S, I ,6,-2) X=MIN(0.2,S.6) Z=MIN(IDO,3D3)
Cijeli Rcalni Double Pree. Realni (rad) Realni
cijeli I
realni
I
I
J=MOD(29,4) J=NINT(3.99)
eijeli cIJclI
I J-NINT(06DO I)
realni
X=SIN(O.5202)
realni
Y~SINH(2.0)
T
Realni D. Pree. Realni (rad) D.Pree.
realni D. Pree.
X=SQRT(17.6) Z=SQRT(0.17D2)
realni D. Pree.
X=TAN(O.78S) Z=TAN(O.78SDO)
Realni
realni
Y=TANH(2.0)
Kada se koriste trigonornetrijske funkcije, mora se vocliti racuna da se uglovi unose u radijanima, a ne u stepenima. Prirnjer: Ovaj program Llcitava clvije tacke sa koorclinatama (XI, YI) izracunava uclaljenost izrneau njih formulorn:
(X2' Y2) a zatim
Z= DELE3) Z= DBLEO.O) 4S
FORTRAN programiranje za windowse
FORTRAN programski jezik za windowse
----------------------~
-.
Tabela') 8
UDALJENOST IZMEDJU DVIJE TACKE (XI,YI) I (X2,Y2) Naziv PRINT*, 'UNESI X I Y ZA PRVU TACKV' READ*, XI,YI PRINT*, 'UNESI X I Y ZA DRUGU TACKU' READ*, X2,Y2 D = SQRT«X2-XI)**2 + (Y2-YI)**2) PRINT*, 'RASTOJANJE MEDJU TACKAMA JE " D END
Kod nekih programa mora se voditi racuna da je broj ispod korijena velicina. Ukoliko ne znamo koja ce to vrijednost biti, moramo napraviti ;Z!Tljenu u programu. ;:;~'zitivna
UDALJENOST IZMEDJS' DVlJE TACKE eXI,Yl) I (X2,Y2) PRINT", 'U]\!ESI X I Y ZA PRVU TACKV' READ*, XI,Yl PRINT*, 'UNESI X I Y ZA DRUGU TACKU' READ*, X2,Y2 D = SQRTCABSC(X2-Xl)**2 + (Y2-YI)**2» PRINT*, 'RASTOJANJE MEDJU TACKAMA JE " D END
Primjer: . . Slijedeci program ucitava dvije fealne vrijednosti j pretvara ih u komp!eksl1l broJ gdje je X realni dio, a Y imaginarni dio. PROGRAM ZA STVARANJE KOMPLEKSNOG BROJA IZ REALNOG DIJELAX I IMAGINARNOG DUELA Y COMPLEX:: Z PRINT*, 'UNESI REALNI DIO KOMPLEKSNOG BROJA' READ*,X PRINT*, 'UNESI IMAGINARNI DIO KOMPLEKSNOG BROJA' READ*, Y Z = CMPLX (X,Y) PRINT*, Z END
Slijedeca grupa funkcija u FORTRAN-u su one koje operisu sa jednostavnim tipovima podataka. Uopsteno, to su jednostavne matematicke funkcije, koje prihvataju za argument sarno podatke jednostavne strukture, kao 5to su varijable koje sadde samo jedan broj.
46
Opis Daje imaginarni dio kompleks. broja
AIMAG(Z)
Kompleksni
ANINT(X,K)
I
LEN(C)
Realni
Zaokruzivanje I na najblizi cio broj Upucivanje na KIND rijednost zaX
I
I
realni
I
realni
Realni
I X=AIMAG«3.0,4.0» I X=AINT(3.9999) X=AINT(3.999_4) X=AN INT(3.999) X=ANINT(3.999_4)
realni
Bilo koji
Upucuje na duzinu karaktera
Primjer
Rezult.
I
Skracivanje na cio broj
AINT(X,K)
KIND(X)
Argument
I
Karakter
cijeli cijeli
I
I=K1ND(1.O_4) I=LEN('abcd')
Treca grupa naJcesce koristenih funkcija su one koje operisn sa matricama. Matrice su kompleksnije forme podataka, u koje se smjesti velika grupa brojeva pod jednom varijablom. Na primjer, vektor sile F u fizici ima tri komponente koje djeluju duz tri ose, pa se ova grupa od tri podatka ipak daje pod jednim imenom varijable F.
-.
Tabeia') 9 Naziv
Opis
DOT_PTWDUCT
Proizvod XiV
Realni Cijeli Komp!.
MnozenJe matrica
(X.Y)
MATMUL(X,Y)
MAXLOceX)
MAXVAL(X)
Lociranje pozicije maksimalne vrijednosti u matrici Pronalazenje najvece vrijednosti u matrici
I
Arg.
Primjcr
Rezult.
I
I
realni cijeli komp!.
A=DOT
Realni Cijeli Komp!.
realni cijeli komp!.
A=MATMULeX,Y)
Realni Cijeli Komp!.
realni cUeli komp!.
I=MAXLOceX)
Realni Cijeli Kompl.
realni cijeli kompl.
A=MAXV AL(X)
i
47
FORTRAN progrwlIskijezik::.(/ windmvse
FORTRAN progral7liranje z,a wine/Ollise
?vlINLOC(X)
I
MINYAL(X)
I
4. NARED13E ULAZA I IZLAZAINPUT-OUTPUT
Lociranjc pozicije minimalne vrijednosti u matrici Pronalazenje najmanje vrijedllosti u matrici
i Cijeli
cijeli Kompl. , kompl.
I
I=MINLOC(X)
I
Realni Cijeli Kompl.
realni cijeli komp/.
Suma elcmenata matrice
Rcalni Cijcli Kompl.
realni cijeli kompl.
A=SUM(X)
Transpoi1Ov. malricc
Realni Cijeli Kompl.
realni cijeli kompl.
Y=TRANSPOSE(X)
SUM(X)
TRANSPOSE(X)
----------------------~
I
Najlaksi nacin za lInos iii ispis podataka je takozvana direktna lista naredbi. Koristenjem ove naredbe ne moramo voditi racuna 0 obliku pojavljivanja poclataka vee samo 0 tome sta zelimo unijeti odnosno stampati u izlazu. Opsti oblik ove naredbe je:
A=MINY AL(X) READ *, varijablal, varijabla2, ..
I
a za izlaz koristimo odgovarajueu naredbu: PRINT *, vcu'ijablal, varijabla2, ..
Zvjezdica koja se pojavljuje u obaclvije nareclbe upueuje na koristenje sloboclnog formata. Siobodni format znaci da ce kOl11pjuter koristiti ranije definisane instrukcije za citanje i stal11panje podataka. Npr. l11asina ee odrediti koliko ce broj il11ati decimalnih mjesta. koliko ee ostaviti praznih mjesta izmedu brojeva itd.
Primjer:
Pril17jer:
Ako je dat vektor A = [1.O,2.0,3.0J i vektor 13 = [2.0,4.0,6.0], tada se slijecleeim programom dobija proizvod ova dva vektora koristenjem funkcije DOT_PRODUCT. To je u stvari suma proizvoda komponenti dva vektora: 1.0*2.0 + 2.0*4.0 + 3.0*6.0.
Da bismo ilustrovali kako radi direktni lInos podataka, razll1otrimo slijeclecu naredbu: READ *, x, y, z
Ovo znaci da mommo unijeti tri broja za odgovarajuee varijable.
x=
DOT ]RODUCT(A,B) PRI"TT* X.
Primjer:
Cetvrta grupa nareclbi u FORTRAN-li moze se primijeniti prilikom pozivanja potprograma. U tabel i su data dva najcesce koristena tipa naredbi. Tabela 2 10 Naziv
Opis
RANDOM~NUMBER(X)
Daje slucajni broj
RANDOM~SEED
Postavlja generator slucajnog broja
Rezult. realni
Primjer CALL RANDOM~NUMBER(X)
READ *, x, y, z PRINT *, x, y, z
x = 14.3 Y = -27.943 z = 0.0034567 input:
14.3,-27.943,0.0034567 CALL
RANDOM~SEED
output:
14.3
-27.943
0.0034567
123456789012345678901234567890123456789012345678901234567890 12345 6
48
49
FORTRAN pror;ramskijezik za windowse FORTRAN pror;ramiranje w windmvse
Ovim naredbama morajll se unijeti tri pod atka za odgovarajllce varijable a kompjuter sa naredbom PRINT mora da stampa ista tri podatka. Kompjuter ce koristiti sopstvena pravila za stampanje izlaznih podataka i ovaj izgled izlaza zavisi od kompajlera do kompajlera. Naredba PRINT moze da sadrzi i karakter stringove kao i matematicke izraze u izlaznoj listi. Primjer: X = 2.4 PRltlT*, 'X =', X, 'X**2=', X*X
../ Broj koione Ll kojoj se pocinje stampati. ../ Za realne brojeve da Ii se primjenjuje plutajuca tacka iii eksponencijalni oblik. ../ Broj praznih mjesta i praznih linija. ../ Bilo koji tekst. Postoje specificna pravila za svaku od ovih fl.lnkcija. Kontroini karakter izlaza je uvijek na prvom mjestu u listi instrukcija i koristi se sarno ~a formatiranje izlaza. Svrha 11111 je da pomjeri glavu stampaca za koionu I. PostoJe razliciti kontrolni karakteri koji se mogu koristiti:
U izlazu bi smo dobili:
'0' 'I'
output:
'+'
jeclan vi:ortikalni pomjeraj dllpli vertikalni prostor nova strana pisanje na trenutnoj liniji
X=2.40()()OO X**2=5 .760000
OpisivaCi editora
J234567890J234567890J2345678901234567890J2345678901234567890 2 345 6 J
FORMAT naredbe Formatiranje predstavlja stepen kontrole izgleda izlaza sto se direktnom listom ne moze llciniti. Sa formatiranjem se izlaz moze uciniti mnogo atraktivnijim i citljivijim. Instrukcije formatiranja se mogu koristiti samo uz naredbe ulna, odnosno izlaza. Bez ovih odgovarajucih naredbi sam a naredba formatiranja je beskorisna.
br
READ br, varijablal, varijabla2, ... FORMAT(lista instrukcija)
Ovi opisivaci daju detaljne informacije 0 tome kako se vrijednosti moraju stampati iii citati. Format-specifikacije se mogu svrstati u dvije glavne kategorije. Prva kategorija sadrzava pravila za kontrolisanje l1umerickih iii slovnih podataka, dok druga kategorija kontrolise funkcije rasporeda. Numericki podaci: I
cijeli brojevi
Iw
12
F
realni brojevi
Fw.d
F6.2
E
D
realni, eksponencijaini dllpla preciznost
Ew.d Dw.d
E6.2 D20.8
0
realni, opsti
Ow.d
08.2
Na slican nacin dobijamo par za izlaz:
br
PRINT br, varijabla 1, varijabla2, .. FORMAT(lista instrukcija)
U odnosu na slobodni format formatirani ulazlizlaz ima umjesto ,*, broj labele, odnosno linije u kojoj se nalazi naredba format. Broj format linije se pise od prve do seste kolone kao cio broj, a sama naredba FORMAT pise se od sedme kolone. . Za izlaz, lista instmkcija koja se nalazi pod naredbom FORMAT, sastoji se od kontrolnih karaktera i liste opisivaca editora. Mogu se svrstati u: ../ Tip varijable i broj decirnalnih mjesta.
Slovni podaci: A
slovne varij able A w
A20
slovni stringovi 'xx'
'primjer'
Slijedeci niz format-specifikacija kontrolise fizicki polozaj, kao sto Sll razmaci, ta~ulatori, poravnanja itd . 51
50
FORTRAN progro/11skijez.ik W windowse
FORTRAN progrwnimnje ;:a windowse
Primier: Rastojanja
Ponovi
X T TR TL / r( )
preskoci n mjesta predi na kolonu n predi clesno za n mjesta preoi lijevo za 11 mjesta nova linija Ponovi specifikacije u ( )
nX Tn TRn TLn
5X
I
/
r( )
2(f4.1 )
Udalj == 12.345 Vrij == 0.0034 Brzi == udalj/vrij PRINT 5, udalj, vrij, brzi
T7 TR3
TU 5
FORMATC', 8.3, 8.4, FIO.I)
(brzi= 12.345/0.00345=3578.2608) 4.1 OPISIY ACI ZA ClJELE VRIJEDNOSTI Kacla stampamo cijele brojeve, moramo vocliti racllna ostavimo c1ovoljno prostora za stampanje te vrijeclnosti.
output: 0
tome cia
F7.2
FIO.I
F9.6
12.35 0003450
Sintaksa:
Iw
J
Gdje I preclstavlja format specifikaciju za cijeli broj a w predstavlja ukupan broj mjesta za taj broj ukljucujuci i predznak. Primjer: !BRO] == 624 JBROJ == -2845 PRINT 17, IBROJ, JBROJ 17 FORMATC', 16.19)
output: 624
-2845
f234567890f234567890f234567890f234567890J2345678901234567890 J 2 J 456
Ovim naredbama smo postigli slijecleci izgled izlaza: , , oclmakni jedno mjesto, zatim pisi vrijeclnost broja IBRO] za koje je rezervisano 6 mjesta, zatim vrijednost ]BROJ za kojeg je rezeryisano 9 mjesta. Ako je broj manj i od broja rezervisanih mjesta stamp ace se visak kao prazna mjesta, Ukoliko je broj yeci nego sto smo za njega rezervisali n1jesta, dobit cemo u izlazu samo zvjezdice ***. 4.2 OPISIV ACl ZA REALNE VRIJEDNOSTI Kada zelimo stampanje realnih podataka, moramo voditi racllna 0 ukupnom broju mjesta (w) i broju decimal nih mjesta (d). Dakle, kada koristimo format Fw.d, w mora biti najmanje za tri mjesta vece nego broj decimalnih mjesta (w ?: d +3). 52
3578.3
J234567890 J234567890 J2345678W) J234567890 J23456 7890 f 23456 7890 2
3
4
5
6
Realni brojevi takoae se mogu iZrazltl u naucnoj notaclJI. Opsti oblik definisanja ispisa reainih brojeva u eksponencijalnom oblikuje: Ew.d gdje E = ukazuje eksponencijalni format (mantisa x 1011) W = rezervisanje polja za ukupan broj mjesta d = broj clecimalnih mjesta uz uslov da je: w?:d+7 Prethoclni primjer bit ce iskoristen za prikaz ove opcije uz izmjenu: 5
FORMAT(", EI2.4, E14.6, FIO.I)
output: E=12.4
E=14.6
FIO.I
O.1235E+02 O.345000E-02
3578.3
12345678901234567890J23456789012345678901234567890J234567890 1
2
3
4
5
Za stampanje brojeya sa Double prectSlon koristi se eksponencijalnog formata: Dw.d gdje D = ukazuje daje double precision format (tj .. 123 D+003) w = rezeryisanje polja za ukupan broj mjesta d = broj decimalnih mjesta
6
slican
oblik
53'
FORTRAN programiranje za windowse
FORTRAN programslcijezilc za windowse
uz uslov da je: w?:d+8 Isti primjer uz izmjenu: FORMAT(",D12.4,Dl1.3,DIO.I)
5
Postoj i i mogucnost da koristimo samo oznaku za format karaktera A bez davanja broja mjesta za taj karakter gdje ce ga sam racunar autol11atski smjestiti sa tacno onoliko I11jesta koliko taj karakter sadrzi.
output: D=I1.3
DIO.l
O.34SD-002
OAD+004
D= 12A 0.123SD+002
PRINT 10, 1MB FORMAT (' ',A 20)
10
4.4 OPISIV ACt ZA STRINGOVE I KONTROLU
123451578901234515789012345157890 123451578YO 12345157890 J 234567890 J 2 345 6
Za ispis realnib brojeva u format opsteg tipa moze se koristiti i G format: gdje G == ukazuje tip formata w = rezervisanje poija za ukupan broj mjesta d = broj znacajnih mjesta Ovaj format predstavlja kombinaciju formata sa 'plutajucom' tackom i eksponencijale forme (E-format). Primjer rada sa ovim tipom formata dat je 11 narednoj tabeli: Tabela')-. II Vrijednost: 0.010000 0.100000 1.000000 10.00000 100.0000 1000.000
Opisivac:
GII.3
Output: --0.1 OOE-O 1 --0.100------1.00------10.()------100.-----0.100E+04
U opisivace kontrole pojavljivanja podataka u izlazu spadaju i stringovi i kOl1tro[ori razmaka. Sringovi su linije teksta koje se dodaju fadi citljivosti iziaza. Kontrola razmaka daje mogucnost da pomjeramo horizontalno iii vertikalno nase izlazne podatke opet, radi poboljsanja citijivosti. Primjer: Koristenje stringa koji se daje u naredbi FORMAT pod apostrofima: PRINT 30 30 FORMATC',' UNEST PODATKE X,Y,Z:')
Primjer: X = 43.765
10
Y=-11.381 PRINT 10, X,Y,X FORMAT(lX, 'X =', F6.3, 'Y =', F7.3, 'X*Y =', FIO.S)
U izlazll bismo dobili: X = 43.765 Y = -11.38! X*Y =-498.08946
(oznaka. - =prazno mJesto)
Postaji nekoliko format specifikacija koje su korisne za kreiranje izgleda
4.3 OPlSIVACI ZA KARAKTER-VRIJEDNOSTI Kao i kod cjelobrojnih vrijednosti, i kod karakter-vrijednosti jedino vodimo racuna 0 ukupnom broju mjesta. Oznakaje: Aw
izlaza.
X
nX
3X
/
/
I
T
Tn TRn TLn
17 TR7 TL3
TR TL
Aje format karakter-vrijednosti
Formatiranje ulaza i izlaza mozemo uraditi i na slijedeci nacin:
w je ukupna sirina rezervisana za karakter.
PRINT"(' ',13,2(F7.2, I X))", !, A, B
Pril1ljer: CHARACTER:: IME*20 IME ==' DAMIR MUSTAFIC' 54
preskace tri 111j esta prelazi u narednu liniju prelazi u kolonu 7 pomjeri se desno za 7 mjesta od trenutne pozicije pomjeri se Jijevo za 3 mjesta od trenlltne pozicije
IIi 55
FORTRAN progrum irullje ::,u windowse
CHARACTER (LEN=40) :: FMT FMT = "(' ',13,2(F7.2, IX))," PRINT FMT, L A. B
Prilikom pisanja programa moguce je cIa dode do nekoliko vrsta pogresaka. Njih je moguce ukloniti ukoliko postoji dobra tehnika pisanja programa iii dobra vjestina otklanjanja gresaka. Za unapredenje dobrog stiia pisanja programa mogu se koristiti neke upute, kao sto su: ./ koristenje kratkih poruka koje ce se pojavljivati na ekranu prilikoill izvrsenja programa i koje ce podsjecati na to koje podatke, kojim recIoslijedolll i u kojem obliku ih treba unijeti; ./ 'eho' unesenih podataka na ekranu koji ce omoguciti da odmah nakon unosa podataka vidite cia Ii ~te ispravno unijeli podatke; ./ ne unositi naredbe formatiranja u program sve dok se ne uvjerite daje logika rada programa ispravna ./ izbjegavati koristenje F formata za realne brojeve u pocetnim verzijama programa.
FORTRAN programskijezik:m windowse
----------------------~
GOTO broj Iinije sa naredbom (ml) ml predstavlja broj -labelu- sa kojom je oznacena naredbu oel koje se nastavlja kontinuitet izvrsavanja program
Koristenje naredbe GOTO instrukcija):
za preskakanje naredne instrukcije (ili niza
X=X+I
30 40
GOTO 40 X=X-J PRINT", X
x
5. NAREDBE GRANANJA U prvom dijelu navedena su tri oblika struktura. Kod sekvencijalnih (Iinijskih) struktura program uzvrsava instrukcije koje su date jedna za drugom. Meautim, vrlo cesto se dogaaa neophodnost izmjene redosljeda navedenih instrukcija i toka izvrsavanja programa. Naredbe koje omogucavaju izmjenu redosljeda izvrsavanja naredbi nazivaju se naredbama welaska iIi g:rananja. Prema nacinu na koji se vrsi prelazak l! programu ove nareelbe se dijele na: ./ naredbe bezuslovnog prelaska ./ naredbe uslovnog prelaska ./ specijalni oblici IF naredbe i naredbaSELECT CASE Sa ovim naredbama omogucava sa grananje u programu, tako da se pri izvfsavanju programa prolazi samo kroz jednu od mogucih grana. Ovakve strukture se nazivaju jeelnostavnim imenom: razgranate strukture. Broj grana u razgranatoj strukturi je razlicit zavisno od siozenosti problema i algoritma. 5.1 BEZUSLOVNI PRELAZAKGOTO Naredba nekonvencionalnog prelaska (bezuslovrrbg) iIi GOTO naredba je jednostavna operacija prelaska. Predstavlja prelazak sajedne linije programa u neku drugu. Opsti oblik nareelbe je: 56
Primjer:
Koristenje nareelbe GOTO za pravljenje petlje. varijabla I predstavlja brojac 20
I= I J = 1** 2 PRINT *, J
Ilakoll sto je izraCllllat kvadrat ad I , I se poveca za I j vraca se u petlju na lilliju 20 I=I+l
GOTO 20
Izracnnati GOTO prelazak2 Izracunata GO TO naredba moze kontrolisati prelazak na instrukcije koristeci cjelobrojne vrijednosti kao seriju indeksa: GOTO (Ill> Ill, ... , 11k), i 1 :;; i:;; k
"0vaj oblik prelaska nije za FORTRAN90, ali ga kompajler prihvata 57
FORTRAN programiranje za windowse
FORTRAN progrwnskijezik za windowse
----------------------~
gdje nl·· .nk predstavljaju brojeve (label e) linija na kojoj se nastavlja kontuitet izvrsavanja program a, a koji ce broj biti zavisno je od varijable i.
Pridruieni prelazak3
Opsti oblikje: ASSIGNn TOi GOTO i, (111,n2," .,I1K)
lzr;.lGunati vrijednost funkcije F(x) clate izrazom
F(x)
= 4.0(xI + 2X2 + 3x} + 4X4 + 2xs + 3X6 + x 7 + 2xs + 3x~) gdje je x k = -J1O - k , k = 1; ... ,9
gclje 111 .•• nk predstavljaju brojeve (labele) linija na kojoj se nastavlja kontuitet izvrsavanja programa, a koj i ce broj biti zavisno je ad varijable i.
Proracunska procedura je:
Primjer: Prethoclni primjer ce biti ponovljen ali sa primjenom ovog oblika prelaska uz isti algoritam:
j. setuj SUM = O. i 1= i 2. ponavljaj sve korake do 10 za k = 1,2, ... ,9
3. racunajx= -JIO-k 4. ako je I = I icli na korak 5, 1=2 icli na korak 6, 1= 3 idi na korak 7 preskoci na korak 8 5. SUM = SUM + x 6. SUM = SUM + 2x preskoci na korak 8 idi na slijedeci korak 7. SUM = SUM + 3x 8. prirastaj I za I 9. ako je I> 3, I = I i slati na korak I 10. napisi rezultat II. kraj programa
II 24 13 12
SUM=O I I DO K=I,9 X=SQRTtFLOAT( IO-K» GOTO (11,24,13), I SUM=SUM+X GOTO 12 SUM=SUM+2.0*X GOT012 SUM=SUM+3.*X 1=1+1 1F(LGT,3) 1= I END DO FX=4.*SUM PR1NT*, FX END
52 51
II
24
13
5.2 USLOVNE NAREDBE I KONSTRUKCIJE GRANANJA Razlika izmedu IF naredbe i IF konstrukcije je u tome sto naredba zauzirna sarno jednu Iiniju, dok konstrukcija predstavlja blok instrukcija u nekoliko Iinija. Koristenjem ovih nareclbi moguce je konstruisati uslovno testiranje, tako cia cete od rezultata testiranja moci stvarati grane u svom programu.
3
58
SUM=O.O K=O ASSIGN I I TO I K=K+I X=SQRHFLOAT( I O-K» GOTO I, (11,24,13) SUM=SUM+X ASSIGN 24 TO I GOTO 51 SUM=SUM+2.0*X ASSIGN 13 TO I (JOTO 51 SUM=SUM+3.0*X fF(KLT.9)GOTO 52 FX=4.0*SUM PRINT*, FX END
ista napomena kao I za izracunati prelazak 59
FORTRAN programskijezik za windowse
FORTRAN programiranje za windowse
Relacioni operatori i logicki operatori
4.
+, -
+, -
sabiranje i oduzimanje
5.
==,*,< :S;,>, ::0:
== ==, 1==, < <==,>,>==
operatori porec1enja
.NOT.
logicka negacija
Tabela 2.12
°2is manje od manje iIi jednako jcdnako nije jednako vece od vece iii jednako
Operator < <== == /== > >==
Primjer 1<2
Rezultat
3.14<= 10
istina
0-10 0/== 10 1>2
netacno istina netacno
4 >== 3
istina
iSlina
6.
X
7.
0
.AND.
logicko I
8.
EB
.OR.
logicko ILl
Logicki operatori 5.3 IF NAREDBA U nekim slucajevima mozda zelite da provjerite vise od jednog uslova prije nego date izJaznu instrukciju. Npr. dvije stvari moraju biti tacne da bi se krenulo dalje u proceduru racunanja. Recimo da je a u intervalu izmeau 1.0 i 10.0 Za to koristimo iogicke operatore koji povezuju odvojena uporeaivanja. negacija oba ispravna
~T()T
.,il,ND. .OR:
iii
.i',ND. operator je tacan samo ako Sl! oba izraza tacna .. OR. operator je tacan ako je makar jedan izraz tacan .. NOT. operator daje inverznu vrijednost izraza na . pHmj+<'e3-fr'7:~~READ"', X [F( 1.O
'jE
IZMEDU I I 10'
Tabela')-. 13 Operator
Opis
.NOT .AND. .OR.
Negacija oba istovremeno iIi
Broj argumenta I 2 2
IF naredba preelviaa izvrsenje jedne naredbe koja se nalazi u istoj liniji ako je testiranje tacno. Oblik ove naredbe je: IF (uslov testiranja) naredba za izvrsenje ako je tvrdnja tacna Uslov testiranja je uporeoivanje elva izraza (npr. uporeaivanje varijable sa konstantom tako daje moguci odgovor: istina(.TRUE.) iIi laz(.FALSE)). Ako je tvrdnja tacna (.TRUE.), racunar izvrsava nareelbu koja se nalazi u istoj liniji sa IF naredbom a zatim prelazi u narednu liniju. Ako tvrdnja nije tacna (.FALSE.) racLlnar odmah prelazi u narednu liniju.
A:ritmeticki uslovni prelazak (izracunati) Opsti oblikje: IF (a) nj, n2, 11} gdje su nl, n2, i 113 brojevi linija na koju se vrsi prelazak a zavisnood vrijednosti a (da Ii je a manje, jednako iii vece od 0)
Prioritet u izvrsenju naredbi imaju slijedece operacije 1.
( .... )
( .... )
2.
A
b
**
3.
x, /
60
*,J
zagrade stepenovanje
n2
mnozenje i dijeljenje 61
FORTRAN programirunjc
~a
windmvse
Svaka od ovih dviju blok naredbi moze da sadrZava jednu ali i stotine linija sa instrukcijama.
Primjer: 20 30 40 50
FORTRAN programskijezik za windowse
----------------------~
IF'(XI-X2) 20,30,40 Y=XI+X2 COT050 Y=Xl*X2 COT050 Y=X1-X2 CONTINUE
Primjer:
PROGRAM SPERA PROCRAM ZA RACUNANJE ZAPREMINE I POVRSINE SFERE
Primjer: lzracunati vrijednost F(x) primjenom dodijeljenog preiaska ako je funkcija F(x) dana izrazorn:
x:<;;l
F(x)=2·x+3 =8-3·x
29 READ *, D PI=3.14 V=PFD**3/6.0 A=PI*D**2 PRlNT *, D,V,A COTO 29 END
1
16
PROGRAM FUNKCIJAF(X) READ"', X IFCX.LE.l.O) FX=2.0*X+3 IF(LLTX.AND.XLT.2) FX=S.-3*X IF(X.CE.2.0) FX=X**2-2.0 PRINT*, X GOTO 16 END
5.4 IF STRUKTURE IF naredba je korisna kada irnarno izvrsiti sarno jednu naredbu ako je ispllnjen llslov testa. Medlltim, ako imamo izvrsiti vise instrukcija za sillcaj kada je tacan test, ali i za slucaj kada nije, tada koristimo drugaciju IF struktum. To je blokovska struktura jer sadrzi jedan blok instrukcija ako je uslov testa tacan drllgi blok kada je uslov testa netacan.
IF blok Opsti oblik stmkture je: IF (uslov testa)THEN Blok naredbi ako je taean uslov testa ELSE
Blok naredbi ako uslov testa nije taean END IF 62
Primjer:
10
UNESI X PRINT *, 'UNESI VRIJEDNOST' READ",X AKO JE X NECATIVAN POGRESNO I IDI PONOVO NA UNOS PODAT AKA fP(X
IF konstrukcija U prethodnom dijelu dat je opis jedog IF bloka. U ovom dijelu bit 6e obradena IF konstrukcija, a koja se sastoji od nekoliko blokova. Opsti oblik za konstrukcij)l je: IF (tescuslov_l) THEN 63
FORTRAN progral1liranje za windowse
_________ F_O_R_T_'R_A~l'v_'_' prog ral1lski jez.ik z.a windowse
END IF END IF
blok instrukcija_1 ELSE IF(tescuslov_l) THEN biok instrukcija_2
Modifikovana upotreba ELSE IF konstrukcije
ELSE IF (tesUJs!ov_N) THEN blok instrukcija_N ELSE blok instrukcija_N+ I END IF END IF
. Navedena konstrukcija moze se nazvati iF THEN ELSE konstrucija. MedutllTI moze se izvrsiti njena modifikacija u IF THEN ELSE IF konstrukciju. Primjena ovog oblika dana je na istol11 primjeru gdje citaoci mogu primUetiti razliku izmeou opisanih konstrukcija. Opsti oblikje: IF (test_uslov_l) THEN blok instrukcija_1 ELSE IF (test_uslov_l) THEN blok instrukcija_2
END IF Vazno je napomenuti da broj otvorenih blokova mora biti u saglasnosti sa zatvaranjem bloka, odnosno broj IF naredbi mora biti jednak broju END IF naredbi. Primjer:
Temperatura::; 0" 0° < T::; 10 10 < T::; 20 20 < T::; 30 T»30
'smrzavanje' 'hladno' 'umjereno' 'toplo' 'vrlo toplo'
PRINT". 'UNESI TEMPERATURU U STEPENIMA C' READ", C IF(C<=O) THEN PRINT*, 'SMRZAVANJE' ELSE IF(C<= 10) THEN PRINT*, 'HLADNO' ELSE IF(C<=20) THEN PRINT", 'UMJERENO' ELSE IF(C<=30) THEN PRINT*, 'TOPLO' ELSE PRINT*, 'VRLO TOPLO' END IF
END IF 64
ELSE IF (test_uslov_N) THEN blok instrukcija_N ELSE blok instrukcija_N+ 1 END IF Primjer: PRINT*, 'UNESI TEMPERATURU U STEPENHvlA C' READ*, C
IF (C<=O) THEN PI{INP, SMRZAVANJE' ELSE IF(C<=I 0) THEN PR1NT*, 'HLADNO' ELSE IF(C<=20)THEN PRINT", 'UMJERENO' ELSE IF (C<=30) THEN PRINT*, 'TOPLO' ELSE PRINT*, 'VRLO TOPLO' END IF
5.5 SELECT CASE Naredba SELECT CASE predstavlja novinu u FORTRAN90 U odnosu na ranije verzije ovogjezika. Omogucava se izbor alternativnih rjesenja zavisno od kontrolne varijable. Opsti oblikje: SELECT CASE (Izraz)
65
FORTRAN programirunje w windowse
-CASE (izbor \) blok I CASE (izbor 2) blok2
CASE DEFAULT blok n END SELECT Prethodna blokovska struktura pocinje sa naredbom SELECT CASE a zavrsava se sa naredbom END SELECT. IzmeoL! ovih nareelbi je niz CASE-a alternativnih blokova oel kojih se same jeelan izvrsava. U zagraeli varijabla 'izraz' je skalarna velicina koja moze biti INTEGER, CHARACTER iIi LOGICAL varijabIa. Ako ni jeelna oel predviaenih varijanti nije u 'izbor'-u onda se izvrsava blok instrukcija ispod nareelbe CASE DEFAULT. U narednoJ tabel! elato je nekoliko karakteristicnih primjera za ' izbor ': TabeIa 2.14 selector opis iedna vrijednost I CASE (1) Esta vrijednost ] ,3, iIi S CASE (I ,1,S) podrucje vrijeelnosti za izbor CASE (1 :S) poelrucje cijeiih brojeva ( do 0) CASE (:0) poelrucje cijelih brojeva ( od 1) C/\SE (1:) lista vrijech~osi I podrucje cijelih CASE (1,10,100:) brojeva Cod 100) karakter sa vrijednosti 'a' CASE CA') podnicje karaktera (od 'a' do 'h') CASECA':'H') podrucje karaktera (od 'BOB' elo CASE CBOB':'MAT') 'MAT') pogresno - nije isti tip ( INTEGER i CASE (I ,'a') CHARACTER) CASE (2.2S) pogresno: REAL broj
Primjer: PRINT*, 'UNESI TEMPERATURU U STEPENIMA C' READ*, C IC=NINT(C) SELECT CASE(IC) CASE(:O) PRINT*, 'SMRZAV ANJE'
66
FORTRAN progrwnskije2ik z.a winciowse
CI\SE(I:IO) PRINT*, 'HLADNO' CASE( I 1:20) PRINT*, 'UMJERENO' CASE(21 :30) PRINT"', 'TOPLO' CASE DEFAULT PR1NT*, 'VRLO TOPLO' END SELECT
6. PETLJE - CIKLICKE STRUKTURE Petlje, odnosno ciklicke strukture predstavljaju treci tip struktura programa (sl.l.2). Ako se niz naredbi u programu moze izvrsiti vise puta unutar programa, tada se moze reci da ove naredbe obrazuju petlju, odnosno ciklicku strukturu. Meau naredbarna koje obrazujll ovu strukturu mora postojati bar jedna naredba koja olllogucava izlazak iz ciklusa. Uslov pod kojim se izlazi iz petlje naziva se izlazni kriterij petlje. Obzirom na uslov izlaska iz petlje one se mogu podijeIiti na: ./ petlja sa brojacem (DO petlja) i ./ uslovna petlja ( DO WHILE - petlja) Prva grupa podrazumijeva ponavljanje niza naredbi onoliko puta koliko je prije pocetka cik!usa unaprijed definisano. Uslovne petlje, u drugu ruku neimaju llnaprijed definisan broj ponavljanja ciklllsa, nego se kontrola ponavljanja vrsi unutar petlje na osnovu definisanog llslova. 6.1 PETLJA SA BROJACEM Petlje sa brojacem naiaze se u jezicima viseg nivoa (kao sto Sll Fortran, C, Basic, Pascal itd) kojeg upotrebljavaju inzinjeri i naucnici. Broj ponavljanja niza naredbi koje obrazuju ciklus je unaprijed definisan. Opsti oblik petlje sa brojacem je: DOnaziv kontrolne varijable:::: START, STOP, [STEP]
Niz i!1strukcija
67
FORTRAN programskijezik za windowse
FORTRAN programiranje za windowse
END DO DO - naredb~ oznacava pocetak petlje, a kontrola vrsenja ciklusa je preko kontrolne variJable petlje. Pocetna vrijednost kontrolne varijable definisanaje sa vrIJednostl (START), a prekid ciklusa je sa vrijednosti date pod nazivom STOP u semi opsteg oblika petlje. Kontrolna varijabla mijenja svoju vrijednost u zaVlsnostl od unaprijeci definisanog prirastaja (STEP). Ukoliko korak nije definisan automatski se uzima vridnost koraka jedan (STEP= 1). END DO oznacava kraj ciklusa ponavljanja, tj kraj petlje.
U nekol iko primjera bit ce dato nekol iko nacina primjene ove strukture.
I FLOAT - pretvaranje fNTEGERu REAL X=FLOAT(I) *0.1 D0221=1,2 Y=5.-J D023 K=3, 9, 2 Z=O.I'" FLOAT(K) R= SQRT(X*X+ y*y +Z*Z) PRINT*,'X, Y, Z, R',X, Y, Z, R CONTINUE 23 CONTINUE 22 CONTINUE 21 1 naredba CONTINUEmijenjalaje naredbll END DO.a brojevi (21,22 i 23) Ipredstavljaju tacku prekida ciklusa. Ovaj primjer prikazuje primjenu visestruke petlje . !ili 'ugnijezdenih' petlji END
Primjer: PROGRAM petij,U DOl =1,10,1 ! 1- kontrolna varijbla, START=l, STOP=10, STEP=I PRINT *,2*1 1 ispisuj vrijednost proizvoda kontrolne varijable sa 2 END DO 1 kraj ciklusa PRINT *, I ! po izlasku iz petlje vrijednost kontrolne varijable je I=STOP + STEP (10+1=1 J) END
Primjer:
Primjer:
R=~x2 + y2 + Z2
izracunati za kombinacije vrijednosti
Za x=O.l, 0.2, 0.3 y=4.0, 3.0
z=0.3, 0.5, 0.7, i 0.9 PROGRAM FUNKCIJE D02I1=1,3
68
primjenu petlj i sa brojacem vazllo je napomenuti slijedece: Kontrolni parametar je cijeli broj (INTEGER). START, STOP, STEP vrijednosti llloraju biti logicki jasne. Kontrolni parametar se ne moze mijenjati unutar petlje. Petlja mora biti zatvorena. Korak mora biti definisan. Ako nije automatski se uzima 1. U petlju nema uskakanja.
Greske koje mogu nastati:
PROCRAM petlja_2 PRINT *, 'UNESI I, J, K' READ", I, J, K ' llnosc sc vrijcdnost za kontrolnu varijablu, ST ART,STOP iSTEP DOL=l, J, K PRINT", L END DO END
Funkciju
Za I) 2) 3) 4) 5) 6)
001=1,10,1 1=1+ 1 ' Pogrcsno: konlrolni parametar se nesmije mijenjati unutar petlje END DO D01=1O, I (I Pogresno STOP- 1- Krajnja vrijednost se stalno mijenja) DO 1= 1, 10, 0 (korak 0) ! Pogresno DO 1= I, 10, I (mijenja se korak I) I Pogresno Neke korisne napomene: DO 1= I, 10 (korak 1) DO 1=1, 10 (komk 1) DOI=IO, 1, -1 (korak-I)
Irnenovane petlje U cilju lakseg pracenja toka programa, odnosno brojcanog cikillsa petlje lllozemo oznaciti sa imenom. Vazno je da je ime- naziv brojackog ciklllsa logican, odnosno kao i nazivi koje koristimo za konstante i promjenljive mnemotican- prepoznatljiv.
69
FORTRAN pror;ramskijezik
FORTRAN pror;ramiranje :::a windowse
Z(l
windowse
DO NKV2=1, J PRINT *, NKVI+NKV2 END DO END DO
Opsti oblik je: rime:] DO Naziv kontrolne varijabIe= START, STOP, [,STEP]
Za dvostruku petlju tabelarno je dato mijenjanje kontroinih parametara: Niz instmkcija
END DO[imej
Primjer: DEMO: DOI=l, 10, I! naziv pctJjeje DEMO PRINT" ,2*1 END DO DEMO ! U naredbi kojaje oznacila kraj ciklusa navedeno je ime ! petljc PRIl'.fT ", , I
Visestruke petlje U toku izrade programa vrIo cesto se ukazuje potreba za koristenje dviju iii vise petlji, a koje lllOgU biti rasporeaene razlicito, zavisno od slozenosti problema. Opsti oblik za visestmke petije je:
NKVI
NKV2 I 2 3
2 2 2
IZLAZ
2 3
2 3 2 4 6
6.2 USLOVNE PETLJE UsIovne iIi DO WHILE petlje je drugi nacin formiranja ciklusa ponavljanja niza instrllkcija. Kao sto je navedeno i ranije, razlika ova dva oblika je u definisanju prekida ponavljanja instmkcija. Kod Qvog oblika ponavljanje se vrsi sve dok definsani usiov nije jcdse. (Jaz - neistina). U startu uslom mora biti .true., au toku ponavljanja ciklusa uslov mora biti definisan da je odgovor jedna od jedinih dviju aiternativa: iIi .true. iii false .. Opsti oblik konstrukcije uslovne petlje je:
-----
DONKVI= START, STOP, [,STEP]
DO Wl:-IILE
(usiov je ispllnjen)
Niz Instrukcija_l DONKV2= START, STOP, [,STEP]
bIok instrukcija
Niz instrukcija_2
END DO END DO(petlja_2) Niz instrukcija_3 END Do(petlja_l)
Primjer: PRINT* ,'UNESI 1, J' READ"', I, J DONKVI=I, I
70
Primjer: Odrediti srednju tezinu uzoraka do tezine od 2000 grama. 8roj uzoraka nije poznat, kao ni njihova pojedinacna tezina. UKT=O.O NU=O TZU= O. 0 DO WHILE (UKT< =2000) 71
FORTRAN progrumiranje za windowse PRINT *,' UNESI TEZINU UZORKA' READ'" ,TZU UKT= UKT +TZU NU= NU+ 1 ! Broj izmjerenih uzoraka END DO SRT= (UKT-TZU)/CNU-i) !SRT- srednja tezina PRINT *,' SREDNJA TEZINA JE,' SRT END
U ciklickil11 struktural11Cl FORTRAN90 omogucava upotrebu dviju naredbi: EXIT i CYCLE. Naredba EXIT omogucava prekid izvrsenja ciklusa, a naredba CYCLE ol11ogucava ponavljanje dijela ranije navedenih instrukcija. Na preth6c!nom prillljeruiskoristit ce se prillljena ovih naredbi: UKT=O.O NU=O DO PRINT *,' UNESI TEZINU UZORKA' READ * ,TZU IF (TZU>SOO.OO) EXIT IF (TZU<=O.OO) THEN PRINT *,' POGRESNO UNESENA TEZINA! PONOVITE UPIS' CYCLE ELSE UKT= UKT+TZU NU= NU+l ! Broj izmjerenih uzoraka END IF END DO SRT= (UKT-TZU)/(NU-l) !SRT srednja tezina PRINT *,' SREDNJA TEZINA JE,' SRT END
FORTRAN programskijezik za windowse --------------------------
tada XI predstavlja vrijednost 1.55, Xl predstavlja vrijednost 6.1 itd. U FORTRANU ovi elementi mogu biti precistavljeni kao X I, x2, itci, ali nije prakticno ako je broj eiel11enata vrlo velik. Varijable XI, X2, X3, ... ,X n predtavljene sa x( I), x(2), x(3), ... ,x(n) nazivaju se indeksiranim varijablama. Niz ovakvih varijabli nazivLl se imenom x ( niz x). Uopsteno, element niza je xCI), gdje je 1integer (cjelobrojna) varijabla i ima vrijednost 1,2,3, ... , zavisno od elementa kojeg precistavIja. Tme niza moze biti tipa REAL iii INTEGER na prillljer XC 10) iIi M(lO). lndeks nizamoze biti INTEGER konstanta, varijabla iii izraz. Nekoliko primjera prikazuje primjenu indeksa u nizu: Tabela 215 llioga u indeksu: konSlanla varijabla varijabla + konstanta konslanta * varijabla konst. " varij. ± konst. izraz (funkcija)
lspravno:
X(l) X(J) X(J+I) X(2*J) X(2*J-I) X(INT(SQRT(Z»)
neispravno: XC!.) X(Z) X(J+i.l) X(2*J) X(2*J-l.O) X(SQRT(Z»
7.1 N AREDBE DEKLARISNJ A N1ZOV A Prije nego se niz upotrijebi mora se prvo deklarisati. Naredba cieklarisanja se navodi na pocetku prograllla prije izvrsnih naredbi (tabela 2.2) i daje vaznu inforlllaciju za kompaj ler koj i rezervise neophodan lllemorijski nekoliko naredbi - specifikatora: DIMENSION, 1
U sljedecem dijelu bit ce opisane navedene naredbe i prikazane sa
pnmjenma. DIMENSION naredba
7. NIZOVI - INDEKSIRANE VARIJABLE
Vrlo cesto je potrebno da se prikaze niz vrijednosti sa zajednickilll illlenolll prollljenlj ive. Na prillljer odstojanja tacke od niza drugih tacakamoze biti oznaceno sa XI, X2, X3," .,X n . Ove udaljenoti illlaju zajednicko illle 'x', i mogu biti predstavljene sa vektorom iii nizom;
gdje XI, X2, X3,. ",X n predstavljaju elemente niza xi illlaju nUlllericku vrijednost. Ako je x predstavljeno kao: x
= [1.5, 6.1,40.1,23.1, .... )
77
Opsti oblik je; Type,DIMENSION (DONJA GRANICA: GORNJA GRANICA):: IME NIZA .,/ .,/ .,/ .,/
type - tip niza (REAL, INTEGER ,LOGICAL , ... ) 1ME NIZA je :X, TIME, DIST., ... DONJA GRANICA - minimalna vrijednost indeksa GORNJA GRANICA - maksimalna vrijednos niza
U obliku deklaracije moze biti primjenjena naredbaDIMENSION : Type, [lista] DIMENSION (a-specifikator), [listaje:]: IME[specifikator) Primjeri: DIMENSION A(1O,10), B(1O,10), C(1O,15) 73
FORTRAN programiranje za windowse
FORTRAN programski jezik za windowse
DIMENSION ZAVR(12,24,10) DIMENSION X(S,S,S), Y(4,8S),Z( 100) DI1VIENSION MARKER (4,4,4,4) iii REAL, D1MENSION (] 0, 10): :A, B, C(l 0,15)
Opsti oblikje: ALLOCATABLE [::] a((d-spec)] [a(d-spec)]
COMMON naredba
iii REAL, ALLOCATABLE, DIMENSION (:):: E
Opis: Kreira memoriju za globalne podatke za programsku jedinicu.
za niz A u prvom primjeru dimenzije niza su 10* I 0, tj. ima ukupno 100 clanova. U slijedecoj tabeli datjegraficki prikaz rasporeda cianova niza: Tabela 2.16
Pozicija memorije dvodimnzionalni niz DET(3 ,4)' DET(I,]) 4 DET(l,2) I 2 DET(2,1) 5 DET(2,2) 3 DET(3,l) 6 DET(3,2) )j\
7 8 9
DET(],3) DET(2,3) DET(3,3)
110 I II I ]2
DET(l,4) DET(2,4) DET(3,4)
If-
Sintaksa: COMMON [/[cnameJ /] object-list [ [ ,] ; [cname] I object-list] ... cname (Uopsteno) ime common bloka koji sadrzi razlii'ite objekte. Kao primjer, "blank common", blok te rijeci je za sve elemente koji Sll dati U objektnoj Iisti ovog bloka. Ako je prvi biok definisan u COMMON naredbi kao blank, onda je prazllomjesto izmedu kosih linija (I f), a objekti koji su navedeni u glavnoj jedinici moraju bitu ukljuceni u common bloku i U ostalim jedinicama. object-list ledno iIi vise imena varijabli, nizova i deklarisanih nizova odvojenih medusobno zarezom. Napomene:
'-------------''------ Pozicija memorije
trodimenzionalni niz Z(3 ,3 ,3):
I 2 3
T
19 20
Z(I,I,3) Z(2, I ,3)
n 23
Z( 1,2,3) Z(2,2,3)
25 26
Z( 1,3,3) Z(2,3,3)
13
Z( 1,2,2)
16
Z(l,3,2)
27
Z(3,3,3)
I 10
Z(I,I,2)
III 4
Z(2,1,2)
14
Z(2,2,2)
17
Z(2,3,2)
Z(I, I, I)
Z(I,2,1)
7
18
Z(3,3,2)
Z(2,1,1) Z(3,1,I)
5 6
Z(2,2,J) Z(3,2,1)
8 9
ZO,3,1) Z(2,3, I) Z(3,3,1)
J
Pozicija memorije
Naredba ALLOCATABLE specificira da je niz sa 'odgodenom' dodjelom prostora, tj naknadno ce biti 6dredena iIi dana gornja i donja granica niza. Ovaj nacin deklarisanja niza poznat je pod imenom dinamicko dodjeljivanje prostora. Po potrebi, kada nije potreban predvideni prostor, vrsi se njegovo 'oslobadanje' sa naredbom DEALLOCATE. 74
Varijable, navedene u common bloku, moraju biti usaglasene sa listama common bloka u drugim programskim jedinicama. Varijable u common bloku ne mogu biti "glupi" argumenti, dodijeljeni redovi, automatski objekti, nazivi funkcija, nazivi ulaza, automatske varijable, iii nazivi rezultata. Nijedna varijabla u common bloku ne moze imati PARAMETER atribut. Razliciti oblici u common bJoku moraju imati SEQUENCE atribut. Varijable sa POINTER atributom moraju biti deklarisane bilo u tipu izjave bilo u DIMENSION naredbi. Svaka granica u deklaraciji niza u obicnom bloku mora biti konstantno specificirana izrazom. Bilo koje ime common bloka (ukljucujuci i prazan common blok) moze se pojaviti vise od jednom u istoj jedinici programa. Lista elemenata u parcijalnom common bloku tretira se kao kontinuitet liste u prethodnom common bloku sa istim imenom.
Primjer COMMON naredbe: COMMON /ralph/ ed, norton, trixie COMMON / / fred, ethel, lucy COMMON /ralph/ audrey, meadows 75
FORTRAN programiranje
?it
windowse
COMMON /jerry/ mortimer, torn, mickey CO~~ON melvin, purvis
Ekvivalentno je sa: COMMON /ralph/ ed,norton,trixie,audrey,medows CO~10N fred,ethel,lucy,melvin,purvis CO~~ON /jerry/ mortimer, torn, mickey
Duzina common bloka jednaka je broju bajtova memorije koji je potreban da drzi sve elemente u tom common bloku, ukljllcujuci bilo I(oje prosirenje koje rezultira iz asocijacije ekvivalencije. Ako se nekoliko razlicitih programskih jedinica odn6si na isti naziv common bloka, common blok mora biti iste duzine u svakoj jedinici programa. Blank common blok moze da ima razlicitu duzinu u razlicitim jedinicama programa. Ovaj common blok je dugacak kao najduzi blank common biok u bilo kojoj jedinici programa. Ako izrazite Microsoftove atribllte za common blok, koj i ce se koristiti u programskom jeziku C, mozete koristiti samo ALIAS i C sa common biok imenom. Koristenje common bloka za pristup C strllktllre iz Fortrana moze uzrokovati poravnanje problema. Umjesto koristenja naredbe TYPE moze se koristiti naredba deklarisana sa atributom EXTERN. Common blok omogucava (dozvoljava) da dvije iii VIse programskih jedinica direktno dijele varijable, tako da im nije potreban prolaz kao argument procedure. Mikrosoftov Fortran i Visual FORTRAN normalno starta sve varijable i slaganje (ukljucujuci karakter varijable i nizove) u memoriju, Ll pravilll, sto blize jednll drugoj kako je Ll datom slucaju najbolje moguce napraviti. Kompajler izvlaci varijable II common blok saglasno slijedecim pravilima: ./ Pojedinacna BYTE, INTEGER(l), LOGICAL(l), iIi CHARACTER varijabla U objekt-listi pocinje neposredno slijedeci prethodnu varijablu ili niz u memoriji. To se takoae primjenjuje na bilo koji strukturni iii derivirani tip cija je velicina sarno jedan bajt. ./ Sve druge pojedinacne varijable pocinju na slijedecoj adresi neposredno slijedeci prethodnu varijablu iIi niz u memoriji . ./ Svi nizovi varijabli, izuzev oznake niza, pocinju sa slijedecim dogaaajem adresiranim da neposredno slijede prethodnu varijablu iIi niz. Svi elementi niza neposredno slijede jedan drugoga . ./ Svi common blokovi pocinju na cetverobitnoj adresi niza.
76
FORTRAN programskijezik za windowse
Zbog poravnanja niza adresa, mijesanje razlicitih duzina karakter varijabli sa drugim tipovima varijabli II common bloku moze uzrokovati problem. Ako common bIoi<. ukljucujemo udrugu programsku jedinicu, koja ne saclrzi karakter varijable, postojat ce praznine u ekvivalencij i uzrokovane nekoristenim bajtovima u bloku sa preostalom duzinol1l karaktera varijabli. U oclnosu na poredane varijable, neporedane varijab!e zahtijevaju vise vremena cIa bi se doslo do njih. Varijabla koja se pojavi U COlllmon bloku ne moze biti inicirana U DATA. nareclbi sve dok je ta DATA naredba dio BLOCK DAT A potprograma. S lijecleci primjer prikazuje kompaj lersku gresku (compile-time error): INTEGER: : i= 1 COMMON i Common blok moze sadrzavati CHARACTER iii drugi tip oznaka sve dok svi cIogaaaji imenovanog bloka sadrze iste sekvence, tako cIa Sll karakteristike varijabie (tip, vrsta, i dr.) egzaktno ukljucene izmeau objekata liste. Blank common blok ima ista svojstva leao i imenovani common blok, sa izuzetkom sl ijedeceg: ./ Nakon RETURN iii END naredbe, objekat u imenovanom common bloku moze postati nedefinisan sve clok se ne deklarise uSA VE naredbi. Objekat u blank commonu nikada ne postaje nedefinisan poslije RETURN iii END. ./ Common blok, koji dijeli isto ime, mora imati istu velicinll u svim programskim jedinicama u kojima se pojavljuje. Blank common blokovi mogu biti razliciti po velicini. ./ Jedinica bloka programa podataka moze inicijalno definisati objekat podataka u imenovanorn common bloku nazivom DATA narecIbe iii oclreaenim tipom deklarisanog naziva. Objekti II blank common listi ne mogu biti inicijalno definisani. PROGRAM MyProg COMMON i, j, x, k(10) COMMON /rnycorn/ a ( 3 END SUBROUTINE MySub COMMON pe, rnn, z, idurn ( 10 ) CO~ON /mycom/ a(3) 77
FORTRAN programski jezik za windowse
FORTRAN programiranje za windowse
primjer bez greske: EEAL r, s ( 10 ) EQUIVP,LENCE (r, s ( 1) ) EQUIVALENCE (r, s(2»
END
ALENCE naredba
S 1ijedece nije dozvoljeno:
Opis: Slueaj da dvije iii vise varijabli iii nizova koriste istu memorijsku lokaciju. Sintaksa: EQUIVALENCE (nlist) [ , (nlist)] ... nlist Dvije iii vise varijabli, nizova iii elemenata niza odvojenih zarezom. Indeks mora biti INTEGER konstanta od cijelog broja i mora biti unutar granica niza koji su indeksirani. Neindeksirani niz odgovara prvom elementu l1lza. Primjedba: EQUIV ALENCE naredba uzrokuje da svi elementiti u 11 jednostavno zauzimaju isto mjesto u memoriji. Varijable u 11 ne mogu ukljueiti osamostaljenje, ciljeve, DUi\1MY argumente iii doznaeene nizove, automaske oznake, imena funkcija, imena ulaza, nazive rezultata, nazivekonstantl III strukture komponente. Ako je jedan elemenat u 11 listi izvedenog tipa, nijedna od tih komponenti ne moze biti pointer. Pridruzene oznake posebnih jedinica mogu dovesti do kretanja uhug, kako je pokazano na slijedecem primjeru:
CHARACTER a*4, b*4, c(2)*3 EQUIVALENCE (a, c(l» (b, c(2) Primjer moze biti ilustrovan:
2
3
4
5
6
7
a b
Slijedeca pravila odreduju kako mozete ujediniti elemente:
! primjer greske: EEAL r(lO), s(10) EQUIVALENCE (r(l), s(l» EQUIVALENCE (r(5), s(7»
Kompajler uvijek poreda neznakovne varijable na even-byte Crijee) granice. Slijedeci primjer uzrokuje kompajler-vremensku gresku, zbog toga jer varijable a i b ne mogu biti poredane simultano kao rijeei: ! ovo je primjer druge vrste greske: CHAEACTER*l cl(10) REAL a, b EQUIVALENCE (a, c1 (1) ) EQUIVALENCE (b, c1(2»
U Standard Fortran 90 ne mozete pridruzivati karakter i druge varijable. Sa Microsoft Fortranom i Visual Fortranom mozete pridruzivati siovne i neslovne varijable, ali ne i na takav naein da neslovne varijable startaju na oddbyte g~anici. Ako je neophodno, kompajler podesava lokaciju pohranjivanja karaktera tako da druge varijable poeinju na odredenom bajtu. Slijedeci primjer slucajeva kompajler-vremenske greske je zbog nemogucnosti promjene niza slova, tako da neslovne varijable poenu na even-byte adresi:
CHARACTER*l EEAL rea1a, EQUIVALENCE EQUIVALENCE
charl(10) rea1b (rea1a, char1(1» (rea1b, charl(2»
Ono sto se pojavi u n ne moze biti inicajalizirano primjer uzrokuje gresku:
INTEGEE i /1/ EQUIVALENCE (i,
II
tipu izjave. Slijede6i
j)
Varijabla ne moze zauzeti vise od jedne memorijske lokacije, niti mogu dva iIi vise elemenata istog niza zauzimati istu memorijsku lokaciju. 78
79
FORTRAN programiranje za windowse
FORTRAN prograrnskijezik za windowse
-----------------------../
naredba ne moze dijeliti memoriju izmectu dva razlicita C0111mon bloka iii izmedu elemenata istog common bloka. ../ ALENCE naredba ne moze prosiriti common blok dodavanjem elemenata memorije u slijedeci common blok, tako dugo dok /\LENCE naredba ne dobije ime common blokova cija je duzina raziicita od duzine istog nazvanog common bloka u drugoj programskoj ../
Primjer: CHJI"Pl'iCTER name, first, middle, last DINENSION name(60), first(20), middle(20, last(20) EQUIV'\LENCE (name(l) , first(l)) ,(name(2l), middle(l)) EQUIV}'J~,ENCE (name (41) , last_(l))
7.2 INPUT/OUTPUT NIZOVA
naredba ne moze prosiriti common blok dodavanjem memorijskih elemenata u slijecleci common bIok, kako je dato i u slijedecem primjeru; ovo je
pr~mjer
Input - unos i Output - ispis elemenata niza iii cijelog niza moze biti sa upotrebom: DO - petlje imena-hiza podrazumijevane DO - petlje
greske
CmlJl!ION /abcde/ r (10) REAL s(lO) EQUIVALENCE (r(l), s(7)) j fj
L ?
1
')
S7
2 r1 Sx
3 f3 S')
1
1
Operacije TNPUT/OUPUT - a bit ce prikazani na primjerima unosa podataka: 4
5
f4
r5
1 5 10
I I
6
r6
I I
7
r7
!
1
8 fR
1 1
9 1"9
1 1
10 riO
J J
Sve dok $STRICT metakomanda djeluje, komanda zahtijeva same prvi indeks muitidimenzionog niza. Na primjer, deklaracija niza var(3,3), var(4) moze se p~javiti u komandi. Referensa je u cetvrtom elementu niza (var( 1,2», a ne da pocinje cetvlii niz iii kolona. Ako koristite $STRICT metakomandu iii /4Y ski kompajlerski switch, slijedece pravilo primjenjuje se za onu vrstu varijabli i nizova kako slijedi: ../ Ako je neki EQIUV ALENCE objekat deklarisan default (neizvrsenje) cijelog broja (integer), neizvrsavanje (default) stvarno, dupla preciznost stvarna, neizvrsenje (default) kompleks, neizvrsenje (default) logieno, iIi sekvencijalno definisani tip svih numerickih iii logiekih komponenti, svi objekti u EQUIVALENCE naredbi moraju biti jedan od ovih tipova, sto znaci daje neophodno da moraju biti istoga tipa. ../ Ako je EQUIVALENCE objekat neizvrsavaju6i broj iii sekvencirani razvijeni tip svih brojeanih komponenti, svi objekti u EQUTV ALENCE naredbi moraju biti istog razvijenog tipa. Nije neophodno da bude ista duzina . ../ Ako je EQUIVALENCE objekat sekvencijalno razvijenog tipa, koji nije cisto numericki iii eisto brojean, objekat u EQUIV ALENCE naredbi mora biti istog razvijenog tipa . ../ Ako je EQUTV ALENCE objekat pravi tip za razlikll od onog koji ne izvrsava (na primjer,INTEGER (1) ), svi objekti uEQUIV ALENCE naredbi moraju biti istog tipa iii vrste. 80
Jednodimenzionalni niz A) DO 1=1,10 READ '" VEL(I) ! unosi se elemenat po elemenat niza END J)O
B)RE/\D *, VEL
-ekvivalentno je saREAD *, VEL(I), VEL(2).
*,(VEL(I),I= 1,10) Dvodimenzionalni (viSedimenzlonalni) niz A) DO J=1,10 DO J=1,3 READ *, TEMPCI) ! unosi se elemenat po elemenat niza END DO END DO B) READ *, TEMP -ekvivalentno je saREAD *, TEMP(l, 1), TEMP(l,2) ... C)READ *,«TEMP(I,J),I= 1,4»)= 1,3)
7.3 RAD SA NIZOVIMA lednodimenzionalni nizovi su se upotrebJjavali za storniranje memorisanJe i manipulaciju Iista podataka (kasnije i tabela). Ovi podaci mogu 81
FORTRAN progralllskijezik za wit/dowse FORTRAN programiranje za window.I'e
biti sistematicki stornirani, pregledani i proracLlnati. Obzirom na organizacijLl, procesi sa nizovima idealni su primjeri za ciklicke strukture: Primjer: IzracLlnati sumLl niza: ;=100
a=
2. 3.
4. S. 6.
Lyi i:::::1
. Matematicki simbol'L:' predstavlja cia ce se izvrsiti sabiranje clanova niza II OO,i da cerezultat biti clat kao varijabla 'a' ...,
sum=O. petlja (I=l do N) unos vrijednosti kao XCI) dodaje XCI) u sum Racuna se srecinja vrijednost ( avg=sum/N) petlja (I=! do N) racllna se dev(i)=x(i)-avg daje se podatak x(i),dev(i)
Sema taka:
Sema toka:
START = 1 STOP = 100 STEP = 1
S7ART= 1 STOP = N STEP = 1
a = a + Yi
Listing: PROGRAM SUMA_A REAL, DIMENSION (l00) ::Y
S7i1RT= / STOP = N STEP = 1
A=O.O DO 1=1,100 A=A+YCI) END DO
Primjer: Slijecleci primjer programa bit ce za L1nos poclataka (clo 100), izracunavanje zbira i srednje vrijednosti i devijacije:
OUTPUT: DEV, X(I)
END
ALgoritam: I. unos broja podataka (N) 83
82
FORTRAN programskijezik za windowse
FORTRAN programirallje z{[ ,vindolVse listing:
dijelovi illternog potprograma PROGRAM[ ime ]]
PROGRAM SUMA_A REAL, DIMENSION(lOO): :X,DEV PRINT *, 'UNESI BROJ VRIJEDNOSTI READk ,N
(N <= lOO)}'
izvrsni dio - predstavlja jednu iii vise izvrsnlh naredbi (tabela 2.2) iIi konstrukcija, osim naredbi RETURN i ENTRY clio internog programa - Je clio koj i sacinjava jedna ii i VIse jedinica nareclbom CONT A1NS·
l'NG=SUM/N
DO I=l,N DEV(I) =X(I} -AVG PRINT *, 'DEVIJACIJA ZA X -, END DO END
X(I},' JE =' ,DEV(I)
8.1 GLAVNIPROGRAM Fortranski program moze biti sastavljen samo od jednog dijela, ali mora imati glavni program (main) u obliku:
84
progral11skih Dio internog programa odvojen je sa
Prije naredbe PROGRAM mogu biti upisane linije komentara iIi naredbe. Ime programa nemoze se koristiti kao ime za konstantu iii varijablu, naziv eksternih jeclinica iIi COtvlMON bloka.
Najbolja strategija U ijesavanju slozenih problema i izradi kompleksnih programa je modulizacija tj, podje\a jednog velikog problema na nekoliko iii vise jednostavnij ih problema koji cine jednu cjelinu. Program napisan u FORTRANU moze da se sastoji od jedne iii vise programskih jedinica. Uglavnom, programske jedinice su: glavni program (main program) i programske procedure: eksterni potprogrami i MODUL i BLOCK U uvom dijelu bit 6e obradene navedene programske jedinice sa najosnovnijim opisom i jednostavnijim primjerima.
ime] [speclfikacioni dijelovi] [izvrsni dijelovi]
ili
, ,AVG
8. PROGRAMSKE JEDINICE ------>
ime - naziv programa. Pozeljno je da je ime koje cl~emo programu mnemoticno.
specifikacioni dio - predstavija jeclnu iIi vise specifikacionih naredbi (tabela 2.2), osim naredbi INTENT, OPTIONAL, PUBLIC iii njima ekvivalentnih nareclbi_
SUM=O. DO I=l,N PRINT *, ' UNESI PODATAKA BR:' ,I READ * ,X(I) SUM=SUM+X(I) END DO
PRINT *, 'SREDNJA VRIJEDNOST JE
J
U slijede6em primjeru bit ce dat kratak redoslijed navedenih dijelova programa: PROGRAM test: INTEGER C,D,E(lO,lO) CALL SUB 1
CONT1>.INS SUBROUTINE SUB_l
lme programa: test speciiikacioni dio ! izvrsni 9i~o__________
interni potprogram
END SUBROUTINE SUB 1 END PROGRAM test Primjer glavnog programa:
Laborant-instruktor zeli da podijeli 12 studenata u dvije grupe sa 7 i 5 stuclenata. lzracunati broj l11ogu6ih kOl11binacija.
c=
12!
5!7! n-broj studenata i-broj studenata u jednoj grupi
85
FORTRAN programiranje za windowse
Algoritam i sema toka: nl C=---if ( n - 1)!
/
FORTRAN progmmskije;:ik za windowse
8,2 PROGRAMSKA JEDlNICA FUNCTiON
Potprogram FIJNCTION (iIi ENTR je programska jedinica koja sIuzi za izracunavanje izraza pri pozivu, a kao povratnu informaciju ima samo jednu izlazl1l1 veli6inu: izracllnatu vrijednost
Read
Opsti oblik je: type FUNCTION ime (lista varijabIi) potprogramske inst;ukcije Slart Stop
~
RETURN ENI)
I
~ /I
Pril17jer: Prethodni program (KOMS _ BROlEY A) bit 6e uracten primjenom potprograma (IFACT),
'Start ~ I Stop~i
Start ~ I Stop ~ 1/-/
Sema toka:
C
IFACT::=>
1 iti/C/
~
/
1 Listing:
Slart ~ I SlOP ~ I
PROCRAiVf KOMB_BROJEVA READ*, N, I Kl=l K2=1 K3=1 DO K=I,N KI=KI*K END DO DO L=l, I K2=K2*L END DO DO M=l, N-I K3=K3*M
C
Return::=>
END DO C=K1/K2/K3
PRINT*, C END
86
PROGRAlVl BROJ_KOMB2 PRINT* , 'UNESI N i l ' READ*' N, I Kl,=IFACT (N) FUNCTION N - ulazni argument
!IFACT -
lme za
87
FORTRAN programski jezik za windowse
FORTRAN programiranje za windowse
K2 -
K2=IFACT(I) izlazna vrijednos~ K3=IFACT(N-I)
argument K3 -
*
I - ulazni argument Ugao
! N -
I - ulazni
izlazna vrijednost
C=Kl/K2/K3 ~)R_IN'I
I
r
C=
I
,e
RaClInanje
ska/(lrrtox proi7.voda DOT
IF1\CT - ulazni argument IFACT=l J=l,L IFACT=IFACT*J
(L)
IFACT - lme za FUNCTION, L
A
=
!'f (//)2
V
B
i=l
U"C/O
"
=
if (J/ ? j i=l
Dotprod = arccos'( -~-AxB
l
Primjer:
Napisati program, semu toka i algoritam za odredivanje ugla izmectu dva Return
vektora.
Listing:
Sema toka: Function SKALP Read n fl(l) to((III) f2(2) tof'(IIl)
C
88
1
Return
~
REAL Fl(IOO), F2(lOO) PRINT*, UNESI BROJ ELEMENATA FI i F2.' READ*, M, FI(I), I=l,M), F2(J), J=l,M) ANS=UGAO (Fl, F2, M) 'UGAO='. UGAO*S7.296 END _ _ _ _---,!~,.-:'UNCT10N UGAO (Fl, F2, M) REAL Fl CM), F2(M) A=O. B=O. DO I=I, M A=A+Fl(I)**2 B=B+F2(I)**2 END DO SKALPROD=SKALP (F!, F2, M) UGAO =ACOS (SKALPJSQRT(A*B» RETURN END FUNCTION SKALP(Fl,F2,L) REAL FJ (L), F2(L) SKALP=O.O DO I=I,L SKALP=SKALP+F I (I)*F2(I) END DO RETURN END
89
FORTRAN programskijezik za windO\+'se
FORTRAN prugramiranje za windowse
8.3 PROGRAMSKA JEDINICA S\;BROUTINE
Test primjer:
SlJBROUTINA je programska jedinica koja se poziva sa naredbom CALL iii naredbom pridruzivanja, a kao izlazne podatke moze imati veci broj argumenata.
Fl= (12, 5, 6) F2= (3, 2, 0) FI *F2= I 2*3+5*2+6*0=46 !Fl!=.J3 2
+22 +0
2
=)13 Opsti oblik je: F'
CALL potprograrnirne (V I, V2, ... , VN) SUBROUTINE potprogramirne (V I, V2, "" VN;
F'
CALLADD (X, y, Z, I, SUM) SUBROUTINEADD (A B, C, L, TOT)
-hos .
coscx=461 J3 cx=cos'\0.89 1065)=26.992770°
Primjer: . Napraviti program za izracunavanje vrijednosti determinante 3x3 koristeci Cramerov postupak: a l2 an all a 21
a 22
an
u::\!
a.12
a.13
PRGGR2\l'1 DETERl'1INANTA RE}""L A ( 3 , 3 ) PRINT *, 'UNESI HATR1CU PO REDOVIl:1A' READ *, ((A (I, J), J=L 3), 1=1,3) PRINT * 'DETERl'11NANTA A JE DET A=' END
RETURN END
Potprogramime - naziv programske jedinice (VI ,v2, .. ,V4) - !ista varijabli (pri pozivu i u sklopu programske jedinice broj argumenata mora biti isti) Ova programska jedinica, kao sto je navedeno, na prvoj liniji ima naredbu SUBROUTINE i ime - potprogramime sa listom varijabli, Povratak se omogucava sa naredbom END (ilili Subroutina ne moze sadrzavati naredbe BLOCK DATA, PROGRA"v1, ali naredba El',TTRY moze biti ukljucena. Primjer: Rijesiti sistem jednacina primjenom Cramerovog pravda
DET (A)
detA= FUNCTION DET (A) RKsL A(J,J) DET=A(1,1)*(A(2,2)*A(3,3) - A(2,3)*A(3,2))- & A(1,2)*(A(2,1)*A(3,3) - A(2,3)*A(3,1))+ & A(1,1)*(A(2,2)*A(3,2) - A(2,2)*A(3,1)) RETURN END
90
all
a l2
aD
a 21
an
a 31
a 32
an a 33
detA I =
hi
a l2
aD
h2
a 22
a 23
h3
a 32
(/33
det A2 =
all
hi
(/13
a 21
b2
a 23
a 31
h3
a 33
X. = detA; detA I
7X I +2X 2 +3X 3 =45 -lX 1+4X 2 +8X 3=44 2X I -3X 2+2X 3=28
X I =4 X 2=-2 X3=7
91
FORTRAN pmgramskijezik za windowse
FORTRAN programiranje za windowse
Listing: REALA(3,3), X(3), B(3) 001=1,3 PRINT *, 'UNESI KOEFICIJENTE I KONSTANTE ZA & JEDNACINU', I READ *, (A(l,J), J=l ,3), B(l) END DO CALL CRAMER (A, X, B) ! poziv potprogramske jedinice sa lislom argumenata: A,X,B - nepoznataje X u pozivu *,'NEPOZNATE SU,', (X(I), 1=1,3) END SUBROUTINE CRAMER (A, X, B) REAL A(3,3), X(3), B(3), A\(3,3), A2(3,3), A3(3,3) DENOM=DET A Al=A A2=A A3=A DO I=I,3 A\ (1,1 )=B(I) A 2 (1,2 )=B (I) A3(I,3 )=B(I) END DO X(I)=DET (Al)/DENOM X(2)=DET (A2)/DENOM X(3)=DET (A3)/DENOM RETURN
R(2,2)=COS(UGAO) R(3,3)=1 CALL l'v'lATMUL CR, FI, F2, 3, 3) END SUBROUTINE MATMUL CA, B, C, M, N) REAL A(M,N), B(N), C(M) DO I=I,M C(I)=O.O DOJ=I,N C(I)=C(I)+A(I, J)*B(J) END DO END DO RETURN END
Serna taka: Matmll{
Rend
start = I stop = 111
END novo F
start = I stop = n
Primjer: Naci kompanente vektara F (2, 4, -1) u kaordinatnorn sisternu koji je zarotiran aka z-ose za 30° . Listing: REAL PI (3), F2(3) READ*, (F(I), 1= 1,3), UGAO CALL ROTACIJA (FI, UGAO, F2) PRINT*, (F2(I), 1= I ,3) END SUBROUTINE ROTACIJA (Fl, UGAO, F2) REAL FI (3), F2(3), R(3,3) UGAO=UGAO/57.2958 R=O R( 1, I )=COS(UGAO) R( 1,2)=-SIN(UGAO) R(2,1 )=SIN(UGAO)
92
costa)
R = Sin~a) [
-sin(a) costa)
°
0° ]
1
93
FORTRAN programskijez.ik za windowse
FORTRAN programiranje z.a windowse
SUB
Raspored 'UTINE.
varijabli
nizova prije
i
naredbe
CALL
u
sklopu
deklaracione i inicijalizacione naredbe END ~v!ODULE [modul- ime] modul-ime - ime za modul
REALA (100) I
(X, TOTAL) REALX(IOO)
~~
"AT'
'-r\.LL
~ROUTI.NESUM
SUM (A, TOT) .~
-
- - - - END
specifikacioni dio - jedna iIi vIse specifikacionih naredbi (tabela 2.2), ENTRY, OPTIONAL
OS 1m:
modul potprogram - je FUNCTION iIi SUBROUTINE potprogramska jedinica definisana za modularni pIoces. Mora na kraju imati naredbu END FUNCTION iIi END SUBROUTINE.
END Primjer: U ovom primjeru definise se modul za konstantu PI sa nekoliko modula koji imaju pristup konstanti:
REAL A(lOO), B( 100)
CALL ADD (A, 100, TOTALl) ,
......__i'Y SUBROUTINE ADD ex, M, SUM)
.~
~"""
.
CALL ADD (B',
/;'f
REAL X(M)
/ .
10'TOTAL2)/"~E~TD
. 4----------------------
MODULE CONSTANTE REAL, PARAMETER:: PI=3.14159 HID !'vlODULE CONSTANTE I prvi modul deklarise konstantu SUBROUTINE A( ) USE CONSTANTE linstrukcija za uzimanje konstante I
END
END
. I I drugi modul sa islom instrukcijom REAL FUNCTION B( ) USE CONST ANTE
8.4 PROGRAMSKA JEDINICA: MODULE Novina u FOTRAN90 programskom jeziku je i ova programska jedinica. Moze biti pridruzena drugim programskim jedinicama sa naredbom USE· Opsti oblik je: MODULE modul-ime [specifikacioni dio] [CONTAINS modul potprogram [modul potprogram] ... ] 94
END
Drugi pnmJer je dat za izracunavanje zbira dva vektora. MODUL pocinje sa naredbom TYPE, deklaracijom za vektore kao INTERFACE BLOCK za novo definisanje i za sabiranje. Poslije unosenja vrijednosti vektora Ai B vrsi se njihovo sabiranje sa naredborn C=A+B: Listing programa:
MODULE VECTORS 95
FORTRAN programiranje za windowse
TYPE VECTOR REAL, DIMENSION (3) :: VALUE '2:ND TYPE VECTOR INTERFACE OPERATOR (+) ! OZNAKA ZA SABIRANJE VEK'l'ORA MODULE PROCEDURE VECTOR_ADD! Pridruzivanje za funkciju END INTERFACE ! kraj interfejs bloka CONTAINS FUNCTION VECTOR_ADD (A, B, A_PLUS_B) TYPE (VECTOR):: A, B, A_PLUS_B A_PLUS B%VALUE=A%VALUE + B%VALUE'DEKLARISANJE NIZA END FUNCTION VECTOR_ADD END MODULE VECTORS USE VECTORS TYPE (VECTOR) ! A, B, C GLAVNI PROGRAM PRINT *,' UNESI VEKTOR A' READ * ,A PRINT *,' UNESI VEKTOR B' READ *, B C=A + B ! UPOTREBLJAVA NOVI + OPERATOR A+B=' ,C PRINT * END
Izgled ulaznih i izlaznih parametara:
FORTRAN !)rogramskijezik za windowse
----------------------~~--
-------------------------
8.5 PROGRAMSKAJEDINICABLOCK DATA Ova programska jedinica daje pocetne vrijednosti za nepromjenljive varijable u imenovanimCOMMON biokovima. Ona ima slijedeci oblik: BLOCK DATA lime] [specifikacioni-dio] END r BLOCK DATA lime]] ime: naziv BLOCK DATA programske jedinice specifikacioni dio: jedna iii vise od slijedecih naredbi:
DATA Derivecl-typeciefinition DfMENSION EQUIVALENCE IMPLICIT
INTRINSIC PARAMETER POiNTER RECORD SA VE
STATIC TARGET Tip deklaracije 1 USE
Primjer:
U slijedecem primjeru je dat prikaz programske jedinice BLOCK DATA. BLOCK DATA BLKDAT !BLKDAT - ime INTEGER S, X ! Slijedi specifikacioni dio LOCIeAL T, W DOUBLE PRECISION U DIMENSION R(3) COMtvlON IAREAJ/R, S, U, T, IAREA2/w, X, Y DATA Rll.O, 2*2.0/, TI.FALSE'/, U/O.214537D-7/, WI. TRUE.!, YI3.SI END
9. RAJ) SA DATOTEKAMA U dosadasnjem radu prvenstveno se koristio unos ~NPUT) podataka i izlaz PUTPUT) preko tastature i terminalskog skrina, Koristene su naredbe READ * iPRINT *. Prilikom unosa podataka i iziaza rezultata dolazi do brisanja skrina sto onemogucava rad sa vecim brojem ulaznih podataka. Npr. ako imamo 100 tacaka koje moramo unijeti i za njih treba izvrsiti 10 razlicitih varijanti proracuna sa manj im izmjenama u jednoj tacki, to predstavlja 1000 podataka koje moramo direktno unijeti. Meautim, koristeci fajI, to omogucava samo llovih 10 podataka, 1
96
Moze biti upotrijebljenjedan od atributa:DIMENSION. INTRINSIC, PARAMETER, POINTER, SAVE, STATiC, or TARGET.
97
FORTRAN programiranje
za windowse
FORTRAN !7rogramskijezik za windowse
Datoteke (data fajlovi) se ne razlikuju od dmgih fajlova koji su memorisani u racunaru. Sa takvim faj lovima moze biti jednostavno manipUlisano. Fajl se npr. moze pregledati na skrinu, poslati na sistemski printer i/ili napraviti kopija na nekom dmgom disku. Neke od opcija za slanje fajla su: printer, floppy ili hadrdisk, FAX modem, ploter, CD disk, itd. Postoji vise vrsta datoteka, zavisno od kompajlera, ali su bitna dva tipa koja su zajednicka za sve FORTRAN kompajlere: ../ sekvencijalna datoteka i ../ direktna (random) datoteka. Sekvencijalna datoteka je datoteka sa podacima koji su arhivirani po redosUedu unosenja. Prvi podatak koji je upisan je i prvi podatak koji ce biti procitan itd. Da bi se pristupilo nekom podatku koji je arhiviran u sekvencijalnom nizu mora se 'proci' kroz sve podatke koji su prije njega upisani. Ove datoteke su lakse za kreiranje, ali su manje fleksibilne, sporiji pristup podacima i zauzimaju vise prostora (memorije) Direktne datoteke su vrsta datoteka gdje se svakom podatkll moze pristllpiti direktno. Izcitavanje bilo kog podatka nije uslovljeno prethodnim izcitavanjem niza podataka koji su ranije bili upisani, jer su podaci organizovani u zapise. Za rad sa datotekama moraju se poznavati: '/ instmkcije za otvaranje i zatvaranje fajla: OPEN i CLOSE, ../ instrukcije za rad sa fajlom: READ, WRITE, PRINT i ENDFILE, ../ instrukcija za trazenje fajla: i REWIND i ../ instnilkcije za pozicioniranje fajla: BACKSPACE i REWIND. U narednoj tabeli datje pojedinacni opis svake naredbe, odnosno njene _ funkcije. Tabela? ..lS
-
Naredba BACKSPACE CLOSE ENDFILE EOF INQUIRE OPEN PRINT READ REWIND WRITE
Funkcija Vraca poziciju fajla za jedan zap is Zatvara faji Pise zadnji zapis u fajiu Determinise gdje je podatak u fajiu nakon odgovarajuceg pozicioniranja Vraca karakteristike oznacenog iii Eksternog fajJa Otvara fajl Stampanje podataka u fajl (*) Ulazni podaci Vraca fajl u pocetnu poziciju Izlazni faj I
Sintaksa za pojedine naredbe u sklopu glavne naredbe za :VO datoteke:
98
BACKSPACE naredba BACKSPACE naredba vraca sekvencijalni fajl na pocetak pretboclnog zapisa. Sintaksa: BACKSPACE ([UNIT= ]io-unitLERR=]abel] [,IOSTAT=I-var]) BACKSPACE io-unit io-unit je specifikacija eksterne jedinice . label je labela za kontrolu II sillcaju greske. l-var je neka skalarna intidzer varijabla koja definise pozitivnu vrijednost, ako je greska oncla nula. Prirnjer:
U slijedecem primjeru dace se prikaz za vracanje jedinice 4 na prethodni zapis: BACKSPACE 4 Isto tako moze se dati i slijede6i redoslijed naredbi: BACKSPACE (UNIT=9 , IOSTAT=IOS, ERR=lO) Ova naredba claje poziciju fajla sa jedinicom 9 na prethodni zapis. Ukoliko se pojavi greSka, kontrola se premjesta na labelu 10.
CLOSE naredba Ova naredba zatvara fajl kao jeclinicu. Sintaksa: CLOSE ([UNIT=])io-unit [,(STATUS}=p] [,ERR=label] [,IOST A T=I-var]) io-unit je specifikacija eksterne jedinice. p
je skalarni karakter koji pokazuje status fajla poslije zatvaranja. label je labela za kontrolu u slucaju greske. [-var je neka skalarna intidzer varijabla koja definise pozitivnu vrijednost, ako je greska onda nula. 99
FORTRAN programskijezik za windowse
FORTRAN progrwniranje za windowse
Primjer: CLOSE(UNIT=J, STATUS='DELETE', ERR=99)
Ova naredba zatvara fajl sa jedinicom J i brise ga poslije. Ako je greska, ide na labelu 99.
END FILE naredba ENDFILE naredba napisana kao zavrsni zapis na fajlu (terminalska tacka j sekvencijalna datoteka-fiie). Sintaksa: ENDFlLE ([UNIT=Gio-unit[,ER...T-<.=label] [,IOSTAT=I-var]) iii END FILE io-unit io-unit je specifikacija eksterne jedinice. label je labela za kontrolu u slucaju greske. J-var je neka skalarna intidzer varijabla koja definise pozitivnu vrijednost, ako je greska onda nula. Primjer: Slijede6a naredba pise zavrsni zapis na riO jedinice 2: ENDFILE2 Takode se moze dati ista naredba sa slijedecim opisom: ENDFILE (UNIT=9, IOSTAT=IOS, ERR=IO)
Zadnji zapis je zapisan 11a fajlu oznacenom kaojedinicom 9. Ako je greska, vrsi se transfer na naredbu sa labelom 10 i intidzer varijablom lOS.
Naredba Ova naredba vraca informaciju koja definise karakteristike fajla iii logicke jedinice. Sintaksa za fajl: INQUIRE (FlLE = name [,ERR = label] [,IOSTAT = I-var] [,DEFAULTFILE = def], slist)
Name ime fajla. label je labela za kontrolu u slucaju greske. J-var je neka skalarna intidzer varijabla koja definise pozitivnu vrijednost, ako je greSka onda je vrijednost nula. slist je jedan iii vise specifikatora. Primjer: INQUIRE (FILE='FILE B' , EXIST=EXT) INQUIRE (4, FORM=FM, IOSTAT=IOS, ERR=20) INQUIRE (IOLENGTH=LEN) A , B
FO RM Specifikator FORM je pitanje da Ii je fajl konektovan u binarnom (WNT, W95), formatiziranom iIi neformatiziranom kodu. Opsti oblik: FORM=fm 'FORMATTED 1 formatiziran transfer 'UNFORMATTED' neformatiziran transfer BINARY binarni tran.lj"er 'UNDEFINED' nedefinisani transfer
Otvaranje fajla Opsti oblik naredbe za otvaranje fajle je slijede6i: Sintaksa: OPEN ([UNIT=]io-unitL FlLE=name][, ERR=label][,IOSTAT=i-var] [STATUS=stD Primjer: OPEN (UNIT=u, FILE='IME. DAT', STATUS=UNKNOWN, FORM='FORMATTED') OPEN (UNIT=10,FILE='undamp.dat') WRTTE( 10, *),UNDAMPED MOTION WRITE (I, MF)
Sintaksa za jedinicu (unit): INQUIRE ([UNIT= ]io-unit [,ERR=label] [,IOST AT=I-var],slist) . Sa naredbom LIST INQUIRE(IOLENGTH=len) out-item-list 100
Rezervisane eksterne jedinice
*
5 6
tastatura iii skrin (uvijek) tastatura skrin 101
FORTRAN programiranje za windowse
FORTRAN pr'Jgramski jezik
Primjer:
100
'APOSTROPHE' 'QUOTE' 'NONE' 'K~EP' iii 'SAV~' 'DELETE' 'PRINT' 'PRINTIDELETE' 'SUBMIT' 'Sl'BMITIDELETE'
DEUM
CHARACTER * 14 FIME IFILE=A WRITE (FIME, 100) IFILE FORMAT(,FM', 13.3,'.DAT') WRITE (*,*)FIME END
DISPOSE (i I i
Tipovj fajlova
ERR
U narednoj tabeli dat je pregled specifikatora za fajlove i njihove funkcije.
Ogranicavac za karakter konstante
VALUES
ACCESS I
ACTION (iIi MODE)
VALUES 'SEQUNTIAL' 'DIRECT 'APPEND' 'READ' 'WRITE' 'READWRITE'
ASSOCIATEV ARIABLE var BLANK
'NULL' 'ZERO'
BLOCKSIZE
N_expr
BUFFERCOUNT
N_expr
CARRUAGECON TROL
'FORTRAN' 'LIST' 'NONE' 'LITTLE- ENDIAN' 'BIG- ENDlJAN' 'CRAY' 'FDX' 'FGX' 'IBM' 'VAXD' 'VAXG 'NATIVE'
CONVERT
DEFAULTFILE C_expr 102
'KEEP'
zalvaranju
FUNKCIJA
Tabela')-. 16 SPECIFIKATOR
'NONE'
Dispozicioniranje faj!a pri
Kontrola greske prijenosa
Label
SPECIFIKA TOR
za windowse
"I
I
~.~z vrijednosti OSNOVNODEFAULT
FUNKCIJA
OSNOVNODEFAULT
FILE (iii NAJ\1E)
C_expr
Ime fajla
Fort.n
Access mod
'SEQUNT1AL'
FORM
'FORMATTED' 'UNFORlVIATTED' 'BINARY'
Tip formatiziranja
Zavisi oel setovanja za ACCESS
Fajl access
'READWRITE'
I
Slijedeci direkni access zapis Interpretacija kao prazno Fizicka velicina bloka Broj I/O buffer-a
'TRUE' 'FALSE'
IOFOCUS
I
Bez vrijednosti
IOSTA.T
I Var
TNULLT
MAXREX
Fajl sistemski: ORGANIZATION
elef~1Ult
Jedan
Kontrola za stampanje
I
P.4D
POSIT10N
Numericka format specifikacija
Prielruzeno imeDefault fajlu
I
'SEQUENTIAL' 'RELATIVE' 'YES' 'NO' 'ASIS' 'REW1ND' 'APPEND'
'TRUE'
Bez vrijednosti Nema granica
'YES'
Pozicioniranje fajla
'AS1S'
READONLY
'No value'
Zastita oel upisa
No default
RECL (iIi RECORDSIZE)
N _expr
Duzina zapisa
Zavisno oel RECORDTYPE, ORGANIZATION
'Tip zapisa
Zavisno od ORGANIZATION, CARRIAGECONTROL, ACCESS i FORM setovanja
RECORDTYPE
Raelni elirektorij
N _expr
Aktiviranje prozora u quick win aplikaciji I 1/0 status Ogranicenje za Direct access zapls Organizacija fajla Punjenje zapisom
'FIXED' 'VARIABLE' 'SEGMENTED' 'STREAM' 'STREAM- CR' 'STREAM - LF
103
FORTRAN programiranje
SHARE
DENYRW' DENYWR' DENYRD' DENYONE'
FORTRAN programskije;:ik
za windowse
Parlicipacija fajla
DENYONE'
Listing: i
SHARED
Bez vrijednosti
Dozvoljavanje , SHARED podjele fajla
STATUS (ili TYPE )
OLD' NEW' SCRATCH' REPL.t\CE UNKNOWN'
FajJ status kod otvaranja
C _expr
Naslov za malu window quickWin applikaciju
Bez vrijednosti
I VALUES
FUNKCIJA
OSNOVNODEFAULT
N _expr
Logicki broj
Bez vrijednosti;bilo koja iounit mora biti specificirana
Func
Opcija za koristenje programske opcije
Bez vrijednosti
I
I
I
TULE
SPECIFIKATOR
II UNIT
I
UNKOWN'
Program sekv_dat character (LEN=25) :: IME(1000) REAL, DIMENSION(1000):: PISMENI,USMENI,GR_RAD,TEST,SR_OCJ PRINT *,' KOLIKI JE BROJ STUDENATA?'
Kratice koristene u tabeli: C_expr - osnovni karakter izraz kao skalarna vrijednost Func - eksterna hmkciju Label - oznaka (broj) naredbe N_expr - skalarni numericki izraz Var - skalarna intidzer valjabla (osnovna - default) Nacin koristenja navedena dva tipa datoteka dati su na listinzima jednostavnih primjera, Medu!im, prije primjera neophodno je napomenuti u naucnim i tehnickim disciplinama prvenstveno da se koriste sekvencijalne datoteke, a za podatke kao sto su razlicite evidencije, bankovni racuni i sl. koriste se datoteke sa direktnim pristupom.
Primjer sekvencijalne datoteke: Napisati program za interaktivno ocitavanje podataka studentske evidencije polozenog ispita. Podaci su: prezime i ime studenta (IME), ocjena usmenog dijela (USMENI), pismenog dijela (PISMENI), ocjene ,. grafickih radova (GR_RAD) i ocjene testa (kolokvija - TEST). U konacnu ocjenu ulazi 40% ocjene usmenog dijela, 30% pismenog dijela i po 15% ocjena grafickih radova i 104
! Program za podatke ispita za studente I
I
IUSEROPEN
testa. Podaci 0 ocjenama bit 6e smjesteni na datoteku sa nazivom STUDENT, a konacne ocjene sa rednim brojem na datoteku KON_Oel.
! I
za windowse
RKi\D
* ,N
PRINT *,' NOV I PODACI(l) ILl OBRADA PODATAKA (2) 1 ILl 2?' READ *,IODGOVOR IF (IODGOVOR==l) THEN DO I=l,N PRINT *,' UNESI Il1E STUDENTA' READ *, IME ( I ) PRINT *,' OCJENE: USMENI,PISMENI, GRAF. RAD.,TEST' READ *,USMENI(I) ,PISMENI(I) ,GR_RAD(I) ,TEST(I) END DO
I
! SADA SE PODACI UPISUJU U SEKVENCIJALNU DATOTEKU
OPEN (UNIT=7, FILE=' STUDENT' , STATUS= 'NE'i'J' ) DO I=l,N v\TRI'TE(7,*) IME(I) ,USf.'lENI(I) ,PISMENI(I) ,GR_RAD(I) ,TEST(I) END DO CLOSE (7) ELSE OPEN (UNIT=7,FILE='STUDENT' ,STATUS='OLD') DO I=l,N READ (7,*) IME(I) ,USMENI(I) ,PISMENI(I) ,GR_RAD(I) ,TEST(I) END DO
DO I=l,N SR_OCJ(I) = O.4*USMENI(I)+O.3*PISMENI(I)+O.15*GR_RAD(I)+O.15*TEST(I) END DO RACUNANJE KONACNE OCJENE SR_OCJ U PRETHODNOJ PETLJI UPIS REDNOG BROJA I KONACNE OCJENE U DRUGU DATOTEKU OPEN (UNIT=4,FILE='KON_OCJ' ,STATUS='UNKNOWN') DO 1=1, N' 105
__________F_'O_R_T_R_A_N~programski jezik za windowse
FORTRAN programiraflje za windowse
10 PRINT *, 'NOVA DATOTE~~, NOVI UNOS ILl KOREKCIJA (1,2,3)' READ *, INPUT SELECT CASE (INPUT) CASE (1)
WRITE(4,*) I,NINT(SR_OCJ(I» END DO CLOSE (4) END IF
NREC=l PRINT*, 'UNESI DANASNJI DATUM (D/M/G):'
CLOSE (7) END
Datoteka STUDENT: AA
7.000000 7.000000 BB 6.000000 8.000000
CC
8.000000
7.000000
6.000000
6.000000
6.000000
8.000000
3.:;00000 DD 10.00000 7.000000 EE 9.000000 6.000000
7.000000
7.000000
9.000000
9.000000
Datoteka KON_OCl (redni broj i konacna oejena): 1 2 3
7 6
4
7 7
5
9
Primjer datoteke sa direktnifl) pristupom: Napisati program za pracenje podataka mjerenja 0 sastavu i svojstvima jamskog zraka. Podaei mjerenja unose se svaki dan, sa imenom liea koje unosi podatke. Podaei 0 jamskom zraku su: vlaznost (VLAZNOST), temperatura (TEMP), sadrzaj CH 4 (CONCNCH4) i sadrZaj CO 2 (CONCNC02).
Listing: PROGRfu~ DIREKTAN_FAJL CHARACTER DATE*8,IME*20 REAL:: TEMP,VLAZNOST,CONCNCH4,CONCNC02
OPEN (l,FILE='DATA.DAT' ,ACCESS='DIRECT' ,RECL=80)
106
READ *,DATE PRINT *,' UNESI SVOJE IME: ' READ *, IME PRINT *,' UNESI TEMPERATURU I VLAZNOST' READ *, TEMP, VLAZNOST PRINT *,' UNESI KONCENTRACIJU CH4 I C02' READ *, CONCNCH4, ('ONCNC02 WRITE(l,REC=l) NREC,TEMP,VLAZNOST,CONCNCH4,CONCNC02,DATE,IME CASE (2) PRINT *,' UNESI BROJ ZAPISA' REi',D *, NREC PRINT*, 'UNESI DANASNJI DATUM (D/M/G):' READ *,DATE PRINT *,' UNESI SVOJE IME:' READ *, IME PRINT *,' UNESI TEMPERATURU I VLAZNOST' READ *,TEMP,VLAZNOST PRINT *,' UNESI KONCENTRACIJU CH4 I C02' READ *, CONCNCH4,CONCNC02
READ(l,REC=l) N liJRITE (1, REC=N+ 1) N+1,TEMP,VLAZNOST,CONCNCH4,CONCNC02,DATE,IME WRITE (l,REC=l) N+1
CASE (3) PRINT *, 'UNESI BROJ ZAPISA ZA PONOVNO UNOSENJE' READ *,NREC READ (l,REC=NREC) N,TEMP,VLAZNOST,CONCNCH4,CONCNC02,DATE,IME PRINT *,N,DATE,IME,TEMP,VLAZNOST,CONCNCH4,CONCNC02
PRINT*, 'UNESI KOREKTNO DANASNJI DATUM (D/M/G):' 107
FORTRAN progmmirwzje za windowse
READ * ,DATE PRINT *,' UNESI KOREKTNO SVOJE IME:' READ *, IME PRINT *,' UNESI KOREKTNO TEMPERATURU I VLAZNOST' READ *,TEMP,VLAZNOST PRINT *,' UNESI KOREKTNO KONCENTRACIJU CH4 I C02' READ *, CONCNCH4,CONCNC02 irmITE ( 1 , REC=NREC J NREC,TEMP,VLAZNOST,CONCNCH4,CONCNC02,DATE,IME
FORTRAN programskijezik za windowse
----------------------~
Primjer 1_2 PROGRAH PRDfJERl 2 PARAHETER (PI=3.14) REAL D. T. GAHA . RU . RIT . IT, T,J PRINT .. PRINT". 'UHESITE PRECHIl{ d. DEBLJINU ZIDA '. I SPECIFICHU TEZINU gama READ *. D. T. GAl1A
10
I
RV=D/2.
RU=D/2.-T 1!=(4.*PI/3)*(RV**3-RU**3) liT=GAl:iA*V PRINT " PRINT ", 'TEZINA SUPLJE KUGLE JE' . liT PRINT " END
CASE DEFAULT PRINT *,' UNESI UKUPNI BROJ ZAPISA ZA PREGLED' READ * ,NREC DO I=l,NREC READ (l,REC=I) N,TEMP,VLAZNOST,CONCNCH4,CONCNC02,DATE,IME PRINT *,I,TEMP,VLAZNOST,CONCNCH4,CONCNC02,DATE,IME END DO
Rezultat izvrsenja programa za ulazne podatke (D=40, T=3 i GAMA=9) unijete sa tastature prilikom pokretanja programa datje na slijedecoj slici: . HESUE
END SELECT
lil
., :enECNIK d. J)EllLJINU ZlJ)1I
"i
PRINT *, 'HIA LI JQS ZAHTJEVA (DA=1/2=NEJ?' READ *,NOVO I? (NOVO=~l) GOTO 10 C~OSE
(" , -)
r
S:eECIEICNU IEZUUl ga.."
- ~ 7. - ' "
EZINA SUPLJa KUGLE JE ~
t!
116318: • 200!l00
=
'"'
~
_ ~
-
-
Primjer 1_3
10. PRIMJERI FORTRANSKIH PROGRAMA
~~~iR!\P~Igi~~lR~ RV V I) P1.RAlfETER (PI=3 14) PRINT ,. PRINT*. 'UHESITE PRECNI¥. d. DEBIJINU ZID1. t I SPECIFICHU TEZIllU gama'
I
10
10.1 PRIMJERI FORTRANSKIH PROGRAMA IZ I DIJELA
READ *,D,T,GAKA. RV=D/2 RU=D/2.-T
Prirnjer 1_1 PROGRAM PRIHJERl 1 REAL D. T. GAHA, RU-:-RV. V. \J PARA11ETER (PI = 3 .14) D=30. T=2. GAHA=90 RV=D/2. RU=D/2.-T V=4.*PI/3*«RV-RU)**3) \J=GAI1A*V ~ PRINT" "S PRIHT ", 'TEZINA SUPlJE KUGlE JE' • \J PRINT ,.
20
30
V=(4.*PI/3)*(RV**3-RU**3) \J=GAlfA"V PRINT ,. PRIllT ". ':rEZIlU SUPIJE KUGLE JE'. 1,) PRIllT ,. PRIllT *. 'Z1. HASTAVAK PROGR1.M1. UKUC1.JTE l' PRIllT " PRIIlY ". 'ZA ZAVRSETAK PROGR1.M1. UKUC1.JTE 2' READ *·~·A IF (A,EQ.l) goto 10 IF (A EQ.2) gata 30
PRIllT ". 'POGRES1.N UllOS' PRIllT ". ' PONOVITE' GOTO 20 PRINT ,. END
ENrl Za ulaz (podaci vee pisani u program D=30, T=2 i GAMA=90) izlaz je dat na slijedecoj slid: Hj8
Rezultat pokretanja ovog programa (mogllcnost unosenja i visestrukog izvrsavanja programa) datje na slijedecoj slici: 109
FORTRAN programiranje za windowse
FORTRAN programskijezik za windowse
Primjer 1_5 PROGRAH PRHf,JERl 5 REAL R.X.Y PRINT * PRINT *, 'Ul!ESITE VRIJEDNOSTI R, X I Y' READ "'.R,X Y PRINT"
Z=X*X+Y*Y
Z=SQRT(Z) PRINT *, 'Z=' ,Z IF (Z LT R) THEN PRINT*, 'TACKA JE U KRUGU POLUPRECNIKA R=' " R ~~6NiF "'. GaTO 10 IF (Z,GT R) THEN PRINT*. 'TACKA JE VAn KRUGA POLUPRECNIKA R"' F: PRIllT " END IF
1
10
,END
Rezultat izvrsenja prethodnog programa za unijete vrijednosti dat je na slijedecoj slici:
Primjer 1_4 PRO'~RMf PRIHJERl F~EAL X, Y
4 "
PRINT .. PRINT .. , . UNESITE VRIJEDHOSTI X I Y'
NI~IH.:rI!' llBIJEDfilOSrr RA!' I V' ~.
111
READ *,X,Y
, ,
-
IF (XEQ.Y)
then
- ""
'
,
,
-
,
"= Y:'2J:951t'l ' = ACKA dE U KRUGU ROLUPREGNIl(R R=
PRINT", 'X je jednako Y' PRINT ,.
,
10.000001i'
I
ELSE
PRINT *, 'X nlJe jednako Y' PRINT ,. END IF END
Primjer 1_6 PROCRMf PRHf,JERl 6 REAL II PRINT * PRINT
Za unijete vrijednosti X=45 i Y=44,9 rezultatje dat na slijedecoj slici: '-
"'-
.
MESIrE URIJEDHOS]I ~ I ~
5 44.'9;
"
!lije ,jednako M'ress any Rey to continue
')f,
n'
'UljESITE BRO,J
READ *,N PRINT * IF (ll LT 0) THEil PRINT'. 'UHESElli BROJ JE HEGA TIVAl!' PRINT '" ELSE IF (If EQ 0) THEN PRIllT*, 'UllESENI BROJ JE JEDHAK HULl' PRINT * ELSE ~~~Ni 'UHESEHI BROJ JE POZITIVAH'
I
:'
END IF END
Za unijeti broj 6 rezultat programa
"PRIMJERI_~": ,
NI'Sl1'1'l BJlO,'
JiIi
NESElU BllOa' ;m
..=" 110
""
,
,,' ,
PRIHT ..
-
~
~n9
'
, ll!~"
Ilfl)
key 1:" c:u•.--r,,"mw
III
FORTRAN programskijezik za windowse
FORTRAN prugramiranje za windowse
PRO'::;RAH PRIl{']ERl 7
REAL A,X,Y,Z
-
PRINT " PRINT ", 'UNESITE BRO.JEVE EAD
I Z'
*,X,Y,Z
PRINT ..
IC=NINT(C) T SELECT CASE (--'IC) '~AC;E
(. 1 "
A=Y*Z ' CASE (3) A=3/Z CASE (5) A=5*Y/'Z-
Atr':;:
END' SELECi' PRINT ", ' A= ' ,A PRINT " END·
Za unijete vrijednosti X=3, Y=7 i Z=32 rezultat izvrsenja programa dat je na slijedecoj slici: 'J.IESn;E BROUEUR ?' ~
~i2
-
~.~y
:t Z'
-
Zadatak J
~2~_~00000
":loess: an!,!:kif:l8
.tA
Kretanje motornog mehanizma continu~
Primjer 1_8 PROGRAt1 PRIHJER1_8
10·0
102 PRl1VIJERI IZ MEHANIKE
Za motorni mehanizam (koji cine klip, klipnjaca i koljenasto vratilo u SUS masini), za zadati radijus koljena, duzinu klipnjace, ekscentricitet klizaca, brzinu poiuge koljena, ovaj program izracunava sljedece: pomak, brzinu ubrzanje klizaca; ugao, brzinu i ubrzanje kiipnjace; max i min pomake, kao i max i min vrijednosti ugla ¢'
DO I=1.100,-{ LCU=I' 1 LCU2=I*I lJRITE (6.100) LCU, LCU2 END DO PRINT .. FORMAT (' Leu = , ,13, 3X, 'LCU2=' ,15) END
////-r--I
,,
L
.
I
Kao rezultat izvrsenja ovog programa dobija se 100 linija sa ispisom broja i njegovog kvadrata od 1 do 100, respektivno. Na slijedecoj slici se vide samo zadnja 23 reda posto ispis na ekran omogucava ispis 24 reda, Jednacine:
n:n
OJ=-
30
x 112
= Reose + Leosel> 113
FORTRAN programskijezik za windowse
FORTRAN programiranje Zit windowse
= (R + L)co{Sin- ( R ~ L )]
1
Xmax
X mill
= (L - R)CO{ Sin-
fu=x max -x· 111111 a
.
o=SlD
_I(E + Rsin
v= dx = dt
L
1 (
L~ R )]
8)
Listing pragrama: PROGRAM MOTMEHAl~IZAM DOUBLE PRECISION PI ".REAL N,R,L,E,FI,OMEGA,X,XMAX,XMIN,DX,V,A,FIMAX,FIMIN,DFI,THETA REAL FI1,FI2,DFIDTH OPEN (UNIT=l,FILE='ULMOTMEH' ,STATUS='UNKNO~m')
)0-- Sine.l
.. d 1> .. 2[~(d1> R • 1>=--=01 - - tan1>----dt l de L cos 1> 2
J
Gdje je: n - brzina koljenastog vratila u o/min, E - ekscentricitet, L - duzina klipnjaca, R - poluprecnik koIjenastog vratiIa, OJ - ugaona brzina koIjenastog vratila, 8 - ugao zakretanja koljenastog vratila, x - pomjeranje klizaca, xmax - max pomjeranje klizaca xmin - min pomjeranje klizaca fu - hod klizaca v - brzina klizaca a - ubrzanje klizaca
114
min ugaono pomjeranje iii zakret klipnjace
i3.cD - ukupni ugaoni zakret klipnjace
cos
i3. Rease (J;>=-=01--elt Lcos(J;> 2
.
Rol- Sin (8+
ugaono pomjeranje iIi zakret kIipnjace max ugaono pomjeranje iii zakret klipnjace
Unos podataka PRINT*, ' motornog mehaniz 1ma' PRINT*, ' vrijednosti ' PRINT * READ (1,*) READ (1,*) READ (1,*)
R L E
RE,zm
N
(1, *)
Program za racunanje nekih vrijednosti
Ucitavanje potrebnih
PI=3.14159265358979323846 Ispis komentara PRINT 1020, ' Za ','R=' ,R, 'L=' ,L, 'E=' ,E, 'N=' ,N PRINT * PRINT*, ' PRINT * PRINT 1030
REZULTATI SU'
C ProraCun trazenih vrijednosti DO 1=1,12 READ (1,*) THETA THETA=(PI/180.)*THETA OMEGA= (PI*N) /30. FI=ASIN( (E+R*SIN(THETA) )/L) XMAX=(R+L)*COS(ASIN(E/(R+L) )) XMIN=(L-R)*COS(ASIN(E/(L-R» ) DX=XMAX-XMIN V=R*OMEGA*(-SIN(THETA+FI)/COS(FI») 115
FORTRAN programski jezik:;:a windowse
FORTRAN programiranje Z{l windowse
----------------------~.
90.
X=R*COS(THETA)+L*COS(FI) A=(R*OMEGA**2)*(-COS(THETA+FI)/COS(FI)(R*(COS(THETA))**2)1 l(L*COS(FI)*COS(FI)*COS(FI) )) FIIvIAX=ASIN ( (E+R) IL) FIIvIIN=ASIN( (E-R)/L) DFI=FHlAX-FHUN FI1=OIvIEGA*(R*COS(THETA)/(L*COS(FI))) DFIDTH= (R*COS (THETA) )/(L*SQRT(l«ElL) + (R/L) *SIN(THETA)) **2)) FI2= (OMEGA*OMEGA) * «DFIDTH**2) *TAN(FI)(R*SIN(THETA) I (L*COS(FI) ))) IF <10E:C'2t~f'I2=0 FI=FI*180,/PI IF (ABS(FI)<10E~5) FI=O TTHETA=THETA*(180./PI)
135. 180. 225. 270. 330. 360.
Iazlazna datoteka:
Ispis rezultata PRINT 1010, TTHETA,X,FI,V,FI1,A,FI2 END DO 1010 FORMAT(2X,F4.0,3X,F5.2,lX,F6.2,lX,F7.1,lX,F6.1,lX,F10 .2,lX,F10.2) 1020 FOR}1AT(3X,A,4X,A,F4.0,2X,A,F4.0,2X,A,F4.0,2X,A,F6.0) 1030 FORlfL4T(2X,5HTHETA,4X,lHX,6X,2HFI,6X,lHV,5X,3HFl1,6X,1 HA,10X, 13HFI2,1) CLO SE.~(,-,1_)'---_ __ STOP END
Za motorni mehanizam za E=O sa n=4800 o/min i radijusom koljenastog vratila R=2 kao i duzinom klipnjace L=7 i za uglove rezultati prikazani na sljedecoj slici: Ulazna datoteka:
e = 0° -
0
360 dobijaju se
Zadatak 2
Slobodne oscilacije Ovaj program daje tacno rjesenje diferencijalne jednacine koja opisuje oscilator sa prigusenjem koji slobodno osciluje: In!: + Ct + kx = 0 . Ulazni podaci su masa Izlaz ce biti:
4800 O. 15. 30. 45. 60. 116
konstanta oprl1ge k i konstanta prigusenja c.
I. OJ za neprigusen sistem tj. kad je CCkrit
2 7
o
111,
Pocetni uslovi su pomak i brzina u trenutku t=O (xo i
xo )
Jednacine:
cknf
= 2 -Vfk,;; Km
O)~~k_( c J2 m'
2m
117
FORTRAN progmmimnje za windowse
x=
FORTRAN programskijezik za windowse
-------------~
Gdje je:
(ci: + kx) m
k
Neprigusene oscilacije
111
(c 2 -4km < 0) c
x(t)=Re- 2
J)1t
cos(wt-8)
x(t)=-ROJe - 2111'
c
C
--I
8)---Re
sin(cu/ -
2m
2111
cos(OJt -81
Napomena: Za prigusenje, OJ nema znacenja i u stvari je imaginarni broj.
Gdjeje:
Za
Rcos8 = xo
l'
R sinS =1- Xo +.--X . C o OJ 2m
C=Ckril, OJ=O.
Ovaj program zahtijeva unosenje uglova javlja greska.
J
Ll
radijanima, u suprotnom se
Listing programa:
Kriticno prigusenje: ( C. knf'
iIi c
2
* Deklaracija varijabli i otvaranje datoteka
= 4km) c
X
(t) -- "fA krit + Bkrirt-f)e
i(t) = [B kril
C
- -
2m
--I
2111 c
(A kril + Bkri/)
Je
***********************************************************
* * Unos podataka
* * Ispis naslova i ucitanih vrijednosti PRINT *
Prigusene oscilacije:
(c 2 -4km > 0)
'()-A t -
2m
PRINT * rnasa READ (1, *) M READ (1, *) C koeficijent pigusenja istezanje opruge u stanju READ (1, *) XST rnirovanja pocetno izduzenje READ (1, *) XO pocetna brzina READ (1, *) DIXO ***********************************************************
Gdje je:
B x(t)= A rer,r +B 1
X
--I
PROGP~M DIFERENCIJALNA JEDNACINA REAL X,DIX,OMEGA,R,DELTA,M,C,XO,DIXO,A,B,K,CKRIT REAL XST,G,Rl,R2,T,Kl DOUBLE PRECISION E OPEN (UNIT=L F"LLE ULDIFJED', STATUS=' UNKNO\\iN' ) OPEN (UNIT=2,FILE=' IZDIFJED' ,STATUS='UNKNO~m')
{)Ve
()V
1]1
+
()Ve
'21
{)V
r;2 erz!
WRITE WRITE PRINT PRINT PRINT
(*,100) M,C,XO,DIXO (2,102) M,C,XO,DIXO ..
*
REZULTATI SU'
* 119
118
FORTRAN programskijezik za willdowse
FORTRAN programiranje za windowse
PRINT 1020 Ij\7RITE (2,1020) ***********************************************************
* * Izracunavanje potrebnih vrijednosti G=9.80665 E=2.718281828459045235 K=(M*G)/XST CKRIT=2 k SQRT(K*M) DO T=O,l.l,O.l THEN OMEGA=SQRT( (KIM) - (CI (2*M)) **2) R= C/(2*M) R=R*XO+D1XO R=R**2 R=R/(OMEGA)**2+XO**2 R=SQRT(R) DELT}\=ACOS (XO IR) K1=- (CI (2*M)) X=R* (E'C (?"X1)) X=X*COS(OMEGA*T-DELTA) D1X=-OMEGA*X*SIN (OMEGA"TDELTA)+K1*X*COS(OMEGA*T-DELTA) ELSE IF (C==CKRIT) THEN A=XO B=D1XO+(C/(2*M) )~XO X=(A+B*T)*E**(-T*C/(2*M) ) D1X=(B-(C/(2*M) )*(A+B*T) )*E**(-T*CI (2*M)) ELSE R1=-(C/(2*M))+SQRT«C/(2*M))**2-(K/M) ) R2=-(C/(2*M))-SQRT«C/(2*M))**2-(K/M) ) B=(D1XO-R1*XO)/(R2-R1) A=XO-B
*20Hpocetnu poziciju XO=,F4.2,lX,20Hpocetnu brzinu DIXO=,F4.2,//, *10X,12HREZULTATI SU,/) 1010 FORJVLA.T(lX,F5.2,3X,F5.2,3X,F6.2) 1020 FORMAT (4X, 1H'I' , 7X, IHX, 7X, 3HD1X, /) ****************************************************** ***** ***********
* Zatvaranje datoteka i CLOSE (1) CLOSE (2) STOP END
zavrsetak programa
IF(
Primjer:
Masa od 20 gr objesena je 0 dpiralnu oprugu i isteze je za 10 em. Masa je povucena nanize za dodatnih 4 em, zadrZana neko vrijeme, a zatim pustena. Pronaci pomjeranja i brzinu masenog utega u ntervalima od 0,1 do 1 sek za c=0,05 Nsec/m. Uiazna datoteka: 0.02 0.05 0.10 0.04 0.00
lzlazna datoteka:
X=A*E~*(R1*T)+B*E**(R2*T)
D1X=A*R1*E**(R1*T)+B*R2*E**(R2*T) END IF PRINT 1010, T,X,D1X WRITE (2,1010) T,X,D1X END DO ***********************************************************
***********
* Forrnati 100 FORMAT (lX,10HZa masu M=,F4.2,lX,13Hprigusenje C=,F4.2,/,lX, *20Hpocetnu poziciju XO=,F4.2,lX,20Hpocetnu brzinu D1XO=,F4.2) 102 FORMAT (lX,10HZa masu M=,F4.2,lX,13Hprigusenje C=,F4.2,lX, 120
121
FORTRAN programski jezik za windowse
FORTRAN programiranje za windowse
-------------
10.3 MJESOVITI PRIMJERI:
Newtonova metoda Ovo je vjerovatno najjednostavnija numericka metoda koja se primjenjuje u rjesavanju jednacina, i vee je ranije spominjana. To je iterativna metoda, sto znaci da ona ponavlja korake radi poboljsanja procijenjenog rjesenja. Ako je Xk aproksimacija korijena jednacine, onda je slijedeea aproksimacija Xk+! data sa
gdjeje
f
DF(X) COMPLEX X,DF DF=2*X+l END FUNCTION DF
. df (x)=-. dx
END PROGRAM ComplexNewton
Stmkturni plan za primjenu Newtonove metode je: 1.
Ucitaj pocetnu vrijednost
2.
Sve dok je x k +!
stampaj Xk+! i 3. Stop
Xo
i zahtijevanu tacnost
Ova verzija programa moze se koristiti za nalazenje realnih nula s tim da moraju biti zadata realna pocetna rjesenja. e
If ct:k)1 ponavljaj korake do k=20, prema
_ -
N=l DO WHILE ABS (F(X»)>=IE-6 .AND. N<20) X=X-F(X)IDF(X) PRINT "(2FI0.4)",X N=N+l END DO CONT/\lNS FUNCTION F(X) COMPLEX X.F F=X**2+X+! El~D FUNCTION F
X
f
k
POCETHTJ VRIJEDHOST U OBLIKU (I<, B)'
f(x,) j (x k )
"ITit(:..:)"
--.,--
(X k + l )
Neophodno je ograniciti korak 2 jer proces mozda nije konvergentan.
Kompleksni korijeni
FUNCTIOn DF(X) COHPLEX X, DF DF"'2*X+l END FUNCTIon DF PROGRAM ComplexHewtonJ
Newtonova metoda se moze koristiti za pronalazenje kompleksnih korijena, ali samo ako je pretpostavljeno pocetno rjesenje kompleksno. Slijedeei program pronalazi kompleksna rjesenja jednacine X2 + x + 1 = 0 .
Rezultati izvrsenja programa za ulazne podatke (0,2) dati su na slijedeeoj slici: NESHE POCEfNll URI JEDNGSI U OBLll{u --
~0.Z1
lle<,,):
J",
PROGRAM ComplexNewton
-.29;11 -.'1S:E2; .'1'11)3
t.t?fiS .R2'''S
COMPLEX ::X READ *,X PRINT "(2AIO)", "Re(x)", "Im(x)" PRINT *
-:SOOi!
.8660 .1l6G0
Listing:
122
-.silua
~A~B?
.IllS53
.
123
FORTRAN prograrniranje za windowse
Listing:
Program TRIANG (Trougao)
PROGRl\jVj PTROUG ! RACUNANJE POVRSINE TROUGLA CIJI SU VRHOVI DATI SA KOORDINATAMA
PF:OGRAH TRIAHG LOGICAL FLAG ,I Zas tc:~nca PRINT *, 'UllESITE STRAlfICE ,", b Ie' READ *,iLB,C PRIlIT *, . DUZHiE STRAHICA
FLAG=(A+B) GT.C
AND.
TROUGH, SU' . ,A, B, C
(B+C) GT.ll
AND.
(C+A) .GT.B
IF (FLAG) THEN P=O.5*(A+B+C) POVRS·SQRT(P*(P-A)*(P-B)*(P-C» UGAOA=UGAO(B,C,A)
Ko:r1.sti:se ko"si11lJSn.:;t teoreJita
UGfi.OR=d]GAO(C, A, B)
P:reko F!JNCTI')H lJGAO
UGAOC·18 O-(UGAOA+UGAOB)
PRIHT ~~i~+,
:*,
FORTRAN programski jezik za windowse
----------------------~
REAL }\, ( 3 , 3 ) DO J=1,3 A(l,J)=l. SND DO DO J=1,3 PRIN'J'* 'UNESI KOORDINATE X I Y TACKE' ,J READ * (A(I,J) 1.1=2,3) END DO
'POVRSINk TROUI.:;LA JE'. POVRS 'UGI.OVI TROUGLA Sf' " lJGAOA, UGAOB, UGAOC
ELSE
PRINT *. 'HEISPRAVUI-POGRESNI PODACI ZA STRAHICE' PRIHT * EliD IF END
PT=DET(A)/2. PRIN'r *, 'POVRSINA TROUGLA JE PT=', PT
REAL FunCTIon UGAO(X, TL Z)
PARAHETER (PI=3.141592&5) TEMP= (X*X+Y*Y-Z-x-Z) /( 2*X*Y)
END
UGAO=(180/PI)*ACOS(TEHP) ElID
!
Rezultat izvrsavanja ovog programa za slucaj daje a=l 0, b=20 i c=] 3 dat je na slUedecoj slici:
rzracunavanje povrs1l1e trougla, koj i je dat sa koordinatama vrhova tacaka AI(xI,YI), A 2(X2,Y2) i A 3(x"Y3) moze se izvrsiti koristenjem izraza iz vektorske algebre: !
P=~l 2
X3
Y2 Yo.,
Za rjesavanje determinante koristit ce vee postojeci FUNCTION DET za Cramerov postupak. Kao test-primjer moze pos!uziti pravougli trougao duzine stranica 3, 4 i
5: A,(I,l), A 2 (4,1), A3(1,5):
124
FUNCTION DET(A) REAr., A(3,3) DET=A(1,1)*(A(2,2)*A(3,3)-A(2,3)*A(3,2))-& A (1, 2) * (A (2,1) * }\, (3,3) -A (2,3) * A (3,1) ) +& A (1,3) * (A (2,1) xA (3,2) -A (2,2) *A (3,1) ) RETURN END
Primjer listinga programa za fJesavanje kvadratne jednacine sa mogucnosti nalazenja realnih korijena i kompleksnih korijena, Listing:
Xl X2
FUNCTION - KORISTENO CRAMEROVO PRAVILO
PROGRAM KVADR_JEDNACINA PRINT *,' UNESI KOEFICIJENTE JEDNACINE: a,b,e' READ *, a, b , e PRINT * 'KOEFICIJENTI JEDNACINE SU: a=' ,a, 'b=' ,b, 'e=' ,e
CALL QUAD (a,b,e,R1,R2,*10,*20,*30) 10 CONTINUE PRINT *,' JEDNACINA NIJE KVADRATNA' STOP CONTINUE 20 125
FORTRAN programiranje za windowse
PRINT *,' KORIJENI SU KOJVIPLEKSNI: REAL X + / - 1* IJVIAG . = ' PRINT *, ' , ,R1,' + / - i * ',R2 STOP 30 CONTINUE PRINT *, 'KORIJENI SU: X1=', R1, 'X2=' ,R2
END
SUBROUTINE QUAD(A,B,C,R1,R2,*,*,*) IF(A==O.O) THEN R1=0. R2=0. RETURN 1 ELSE AKO NIJE A=O. TADA JE DISKRIMINANTA: PART1=-B/ (2"11.) ;JISK=B**2-4*A*C PART2= SQRT(ABS(DISK) )/(2*A) IF (DISK
Pl JiJlJi .. l.l.'.'.·.' .l!.•."
II II
I, \...../
R1=PART1 R2=PART2 RETURN 2 ELSE
PART2=SIGN(PART2,PART1) R1=PART1+PART2 IF (R1 /=0) THEN R2=C/ (A*R1) ELSE R2=PART1-PART2 END IF RETURN 3 END IF END IF END
126
!.
I
II ~
1. UVOD Kad tehnicar zal11isli neki objekt, on ga ne oplsuje rljeCllna, vec ga prikazuje crteZillla. Tehnieari se P0l110CLl tih crteza l110gu lako sporazullljeti i onda bda jedan ne razlll11ije jezik drugoga. Nauka, koja je dala tehniearil11a sredstvo za meollsobno sporazumjevanje, zove se nacrtna geometrija. Ona je iznikla u tehnickom svijetu i dugo je sluiila tehnickim potrebama, a da nije bila ni zapazena. Tek je pri kraju 18. vijeka Gaspard Monge /Gaspar MonZi uspio izlueiti eiste geometrijske elemente iz njihovih razllolikih aplikatornih podrueja i stopiti ih Ll novu nauku. U svojelll prvom udzbeniku nacrtne geollletrije iz 1789. godine Monge je postavio ove zadatke nacrtne geollletrije: ~"Prvo; ol7a treba dati me/ode po kojima se na crlacem papini, koji ima scimo clvije climcnzije, duiinu i ,iJirinu, mogu prikazati ,I've prostorne tvorevine, ko/e ima/[i' tri dimenzije, duiinu, ihrinu i visinu, a liZ pretpostavku da se Ie tvorevine l110gu tacno de/in irati.
Drugo, ona treba dati postupak, po ko/emu se iz tacnog crleia neke prostome tvorevine moie upoznati njezin oblik, Ie mogu izvesti svi zakoni, koji i:daze iz oblika i mec1usobnog poloiaja n/ezinih dUe/ova. " Ima vise metoda, po kojima se prostorni objekti mogu tacno prikazati crteZima, a od tih metoda bice obraaene samo neke, koje se Ll tehnici cesto primjenJuJu. Pojavom racul1ara stvorila se i nova disciplina: raeunarska grafika. U racunarskoj graj~ci postoj i problem predstavljanja objekta koj i analiziramo sa aspekta projekta u cjelini, detaija projekta pod raznim dejst-viflrnq;ct±-'----~ (temperatura, pritisak, dinamicke sile itd.). Rezultati proraeuna nislI samo jednocifreni brojevi i velicine LI Ijesavanju, nego postoje c!vije iii vise proraeunatih vrijec!nosti. Razmatranje (analiza) nj ihovih vrijednosti na bazi numerickih podataka prec!stavlj a c!osta mukotrpan i tezak zac!atak za inzenjere i istrazivaee. Kod nas su do 1990. godine analize i preglec! podataka na osnovu proraeuna, vrseni prvenstveno manuelanim crtanjem, a samo pojedini racunski centri imali su graficku podrsku u obradi i analizi podataka. Pored FORTRAN kompajlera bila je neophodna i obuka za oc!govarajuce softvere za izabrani pioter, a zahtjevi koji su se lllogii nametati u obrac!i bili su ograniceni i ranjivi faktorima: memorija (periferna i centralna), hardver i softver. Izrada takvih analiza bila je povezana i sa materijalnilll faktorom, odnosno cijenom vrelllena CPU-a i potrosnog lllaterijala. Demas, odnosno pojavom PC-a, mnogo toga je jednostavnije. Pred korisnikom stoji cijeli niz grafiekih programa (prograllli za grafieku obradu podataka tipa ACAD i sl.), iii je graficka podrska data u obliku pre i post procesom. Na cijenu CPU-a ne obraca se paznja (odnosi se na visekorisnicke
__________________R_a~c~ll~n~a~r.\:.:.k:.::a__'grajlka sa FO RTRA N-om
FORTRAN programiranje za windowse
racunare), a cijena hardverskih dijelova i perifernih urectaja je za grafiku, bez obzira na format i kvantitet, prihvatljiva ne samo institucijama nego i pojedincima. Ali moramo reci da su osnovni elementi u grafici jos uvUek ostali nepromijenjeni.
2. OSNOVNI ELEMENT! RACDNARSKE GRAFIKE
2.! RA V ANSKE TRANSFORMACIJE Predstavljanje tJcke Svaka tacka je definisana svojim koorclinatama x i y. Ako je tacka u ravni, oncla je ona jeclnoznacno odreoena koordinatama x i y, koje su, u stvari, projekcije vektora polozaja tacke. Kratko napisano: za tacku u ravni A(x,y) i za tacku u prostoru A(x,y,z). y",y
A=AT
gdje je :
A matriea transformisanih koordinata A matrica koordinata tacaka T matrica transformacije U praksi je najcesci slucaj da su matrice A i T poznate i da se trazi matrica transformisanih koordinata A. Jasno je da matrica transformisanih koordinata A u ravni mora da bude istih climenzij;1 kao matrica koordinata A. Da bi se matriea koordinata mogla mnoziti sa lllatricolll transfonnacije mora biti dilllenzija 2 x 2. Ako lllatrie~l transformacije prikazemo U opstem obliku sa:
onda se ll1atriea transformisanih koordinata A dobija:
II
ravni
IZ
prethodne jednacine
y=y ,,~------------~~
y
y
A
a
z
x
odakle slijedi
~a
su transformisane koordinate
X=X
S13.1 U ll1atricnom obliku, koordinate tacaka se mogu pisati u obliku vektora reda: [x y] za tacku u ravliii [x y z] za tacku u prostoru, iIi u obliku vektora kolone [x,yf za tackll u ni~j;i iii [x,y,zf za tackll u prostoru.
Za razlicite vrijeclnosti elemenata matrice transformacije imamo i razlicite transformacije tacaka. Sve sto je navecleno za transformaciju u ravni vazi i za transformaciju tacaka u prostoru, ali je u tom slucaju matrica transformacije T dimenzija 3 x 3.
Transformacija koordinata tacaka Svaka tack a moze cla se transforll1ise u ravni, oclnosno u prostoru, Il1nozenjell1 matrice koordinata tacaka sa odgovarajucom matricoll1 transforll1acije koju cell10 kratko obiljeziti sa T.
130
Linije Dvije tacke definisu pravu. Posto je tacka jednoznacno definisana svojim vektorom polozaja, to znaci da je prava definisana parom vektora polozaja (pod uslovom da su ta dva vektora razlicita barem po modulu, iii praveu iIi sp1jeru, tj. da se tacke ne poklapaj u). 131
FORTRAN progral7liranje za windowse
Racunarska grafika sa FORTRAN-om
Ako su date dvije tacke u ravni, tacka A sa svojil11 koordinatal11a XI,Y I tacka B sa koordinatal11a X 2,Y 2 onda matrica koordinata il11a oblik:
Za elemente matrice transformacije Til = T 22 = i TI2 = T21 = 0, matrica transformacije je jedinicna matrica i dobija se x I = X I itd., tj. osnovna linija se poklapa sa transformisanom.
Rotacija lz osnovne jednacine slijedi da se matrice transformisanih koordinata dobijaju kad se matrice koordinata pomnoze sa matricom transformacije T, dimenzija 2 x 2.
Posmatrajmo jedan pravougaonik u ravni definisan tackama A, B, C i D svojim odgovaraju6im koordinatama (slika 3.3). Kao sto se iz slike vidi, koorclinate tacaka A, B, C i D su se transformisale u tacke A, 13, C i 15 rotiranjem pravougaonika oko tacke A za ugao a. Dakle, trebalo bi da se odrede elementi matrice transformacije, i to takvi elementi da claju rotaciju pravougaonika za ugao a.
Tacka A sa koordinatama XI.Y\, transformisala se u tacku koordinatama XI i )II pri cemuje:
A
sa
XI = TIIX I +T2I YI 311 =Tlix i +T 22 YI
y = r\sin(a + (3)
T B
-Slikn 3.3
Slika 3.4
x = x . cos a - y . sin a 31 = x . sin a + y . cos a
Jeclnacina u matricnom obliku moze se napisati:
-A
=
[x 31J= [x
J[ cosa .
Y
- sm a
a]
sin cosa
Gclje je matrica Slika 3.2 Za razlicite vrijednosti elel11enata matrice transformasije dobijaju se i razliCite transformacije linije (slika 3.2). Elementi matrice mogu biti tako izabrani da se dobije transformisana linija koja je paralelna osnovnoj liniji, da se osnovna i transfonnisana Iinija sijeku i sl. 132
cosa [ -sina
sinal cosa
matrica transformacije.
133
FORTRAN programiranje za windowse
Racunarska grajika sa FORTRAN-om
Homogene koordinate Da bi se mogle uvesti konstante translaeije, konstante matriee moraju se povecati na dimenzije matriee koordinata na 3 x I za tacku u ravni, pa ce matriee A i A imati oblik:
A=
[x
Y 1];
[x y
[x
TI2 TI3 TI4 T22 T 13 T24 , , y z 1]. T21 = [x' y z v'] = [x y T31 T32 T3} T34 ~T41 T42 T43 T44
iT"
Z
1]
1] Matriee transformaeije za likove u ravni
Najmanji format matriee transformaeije T koji bi se mogao pomnoziti sa matrieom Aje 3 x 2 i ima oblik:
Ovakav pravougaoni oblik matriee transformaeije nije pogodan jer matriea nije kvadratna i ne moze se dobiti inverzija matriee T, Zato se matriea transformaeije prosiruje na format 3 x 3.
Posmatrajmo matrieu transformaeije za likove u ravni T
Treba uociti grupe elemenata matriee transformaeije koje su razdvojene isprekidanom linijom. Prema ranijem izlaganju, sa clanovima Til, T 12 , T21 i T22 se moze dobiti rotacija deformacije lika, uvecanje, odnosno smanjenje lika u X iIi Y pravcu. Clanovima T31 i Tn dobijaju se translacije u Xi Y pravcu. Clan TJ3 daje generalno uvecanje odnosno smanjenje lika L1 ravni. Da bismo objasnili znacenje elemenata TI3 i T 23 treba posmatrati transformaciju tacaka koje se dobijaju slijedecom transformacijom:
Mnozenjem matriee An i Tn dobije se rnalrica lIclllsfotmacionih koordinata A formata 3 xl, koja ima ob!ik za tacku u ravni.
o [x y
[x
[T"
Til TI3
y I]. Tl1 T22 T 13
=
[x'
y'
v'J= [:: ~:
T31 T32 To} Na ovakav Je nacin trodimenzionalnim vektorom predstavljen dvodimenzionalni vektor polozaja. Analogno ovome, cetverodimenzionalnim vektorom predstavljamo trodimenzionalni vektor polozaja.
134
y
v = TI3 . X + T 23 . Y + 1
lednacina predstavlja jednacinu ravni u prostoru gdje Je V treca koordinata (slika 3.5).
135
Racunarska grajika sa FORTRAN-O/11
FORTRAN programiranje za windowse
y
j---3>-X
>X x
Slika 3.5 Slika 3.6 Translacija u ravni Rotacija Elementi matrice transformacije, koji definisu translaciju, su T31 i T32 pa matrica transformacije ima oblik:
Koriste6i ranije jednacine dobija se matrica transformacije za rotaciju raVl1l.
T=[~
o
cos ex
T = -sinex
rL
Til
Ako matriClI koordinata transformacije, dobicemo:
pomnozimo
sa
ovakvom
cos ex
o
0
matricom
x= X +T31 Y=
sin ex
y +T32
~l
Da bi se neki lik u ravni rotimo za ugao ex, potrebno je taj lik prethodno trans I irati Ll koorc1inatni pocetak. Potom ga na tom mjestu rotirati i napokon ponovo translirati u njegov orginalan polozaj (slika 3.7). U matricnom obliku to se moze prikazati sa: y
Kombinacijom ranijih jednacina i slike 3.6 se vidi da element Tol daje transformaciju u X-pravcu, a Tn transformaciju u Y-pravcu.
(;;;;;
\ \
\
\
\
\
\
\
\
\
).
\ \ ;;
\
\ \
x
\
\
Slika 3.7 136
137
FORTRAN programiranje
ZCl
windowse
Raczmarska grafika sa FORTRAN-om.
----------------------~
Uvecallje - smanjenje Matrica transformacije koja claje lIvecanje, odnosno smanjenje, Ilna oblik: ITII
a
T=l~
T22
a a
a
T33
I
Ako je element rnatrice transforrnacije T33 A
=
I, matrica T irna slijedeei
oblik:
a
(X
X
a
Slika 3.8
A = A TT; ·TR ·Tn IIi u razvijenom obliku:
[x
y
a
I{ ~
1
-Tli
oro,"
~ -S~l a
sin a -cosa
0
-Tn
T ~J T~I
a T32
~I ~ ~
y
I]
T=
Kada se matrIce TTl, T R, i T T2 pomnoze dobija se konacna matrica transformacije.
T=
[
cosa
sin a
-sin a
cosa
- To2 (cos a -1)+ T32 sin a
-T3J sina- T32 (cosa-I)
Preilla polozaju koji zallzimaju u matrici transforlllacije, eleillenti Til Tn claju uveeanje oclnosno smanjenje u X j Y pravclI. Element T]3, kao sto je vee receno, daje generaillo uve6anje, oclnosno srnanjenje. Posrnatrajlllo lllatricu transformacije koja claje gelleralno L1veeanje, odnosno srnanjenje:
I:
a
La a
a a T13
Ako lllatricLl koorclinata tacaka pOlllnozimo sa ovakvom matricom transfofmacije, clobieemo:
:1]
Iz slike 3.8 se vidi sta bi se desilo sa Iikom da nije transliran u koordinatni pocetak prije nego sto je rotiran za ugao a. Jz jednacine je lako uociti da se smanjenje lika dobija ako je T33 > I, odnosno uveeanje ako je T33< I.
138
139
Racunarska grafika sa FORTRAN-om
FORTRAN programiranje w windowse
2.2 PROSTORNE TRANSFORMACIJE
y
y
TJ~
lo
r
0
0.5 0
°l ~J :>
Analogno homogenim koordinatama u ravni imamo da se za prostorne homogene koordinate tacaka cetvorodimenzionalnim vektorom predstavlja trodimenzionalni vektor polozaja:
2
A =
0.5
[x
Y
z
I]
X
X
Slika 3.9
Odgovarajuca matrica transformacije mora da. bude dimenzija 4 x 4 ima oblik:
Deformaeija lib u ravni Pod pojmom deformaeije lib ovdje podrazumijevamo deformaeiju koja deformise lik tako da sve strane koje su bile paralelne u orginalnom obliku ostaju paralelne i prilikom deformaeije (slika 3.10). Matriea transformaeije za deformaeiju lika u ravni ima oblik:
1
o Uglovi tgcxx i tgcxy su nagibi za Xi Y pravae. y
Kao sto je uradeno kod transformaeije u ravni, tako i ovdje treba uociti gmpe elemenata trodimenzionalne matriee transformaeije koji su izdvojeni isprekidanom linijom. Sa elementima Til, T 12 , T 13 , T 21 , T 22 , T 23 , T.1I, T.12, T.13 mogu se dobiti rotacije oko X-ose, Y-ose, Z-ose, iii oko bilo koje ose koja prolazi kroz koordinatni pocetak, uvecanje, odnosno smanjenje, i to u X, Y i Z praveu i deformacija lika. Elementima T 41 , T 42 , T43 se definise translaeija tijela u-prostoru , a =r:~4 daj e generalno Llvecanje, odnosno smanjenje tijela u svim praveima. EJementi T 14 , T24, T34 daju perspektivnu transformaeiju.
Trodimenzionalna translaeija Matriea transformaeije za trodimenzionalnu translaeiju ima oblik:
pri cemu je Til translacija u X praveu, TI2 translaeija u Y praveu i TJ3 translaeija u Z pravcu (slika 3.11).
140
141
Racunarska grafika sa FORTRAN-om
FORTRAN programiranje za windowse
x=
--------------------------~
reos~
X +T41
Y = y + T42 Z=
Ty =
Z+T43
I
0
-sin~
0
0 sin~
L 0
0
eos~
0
0
-----------------------------------
~j
y
Elementi matriee transformaeije su izvedeni za usvojene pozitivne srnjerove rotaeije prikazane na sliei 3.12. y
f3
A
x
x y
A"
z Slika 3.12
z Slika 3.11
Rotaeija Analogno matriei transformaeije, koja predstavlja rotaeiju u ravni X i Y, a moze se nazvati i rotaeija oko Z ose, dobice se prostorna matriea rotaeije oko Z ose.
l
sin y
0
co'YY eosy 0
- Sill
Tz= .
0
0
I
0
0
0
~l ~J
Lako je izvesti prostornu matrieu transformaeije za rotaeiju oko Xi Y-ose: 0
0
eosU
sin U
- sin U eos U 0
142
0
~1
Sada, kada je poznata transformaeiona matriea rotacije oko X, Y i Z ose, moze se zakljuciti da se tacka iIi neko tijelo sa dvije rotaeije moze dovesti u zeljeni polozaj u prostofu, npr. rotaeijom oko X i Y-ose, ne vodeci racuna 0 tome koja se rotaeija prvo izvodi. Meautim, matematicki to nije tako zato 15to I11nozenje matriea nije komutativno.
Ovo mozel11o pokazati ako jeclnostavno pOl11nozimo matriee T x x Ty i T y x T x i njihove proizvocle uporedimo. Uvecanje - smanjenje Matriea transformaeije
o
o
o
T~j
claje uvecanje, odnosno smanjenje u praveima X i Y -ose. Kocl transforrnaeije u ravni Til claje uvecanje (smanjenje) u pravcLl X-ose, a T22 uvecanje (smanjenje) 143
RaCzll1w:l'ka graflka sa FORTRAN-om
FORTRAN programiranje za winciowse
u pravcu Y -ose. Elelllenti Til i T 22 kod prostorne Illatrice transforlllacije llllaju isto znacenje, a analogno tome element Tl3 daje L1vecanje (smanjenje) u pravcu Z-ose.
Sada, nekom od elemenata na dijagonali (Til, vrijednost -1.
Tll
iIi T11) pridruzimo
a a a a = a a -I La a o 11
y Txy
f2
T=lo I() LO
0 0 01 0.5
0
0
0
0.5
0
()
()
I
I
J
:>
x
x
Mnozenjem matrice koordinata sa prostornom matricom transfonnacije dobija se:
z
[x y
Slika 3.13 T44 je element prostorne matrice transformacije koji daje general no uvecanjesmanjenje jednako u svim pravcima.
,I
0
0
1 0 a = [x' a 1 a La a a T44
A = [x Y z I] 0 a
A = [x y
To znaci da se transformacijom dobijaj LI sve transformisane koordinate po apsolutnoj vrijednosti, a proizvod je jednak originalnim koordinatama samo sto su transformisane Z koordinate dobile suprotni znak u odnosu na originalne Z koordinate. Ovakva transformacija prouzrokuje dobijanje tijela istog oblika kod koga su sve tacke jednako udaljene od ravni XV, ali sa suprotnim znakom Z koorclinate (slika 3.14). To je slika u ogledalu, tzv. refleksija.
0 y
z
, T44 ]
F ]:)-_ _ _ _ _~"'"
y
Z 1]
A
Ako je T44 > 1 dobit ce se smanjenje tijela, odnosno ako je TH < tijela u pravcu X, Y i Z-ose.
uvecanje
.. /,,/
A
Tijelo u ogledalu
//
'///
c
~//
,///
//:"/
F~__¥=~=/=/~'_/_"--~'-/7/~/------~-
Ako se matrica koordinata A pomnozi sa jedinicnom matricom dobit ce se matrica A:
z
~---=:/::>
E
x
D
Slika 3.14 Da je stavljeno da je Til = -I dobila bi se ret1eksija u odnosu na ravan YZ, a za Tiz = -I ret1eksiju U oclnosu na ravan XZ. 144
145
RaclInarska grajika sa FORTRAN-om
FORTRAN pror;ramiranje za windowse
Projekcija
1 0 Tyz =
0
0
1 0
0
0
1
0
0
0
°l
~I
11 I
0
0
0
-1
0
Tvz = " 0
0
1
lo
0
0
1
~I
1...1
Deformacija tijela AnaJogno deformaciji lib u ravni, pod pojmom deformacije tijela podrazumijevamo transformaciju koja deformise tijelo tako da sve ivice koje Sll bile paralelne u pocetnol1l obliku tijela ostaju paralelne i poslije transfonnacije (slika 3.15).
Projekcijc SLI veoma vazne za crtanje na raCllllaru. Naime, sve sto se crta na ekranu racunara, jli nekoj drugoj grafickoj jedinici, u stvari je dvodimcnzionalna predstava tijela (tacke) Ll prostoru. U praksi se koriste tri vrste projekcija: ortogonalna, kosa i perspektivna projekcija. Ortogonalna projekcija je, ujedno, i najjednostavnija projekcija koja se dobiva pomocu paralelnih zraka projekcije upravnih na ravan projiciranja. Kod ortogonalne projekcije su XY koordinate u prostoru (originalne koordinate) jednake Xi Y koordinamma u ravni projektovanja (slika 3.16). Lako cemo zakljuciti da se projekcija na XY ravan dobija kada matricu koordinata tacaka pomnozimo sa takvo!11 matricom transformacije koja ce dati matricu transformisanih koordinata u kojoj su koordinate X i Y jednake koordinatama X i Y, a Z koordinata ce biti jednaka O. Takva matrica transformacije ima oblik:
Matrica transformacije za defonnaciju tijela ima oblik: ,.
I
tgav T= I "
ltg~z
tga x
Ol
tga y
0
tga z
0
T"
ri !
lo
0
l
H 0
1j
o
gdje su: tgax, tgay , tgaz - nagib u odnosu na X,Y i Z osu koordinatnog sistema.
y",y
x=x f
,\ '" Eli --- - ------- --------~\ [~C~G D",H
C
..... , '
D
G
H
z
x Slika3.16
z
146
Slika 3.15
Ortogonalna projekcija moze da bude i na ravni YZ i XZ. U tom slucaju za ravan YZ, X koordinata jednaka je 0, a matrica transformacije:
147
FORTRAN programiranje za wil/dowse
Racunarska grafika sa FORTRAN-om
-----------------------
o1 0 0 0OJ 010
izometrija
001 perspektiva
paje
A za ravan XZ, Y koordinata jednaka je 0 i matrica transformacije:
T"J~lo ~0 ~0 ~1IJ
Slika 3.18
paje
Ako tijelo projektujemo na ravan pomocu zraka projekcije koji nisu upravni na ravan projektovanja, dobit cemo kosu projekciju (slika 3.17). U sustini, ovaj problem mozemo shvatiti tako da se tijelo u prostoru rotira oko Y ose za ugao ~, a oko X-ose za ugao a. Onda se trazi ortogonalna projekcija tijela na ravan projektovanja. Dakle, prvo se matrica koordinata tacaka pomnozi sa matricom transformacije za rotaciju oko Y:ose j DJstricQm transformacije za rotaciju oko X-ose, pa se onda trazi 0110gonalna projekcija.
o
o
cosa
sin a
-sina
cosa
o
o
~ Jl
U kosoj projekcij i je moguce uvesti proizvoljno skracenje Ll pravcLl X, Y i Z-ose. Ako nema skracenja, iIi ako su skracenja u pravcu osa X, Y i Z jednaka, elobija se izometrijska projekcija. Zajednaka skracenja Ll pravcu dvije ose dobija se kosa dimetrijska projekcija. a za razlicita skracenja u pravcu X, Y i Z-ose kosa trimetrijska projekcija. Ortogonalnom i k050m projekcijom se ne moze dobiti perspektivna deformacija (slika 3.18), te kada se zeli ovo postici, primjenjuje se perspektivna projekcija. Kod perspektivne se projekcije svi zraci projektuju iz jedne tacke, tacke oka (slika 3.17). Velicina X i Y koordinata ovisi 0 udaljenosti zaslona (ravni projektovanja) od tacke gledanja. Ovo uelaljenje oznaceno je sa ell' (slike 3.19 i 3.20).
Iz slike 3.19 se vidi da se velicina transformisanjem koordinate usljed perspektivl1e transformacije moze dobiti iz proporcija:
-x = -d---x d p; -y = ----Y dP
+z
I'
Slika 3.17
x
dp
-
+Z
y
x=----· y = - -
z ' 1+-dl'
148
1+~ dp
149
Racunarska grafika sa FORTRAN-om
FORTRAN programiranje za windowse
--------------------------~
y
z cavan projektovanja (ekran)
dp
Matrica perspektivne transformacije u sfernom koordinatnom sistemll
x Stika 3.19
ravan projektovnnja
x
Polozaj taeke u prostoru je definisan uglovima cp i '!f i odstojanjem taeke od koordinatnog pocetka p (slika 3.20). Kod perspektivne se transformacije koordinatni sistem XYZ transformise u "oeni" koorc!inatni sistem X, Y i Z. Ako je tatka M tacka oka, onda koordinatni sistem X, Y, Z mora imati koorc!inatni pocetak u tacki M, a OSLl Z poklopljenu sa pravcem p j Llsmjerenom prem;1 [dcki 0 (slika 3.20). Da bi se koordinatni sistem XYZ doveo u poIozaj X, Y, Z potrebno je da se izvrsi nekoliko transformacija. Posto se tacka M ne poklapa sa tackom 0, potrebno je, kao prvo, translatorno pomjeriti tacku M Ll koordinatni poeetak. Parametri translacije su: -Tx, -T y , -Tz:
Tx = p. sin '!f' cos cp Ty = P . sin '!f' sin cp
z
T z = P . cos '!f y
+---
ravan projektovanja
Nakon ove translacije koordinatni sistem se rotira oko Z-ose za ugao y=90-cp (51 ika 3.20), oko X-ose za ugao ~= 180-\jf (slika 3.20). S obzirom na to da je koorclinatni sistem XYZ lijeve orijentacije, potrebno je mnozenje sa matricom transfonnacije: -I
z ~~z__+-_______d~P~______+
Slika 3.20 Posto se i u ovom slueaju, kao kod ortogonalne projekcije, za ravan projektovanja usvaja XY ravan, onda matrica transformacije ima oblik:
150
o
o 1 o o o o Koordinatni sistem se vraca u polozaj taeke M translacijom sa parametrima translacije T x , T y , Tz (slika 3.20). Na ovaj naeinje transformisan koordinatni sistem XYZ u XYZ sa koordinatnim poeetkom u taeki M. I konaeno, da bismo imali perspektivni prikaz tijeJa potrebno je jos primijeniti perspektivnu transformaciju. Za perspektivnu transformaciju preko sfernog koordinatnog sistema potrebno je pomnoziti matrice transformacije. Kada se ove matrice pomnoze clobit ce se konaena matrica transformacije za perspektivnu transformaciju u sfernom koorclinatnom sistemu.
lSI
FORTRAN programiranje za windowse
Racunarska r;rafika sa FORTRAN-om
3. GRAFIKA SA FORTRAN-om (VISUAL FORTRAN) Tabela ') ') Naredbe u co-rafickom modu -
Svaki Fortran kompaj ler ima svoju specificnu biblioteku grafickih programa i funkcija. Microsoft FORTRAN 4, DIGITAL FORTRAN-VISUAL FORTRAN 6 imaju dosta zajednickih naredbi. U ovom dijelu bice dat pregled osnovnih grafickih rutina za VISUAL FORTRAN.
IME - NAREDBA
.,,<...,
Opis naredbe fokusiranje speci fici ranog prozora (windows) vracanje odrec1enog broja u aktivni mod konvetiuje jedinicni broj unutar Windowsa za funkcije daje karakteristike windowsa
I Tabela 3.1 ()
Column
o
ib:3 Bits b7 b6
3
0
o ()
+-____
~~__~B.~5__
.1
()
o
o
o
1 ~O+-____~____~04-__~+-
4
o
IGETHWNDQQ GETWINDOWCONFTNG
0
0 ~O~____~____~(~)+-_. ____ ~
__
104 b3 b2 b 1
o ()
NUL
0
DLE
o I
0 0
0
1 SOH
DC1 XON
1
o
0
1
0
STX
o
0
1
1
ETX
o
4
DCZ
I
1
0
o
0
1
I
EOT
II
ENQ
()
I
1 0
ACK
~
0
1
1
0 0
100
101
tIEL
DC4
12
I
I;~
NAK
1
0
BS
0
I
1
0
I
0
1
0
1
HT
9
LF
9 [2 10
VF
11
FF
B 14 12
CR
13
I
14
0
SO
15
1 1 1
I
SI
F
152
49
100 64 40 101
@
A
65
31
4
5
II
B !
C
~3
4_~
104 68 44 105 69 I 45 106 70 46 107 71 47
D
E
.,5
166 . 54 36 67 55
F
EM
25 19
'1C)
52
72
112
SUB
.12 26
42 2A
58 3A
4A
53
73 59 .1S 74 60 .10 75 61 3D
CAN
24
18 31
1;\
ESC
F5
33 27 1B 34 28 IC
35 GS
US
56 45
ID
2D
30
56 46
[E
?E
3i
57 47 2F
IF
70
9
<
71 57 39
74
K
L
62 3E
N
77
63 3F
113 75 48 114 76 4C 115
M
122
142
82 51 12J
98 62 143 99 63
124
144
T
U
V
W
84 54
141
97 61
d
'1
163 i !5 73 164 116 74 165 117 75
126 86 56
146
102
66
lfi6 118 76
1,27
t47
[67
103 67 ISO
119
65
87 1 57
58 131 89 59 1.12
68 151 105 69 152 106
90 SA 133 91
6A k
153 107
5B
6B
134 92
154 108 6C 155 109 6D 156
SC 135
77
93 50 136
78 4E
94 5E 137 95 SF
79 1 -I-r:
72
64 101
110
6E o
157 111 6F
u
INQFOCUSQQ SETACTIVEQQ SETWINDOWCON'FfNC
113
71 162 114
100
104
Z
q
145
130'
Y
160 112 70 161
P
125 85 55
4D 116
117
0
140 96 60
7,")
48 111 73 49
76
>
R
110
H
3~
43
?8 54 44 2C
29 36
RS
+
G
37
56
Q
120 80 50 121 81 51
67
64 52 34 65
~3
P
41
102 66 42 103
39 27 50 40 28 51 41
E
15
, 60 48 30 61
62 2 50 32 I 6.' '51
47
17 30
16 1 I
45 37 25 46
o
16
I
D 14
%
~ I ETD ~; 8 , X 11
43 35 23 44 36 24
~ ISYN ;~ 1 &
15 I
22
#
15
:')
C
13
,.
20
5
13 1
i7
11 22 18 12
14
A
I
20 41 33 21 42 34
24
10 0
1
1l
20 21
4
6 I
10
.)2
DC3 1') XOFF 13
1
i
40
1'6 51'
23
o
7
20
77 17°1 120
n
171 121 79 172 [22
SETWSIZEQQ ABOUTBOXQQ APPENDMENUQQ CLiCKMENUQQ DELETEMENUQQ GETEXITQQ INCHARQQ ilNITIALSETTTNGS INSERTMENUQQ I MESSACEBOXQQ T\;IODIFYMENUFLAGSQQ MODIFYMENUROUTINEQQ MODIFYMENUSTRINGQQ REGlSTERMOUSEEVENT
7A 173 123 7B
SETEXITQQ
174 124
SETMESSAGEQQ
7C t75
125
SETWINDOWMEl'JUQQ
7D t76 126
7E 177 DEL 127 7F
daje velicinu i poziciju windowsa (prozora)
GETWSIZEQQ
UNREGISTERMOUSEEVENT W AITONMOUSEEVENT
! definise koji window ima fokus
i
aklivira windows setuje karakteristike windowsa (prozora) setuje velicinu i poziciju windowsa (prozora) dodavanje boksa za teks! ..fJfidruzivanje meniu simuliranje efekata u meniu brisanje menia selovanje za QuickWin aplikaciju citanje karaktera sa tastature i vracanje Ll ASCII vrijednost kontrola pocetnog setovanja menia i okvira (windows) prozora insert za meni prikazivanje boksa slanje menia modifikovanje menia "callback" rutine modifikovanje menia za tekst registrovanje za primjenu rutina mouse (mUia) setovanje QuickWin apIikacije za izlaz izmjena QuickWin ukljucujuci status bar, status i dialog boks setovanje menia na kojem se listaju odgovarajuca imena i njihovo pridruzivanje vracanje rutine definisane sa REGISTERMOUSEEVENT blokovi za vracanje misa (mouse) u pocetnu jJoziciju
IS3
Racunarska grajika sa FORTRAN-om
FORTRAN programimnje z.a windowse
IN'fEGERTORGB RGBTOINTEGER FLOODFILL FLOOIJFILL W ~LOODFILLRGB
FLOODFILLRGB - IV OETBKCOLOR GETBKCOLORROB GETCOLOR I
(~ETCULORRUB
CETPIXEL GETPIXEL W GETPrXELRGB GETPTXELRGB 'vV GETPIXELS OETPIXELSRGB GETTEXTCOLOR GETTEXTCOLORRGB REMAPALLP ALETTERO B SETBKCOLOR SETBKCOLORRGB SbTCOLOR SFoTCOLORRGB SETPIXEL SETPLXEL \;V SETPIXELRe;B SETPfXELRGB W SETPIXELS SETPIXELSRCB SETTEXTCOLOR SETTEXTCOLORRCB GETFILLMASK GETUNESTYLE GETWRlTEMODE SETCLIPRGN SETFILLMASK SETWRITEMODE GETPHYSCOORD CETVIEWCORD GETVIEWCOORD - W
154
I
konvertuje RGB boje u komponente red, green, blue (crveno, zeleno, pI avo) konvertuje integer definisan sa red, crreen i blue boje ispuna povrsine iIi maske ispuna prozora ispuna sa RGB povrsine ispuna sa RGB povrsine za prozor (windows) vracanje erne boje za tekst I grafiku vracanje RGB boje za tekst i grafiku __ vracanje indeksa boje vracanje indeksa RGB boje uzimanje piksela uzimanje piksela za prozor uzimanje RGB piksela uzimanje RGB piksela za prozor visestruko uzimanje piksela visestruko uzimanje RGB piksela davanje boje za tekst davanje boje za lekst RGB davanje palete RGB setovanje crne boje za tekst i grafiku setovanje ROB boje za tekst i grafiku setovanje boje setovanje ROB boje setovanje piksela setovanje piksela za prozor setovanje ROB piksela setovanje RGB piksela za prozor visestruko setovanje piksela visestruko setovanje RGB piksela setovanje boje teksta setovanje boje teksta - RGB grafika definisanje podrucja ispune (fill) definisanje stila Iinije definisanje moda za ispis definisanje maske na prozoru setovanje podrucja ispune setovanje nacina ispisa prelazak na "fIzicke" koordinate setovanje pregleda za "fizicke" koordinate setovanje pregleda prozora "windowsa" za "fizicke" koordinate
(jETW INDU\VCORD ~:ET\j[r~VY'PORT SE~l'VIEVvY(JP_C
:;E'1'WINDOV/ ;\RC ,3" He C _\'I\l CLEARSCRFEN [eLUPSE
I ELLIPSE- W I
C ETCU RRENTPOS rn 0 N GETCURRENTPOSITJON - W CRSTATUS UNETO LINETO - W MOVETO MOVETO -- W PIE PIE - W POLYGON POLYGON - W RECTANGLE RECTANGLE \(\T DlSPLA YCURSOR CETTEXTPOSITION GETTbXl'''NTNDOW OUTTEXT SETTEXTPOSITTON SETTEXTWINDOW SETFONT SETGTEXTROTATION GETIMAGE GETIMAGE W IMAGESIZE IMAGESIZE- W PUTIMAGE PUTIMAGE- W
setovanje prozora ltwindowsa" za "fizicke" koordinate setovanje izlaza sctovanje organizaeije izlaza (windows-a) setovanje prozonl - window definisanjekruznog Iuka definisanje kruznog luka u prozoru brisanie zasiona - skrina detinisanje elipse iii kruznog luka definisanje elipse iii kruznog luka u prozoru definisanje trenutne pozicije kursora ucfinisanje lrenutne pozicije kursora za prozor definisanje statusa definisanje linije definisanje Iinije u prozoru povlacenje linije povlacenje linUe u windows kooruinatama definisanje kruga definisanje kruga u prozoru clefinisanje poligona definisanje poligona u prozoru definisanje pravougaonika definisanje pravougaonika u prozoru prikazi poIozaj kursora sctovanje pozicije teksta setovanje pozicije teksta u prozoru prikaz leksta na skrinu setovanjc pozicije starta teksta sctovanje pozicije starta teksta u prozoru definisanje fonta za tekst definisanje ugla ispisa leksta ocitavanje slike (image) ocitavanje slike (image) u prozor definisanje velicine slike (image) detlnisanje velicine slike (image) u bajtovima vracanje view-port koordinata slike (image) u bajtovima na displej - skrin vracanje view-port koordinata slike (image) u bajtovima na displej - skrin u definisani prozor
155
RacZlnarska grafika sa FORTRAN-om
FORTRAN programiranje za windU\lse
ocitavanje slike sa diska u memorUu iIi na skrin ocitavanje slike sa diska u memoriju ili na skrin u prozoru cuvanje slike na periferni dio rac. (windows bilmapa - .BMP) cuvanje slike sa prozora skrina na periferni dio rac. (windows bitmapa.BMF)
LOADTMAGE LOADIMAC,E- W SAVEIMAGE SAVElMAGE- W
New ~.~ FUes
Protects
I' Wort~PdCel,
~.
.
f
Other DocuUlen!s
!
.
DEI
LOGICAL modestatus INTEGER (2) maxx,maxy TYPE (windowconfig) myscreen COMMON maxx,maxy setovanje grafickog moda myscreen.numxpixels=-l myscreen.numypixels=-l myscreen.numtextcols=-l myscreen.numtextrows=-l myscreen.numcolors=-l myscreen.fontsize=-l myscreen.title=""C modestatus=SETWINDOWCONFIG(myscreen) I
modestatus=GETltJINDOI'I!CONFIG (myscreen) maxx=myscreen.numxpixels-l maxy=myscreen.numypixels-l END
crtanje boxa
l
linija
SUBROUTINE drawlines
()
TTSE nFTTB INTEGER (2) status,maxx,maxy,fontnum,numfonts,color,oldcolor TYPE (xycoord) xy
Re.;dy
Ir;;-DiG~~~L Vi;:;-r;;a;-
)~Startl (:!)[11102:5Z'COP!aJel
slika 3.20 program f_3.1 y(x)=x**3-9*x-7 USE DFLIB CALL graphicsmode () CALL drawlines () END
SUBROUTINE graphicsmode () . USE DFLIB 156
COMMON maxx,maxy REAL x(lOl) ,y(lOl) PARAMETER (Nfonts=6) INTEGER*4 ifont CHARACTER*ll face (Nfonts) CHARACTER*lO options (Nfonts) character*20 list CHARACTER*64 fontpath CHARACTER*3 podio(40) RECORD/fontinfo/ fi
DATA face / "Courier", "Hevletica", "Times Roman", "Modern", II
Script!:
f
11
Roman n
&
/
157
FORTRAN programiranje za windowse
Racunarska grajika sa FORTRAN-om
----------------------~
DATA options jllt1courierl II, J't'helvllT
f
11t 1 tmsrmn'!l ( IItlmodernl
If
,&
"t' script' " , "t' roman' "I DATA podio 1"1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ,& "10", "20", "30", "40", "50", "60", "70", "80", "90", "100",& "50", "100", "150", "200", "250", "300","350","400", "450", "500",
CALL MOVE TO (INT2(ixl) ,INT2(iyl) ,xy) status=LINETO(INT2(ix2) ,INT2(iy2» END DO 'print*, 'xiy(34)' ,x(34) ,y(34) ! crtanje osa
&
"100", "200", "300", "400", "500", "600", "700", "800", "900", "999" / crtanje boxa
minx=40 !miny=maxy+ABS(yymin*yskala) 19-20 miny=maxy-20 CALL MOVETO(minx,miny,xy) status=LINETO (INT2 (minx) ,INT2 (miny) ) status=LINETO(INT2( (xduz+40)*xskala) ,INT2(miny»
status=REC'I'ANGLE ($GBORDER, INT2 (0) ,INT2 (0) ,maxx, maxy) podjela po x osi numfonts=INITIALIZEFONTS() ! izbor fonta i velicine slova !FONTNUM=SETFONT('t' 'arial' 'f5w2i') racunanje koordinata za funkciju f(x)
I
I
DO i=1,101 x(i)=float(i-l)/10. y(i)=x(i)**3-9*x(i)-7. END DO xxmax=MAXVl,L (x) yyrnax=M~XVAL (y) xxmin=MIl\ivAL (x) yymin=MINVAL(y) xduz=xxmax-xxmin yduz=yymax+ABS(yymin) xskala=maxx/(1.2*~duz)
yskala=maxy / (1.2 *yduz) racunanje graf. koordinata xmin i ymin su u gornjem lijevom uglu DO j=2,101 ixl=x(j-l)*xskala + 40 ix2=x(j)*xskala+40 iyl=maxy-y(j-l)*yskala-20 iy2=maxy-y(j)*yskala-20 'crtanje linije 158
IF(xxmax.LE.IO.) THEN dx=l. npocp=O end if IF(xxmax.LE.IOO .. AND.xxmax.gt.10.) THEN dx=lO. npocp=10 end if IF(xxmax.LE.500 .. AND.xxmax.gt.100.) THEN dx=50. npocp=20 end if IF(xxmax.gt.500.) THEN dx=lOO. npocp=30 end if npodj =INT (xxrnax/ dx) if(npodj.gt.10) npodj=10 dxx=xxmax/float(npodj)*xskala idxxl=dxx CALL MOVETO (minx,miny,xy) status=LINETO(INT2(minx) ,INT2(miny» status=LINETO(INT2((xxmax+20)*xskala) ,INT2(miny» maksy=maxy-(yymax+10)*yskala-20 CALL MOVETO (minx,miny,xy) status=LINETO(INT2(minx) ,INT2(miny» status=LINETO(INT2(minx) ,INT2(maksy»
idxx=O iddy=maxy-14 DO ih=l,+O idxx=idxx+idxxl
159
Racunarska grat/ka sa FORTRAN-om
FORTRAN programiranje za windowse C2\LL MOVETO(idxx+40,miny,xy) status=LINETO (INT2 (idxx+40) , INT2 (iddy) ) END DO CALL MOVE TO (20,maxy-14,xy) CALL OUTGTEXT ('0') idxx=O dx=xmax/10. podj=O. DO isp=2,npodj+l ipodio=npocp+(isp-1) idxx=idxx+idxxl CALL MOVETO (( 20+idxx) , maxy-14, xy) CALL OUTGTEXT (podio(ipodio)) END DO
idyy=idyy+idyyl i yy =maxy-(isp-l)*idY'Jl-40 CALL MOVETO (O,iyy,xy) CALL OUTGTEXT (podio(ipodio)) END DO
CALL CALL CALL CALL
MOVETO(INT2(70) ,INT2(150) ,xy) OUTGTEXT (' KRIVA') MOVETO(INT2 (70), INT2 (180) ,xy) OUTGTEXT(' jednacina Y=X**3-9*X-7')
END
podjela po y-osi IF(YYmax.LE.100.) THEN dy=10. npocp=O END IF IF (yymax. LE. 500 .. AND . yymax. gt .100.) THEN dy=50. npocp=10 END IF IF(yymax.gt.500.) THEN dy=100. npocp=30 END IF npodj=INT( (yymax+4.9)/dy) IF(npodj.gt.10) npodj=10 dYY=YYTIlax/FLOAT(npodj)*yskala ! !
lidyy1=dyy idyy1=(yymax/npodj)*yskala idyy=O iddy=12 do iv=l,npodj idyy=maxy-iv*idyyl CALL MOVETO (minx, (idyy-20) ,xy) status=LINETO (INT2(iddx) , INT2 (idyy-20)) END DO CALL MOVETO(10,maxy-30,xy) CALL OUTGTEXT ('0') idyy=O dy=ymax/l0. podj=O. DO isp=2,npodj+1 ipodio=npocp+(isp-1) 160
slika 3.21 4. GRAFIKA SA PAKETOM ARRAY VISUALIZER
Digital Array Visualizer je softver koji omogu6ava graficki pregled i analizu podataka. Prednost paketa je Ll vizualizaciji koja omogu6ava otkrivanje "skrivenih" detalja u visedimenzionalnom prostoru (3D). Prosiren broj uobicajenih opcija, U odnosu na druge graficke pakete, daje znacajne karakteristike u analizi dobijenih iIi datih podataka.
161
FORTRAN programiranje za windowse
.. Array Visualizer koristi OPEN GL koji omogucava interaktivne pokrete, rotaclJu i zumiranje grafike, kao i mogllcnost pretvaranja Ll razlicite oblike: vektorsku grafiku na primjer. Paket, u daljem tekstu program, llkljucuje nekoliko razlicitih komponenti: Array Viewer aplikacija Array Viewer biblioteka Avis2D OCX (aktivna XTM) kontrola Rad u okviru Microsft development studija . . Digital Array Visualizer graficki paket program a je Windows aplikacija kOJa pnkazuJe podatke u dva dijela "prozora": . gornji koji prikazuje numericke vrUednosti U obliku "odmotavajuce stranice" donji okvir prikazuje grafikti u 3D, iii zavisno od izbora moda, ta grafika moze biti 2D (sliim), vektorska grafika iii dijagram. Avi,,~; programska biblioteka sadrZi set programa koji omogucavaju Visual FORTRA.N-u ill \iisua; C++ apliLcij~ [la prikazuje podatke koje koristi Array Viewer (via OLE Automation). Koristenjem ove bibiioteke moze se kreirati vizualizacija sa nekoliko linija koda. Programska biblioteka moze sacuvati podatke kao fajl za kasnUe preglede i interpretacijll sa Array Viewerom Avsi2D Active XTM COCX). Kontrola moze biti razvijena za podrsku ActiveX kontrole (Visual C++, Visual Basic) za prikaz rezultata u grafickom modu. Avis2D kontrola omogucava vise od 100 karakteristika i metodakoje se mogu razviti za upotrebu u radu.
Upotreba FOTRTANA i C API-ja Dva seta funkcija su dostupne za Fortran programaera: API za za Fortran programere: fagl Rutine Ovo je mali set rutina sa kojima startuje Array Viewer, prikaz nizova za glavne funkcije. Rutina ima prefixfi:lgl, kao na primjer faglStartWatch. API za Fortran programere : fay rutine Ovo je odreaeni set rutina koji dopusta programu da kontrolise akcije Array Viewera unutar "prozora" i izvodi odreaene akcije upotrebom interakcije. Rutine imaju prefiksjclv, kao na pr. favStartViewer. Ako se Array Viewer startuje sa favStartViewer, upotreba rutina sa prefiksom fagl se ignorise. Dva seta instrukcija su na raspolaganju programerima u C++: API za programere u C-u: agl rutine Ovo je mali set rutina sa kojima startuje Array Viewer, prikaz nizoya za glavne funkcije. Rutina ima prefix agl, kao na primjer aglStartWatch. API za programere u C++ : CA Viewer rutine 162
__________R_a_c_u.... n .... CII...:"s.... ·k:....:a grafika sa FORTRAN-om
?vo je odrec1eni set rutina koji dopusta programu da kontrolise akcije Array Vlewera ullutar "prozora" i izvodi odreaene akcije upotrebom interakcije. Uobicajena imena naredbi upotrebljavaju C}\. Viewer klasu i uobicaieno se pozivaju iz C++ programa. U ovom dijelll bit ce dat kratak opis navedenih rutina za FORTRAN .. Poziv API-ja iz FORTRANA: fagI rutine Spisak funkcija sa sintaksom za ovaj tip rutine je: fag/Close (array,status) faglEndWatch (array,status) faglHide (array, status) faglLBouncl (array,lbnd,status) raglName (array,title,status) faglSaveAsFi Ie (array,fi lename,status) fagiShow (arraY,status) faglStartWatch (array,status) faglUpDate (arraY,status) gdje je : array ime niza status izlazna veijednist - integer(4) lbnd - ulazna vrijednost ranga I title - ime - string koji pokazuje naslov filename - naziv pod koji se pohranjuje raj] na disk (bez ekstenzije) Na samom pocetku programa (poglavlje ll) neophodno je defisati interfejse: Use Avdef Use DFLib
Poziy API-ja iz FORTRANA: fay rutine Fay rutine ukljucuju slijedece grupe instrukcija: ,/ ,/ ,/ ,/
Array Viewer Instance Data Access Region of Interest (ROn Data Filter 163
Racunarska grafika so FORTRAN-om
FORTRAN programiranje za windowse ../ ../ ../ ../ ../ ../ ../ ../ ../ ../ ../
Palette Graph Axis Selection Graph View (common to all graph types) Height Plot Image Map Vector Graph Data View Camera Marker Miscellaneous
Setuje gornju i donju granicu za Y koordinatu u Graph View Daje gornju i donju granicu za Y koordinatu u Graph View Setuje gornju i donju granicu za Z koordinatu u Graph View Setuje gornjll i donju granicu za Z koordinatu II Graph View Setovanje za osvjeZenje menija (da iii ne) Davanje naredbe za osvjezenje menija (da iIi ne) Redraw - za rel1ekciju izmjene vrijednosti podataka Palette ,. -:.Kreiranje aktuel ne 'pakte Setovanje boje palete Davanje idenlifikacije za boju palete Setovanje podrllcja u kojem se paleta llpotrebljava Davanje podrucja vrijednosti u kojem je paleta zahtijevana Automatsko pridruzivanje palete Upotreba palete (da iii ne) Pridruzivanje definisane boje paleti i Prikazivanje palete (da iii ne) Davanje prikaza setovanih paleta -~
Pregled funkcija u navedenim rutinama sa sintaksom daUe u tabeli 3.3. Napomena: pog1edati uputstvo: Array Visualizer Home Page (str. 1-181). Tabela 3.3
Array Viewer instance Kreiranje podrucja za Array Viewer Ogranicava - zavrsetak podrucja za Array Viewer
l'avStarlVicwer favendviewer
I Data Acces Pridruzuje i prikazuje specificirani fajl la Array Viewer Prikazuje specificirani niz u ''\ornry Viewer Region of Interest (R01) Definise poziciju bv,ja prvog i posljednjeg elementa u ROI Daie pozicii'''l~rvog broja u ROI za date dimenzije [Daje po~'iciju posljednjeg broja u ROI za date dicenzije Setuie dimenzije kolona i redova Daje podatke za kolone i redove Setuje ROI sa aktuelnom "D" slikom
favSetFileName favSetArray f~lVSetRoi
favGetRoiLh favGetRoiUb ravSetRowColDim favGetRowColDim favSetRoi2D
Data Filter Seluje povezivanje Graph View sa vrijednostima koje su van podrucja Daje povezivanje Graph View sa vrijednostima koje su van podrucja Setuje gornju i donju granicu za X koordinatu u Graph View Daje gornju i donju granicu za X koordinatu u Graph View ..
164
favSetDataClamp favGetDataClamp favSetXClamp favGetXClamp
favSctYClamp t~1VGetYClamp
favSetZClamp favGetZClamp favSelDataRefrcshEnahle favGetDataRefreshEnable favU.l2.date favS'ttCustomPalelte favSetPaletteld favGetPal~tte[d favSetPaletteRange favGetPaletteRange favSclPaletleAutoAd just favSetUseColorPalette ravGetUseColorPalelte favSctShowPalette favGetShowPalette
Graficke ose
I Auto skaliranje osa (da iii ne) Davanje auto skaIiranja osa Pridruzivanje dimenzija osa sa podjelom I Prikaz grafickih osa Davanje naredbe zaJ2rikaz setovanih osa Izabrana selekcija (da in ne) Prihvatanje izabrane selekcije sa podacima
favSetAxisAutoScale CavGelAxisAlltoScalc fa'i£@tgim£~alc
I favSetShowAxis favGetShowAxis favSetDataSelectEnable favGetDataSelectEnable
Graph View Setovanje tipa grafike (visina crteza, image map, vektorski prikaz iii prikaz u ravni) Izbor aktuelnnog tiJ.l.a grafike Setovanje stila grafike (mreza, povrsina, bar, linije ili tacke) Izbor,.g:afickog stila Setovanje vrijednosti definisanih granica crteZa za -.Il.rikaz graficke povrsine Izbor gustine linija za pravougaonik Setovanje pocetnog stanja za prikaz i Prihvatanje rJocetnog stanja za prikaz
favSetGraphType fa vGetGri!:£h Type favSetGraphStyle l'avGetGr
165
FORTRAN programiranje za windowse Setovanje vrijednosti za linije paralelograma koje ce hiti prikazane u grafici Izbor za setovanje pri ShowGrid - prikazu gntfike na displcju Krivc linije (da iji ne) Izbor za iskrivljene linije
l'avSctShovvGrjd
I
Setovanje pozicije kamere u fiksiranu poziciju (home position)
CavToHomcPositiol1
favGctSho'vvGrid l'avSetLineSI110()th
fa vGctLi neS m(lOlh
Height Plot Setovanje ve!icine Z-ose relativno od X i Y osc Prihvatanje Z skaliranih vrijednosli ]ednodimcnzjonalnjJekst i boja (d~~Jli ne) u mapi Davanje tekuceg stanja (texture) Setovanje aktuelnog osjencenog stanja Izbor za osjencavanje " Setovanje osvjetljavanja Izbor za setovanu vrijcdnost osvjetljavanja Setovanje sakrivenih linija Izbor za definisane sakrivenih linije
Racunarska grafika sa FORTRAN-om
fa vSctZScale fa vGetZScale i"avSclTextureMode i"avGelTcxtureModc CavSe~~ading
CavGelShaciing favSetHighLighl CavGetHighLight favSetHiddenLight favGcLHiddcnLighl
Marker Setovanje pozicije kolone/rec!a Prihvatanje setovane pozicije Prikaz markera Prihvatanjc aklulne prikazane pozicije nnrkera
j"avSetRowCol i"avGctRowCoj i"u",SetShowMarkcr favGctShowMarker
M iscei laneous Setovanje stringova koj i ce biti prikazani kucistu Array Viewera Davanje broja gresaka Prikaz Array Viewer prozora (Window) Setovanje stringa
l!
nasiovnom
-
-----
I favSetArrayName .... _ - - i"avGetErrorNo favShowWindow favSclAnl1otaliol1
Primjena paketa Array Visualizer sa upotrebom nastavku.
rutina prikazana Je u
image Map Setovanje orijentacije (IDENTITY, XFLIP, YFLIP, I XYFLIP) i Prihvatanje aktuelne setovane orijentacije I Setovanje !,f8lhodno definisanog odnosa (Aspect [ ratio) i Prihvatanje ranije definisanog odnosa Setovanje jinearnog filtera za Image Prihvatanje aktuelnog setovanja Veciol' Graph Sctovanje komponenata indeksa vrijednosti Prihvatanje izabrane opcije setovanja
I
favSetImageOrientation favGellmagcOrientaliol1
PROGRAM main
CavSctFixcdAspect favGetFixcc!Aspcct favSetImageFiller fa vGctlmugeFi jter favSetComplndex favGetComplnc!cx
USE AVDef DFLib integer status
---------.u~s~~
REAL VDATA ( 2 ,
°:10 )
VDATA (1,1) vrijednosti za x VDATA (2,1) vrujednosti za y
Data View Setovanje preciznosti sa kojom ce biti prikazan broj u crtdu (View) Prihvatanje selovanih podataka za preciznost
Program za graficki paket Array Visualiser
favSetPrecision favGetPrecision
do i=O,10 vdata(l,i)=i vdata(2,i)=vdata(1,I)**3-9.*vdata(1.i)-7. end do
Camera Setovanje pozicije kamere Prihvatanje izabrane pozicije kamere Setovanje centra kamere u zoni od interesa (COL) Prihvatanje setovanih podataka za COL Setovanje pozicije kamere kao fiksirane pozicije (home position) 166
favSetCameraPosition favGetCameraPosition favSetCamer;lCoi favGetCameraCoi favSetHoll1ePosi tion
GRAFIKA - ARRAY VISUALISER CALL FAGLSTARTWATCH (VDATA,STATUS)
print * ',startuje se array visualiser' call faglshow (vdata,status) 167
Racunarska grafika sa FORTRAN-om FORTRAN programiranje za windowse I naslov call faglName (vdata, , Jednacina je y=x*x*x-9*x-7' ,status) print *,' u Array Viewer setuj vektorski mod'
call faglUpdate
(vdata,status)
do while (.true.) print *,' Jednacina
y=x**3 -
9*x -7'
read *, key: .. i f ( - ·key . eq ~o-l )
then call faglEndwatch (vdata,status)
print *
, done!
5. GRAFIKA SA PAKETOM PLOT8S PLOT88 je biblioteka grafickih programa za rad na IBM-PC, IBM-XT, IBM PS2 iIi 100% kompatibilnim sistemima unutar PC-DOS operativnog sistema. Potprogrami PLOT88 mogu biti pozivani sa programima napisanim u slijedecim jezicima: ../ MicroSoft FORTRAN 4.01,4.1,5.0 i 5.1 ../ Ryan Mc Farland FORTRAN 2.xx ./ Lahey F77L FORTRAN 4.0 iIi 5.0 ../ MicroSoft C 5·. I ill 6.0 ../ Lahey F77L - EM/32 4.xx ili S.xx ../ MicroSoft PowerStlltlon FORTRAN 1.0 ili 4.0
I
PLOT 88 biblioteka ukljucuje slijedece opcije:
stop end if end do end
../ ../ ../ ../ ../ ../ ../ ../ ../
Emulaciju pera za ploter Linije zavisno od debljine iIi boje, puna iii isprekidana linija, Upotrebljava definisani "prozor" - "window" Podriava razlicite stampace iii plotere Upotrebljava razlicite varijante ispune (fill paterns) Mogucnost izbora razlicitog simbol-set fontova Dvo i tro-dimenzionalnu grafiku i tekst Dvo i tro-dimenzonalnu grafiku i mapiranje i prikaz povrsina Razlicite opcije za output fajlove Osnovni sadriaj potprograma u PLOT88 je slijedeci:
slika 3.22
168
../ PLOTS - inicijalizacija PLOT88 paketa ../ PLOT - generise segmente linija za odgovarajucu "pen" poziciju zavisno od toga cIa Ii je pero dignuto iii spusteno ../ PLOTD - generise tip linije odgovarajuce pozicije do zadate opcije ../ STDASH - definisanje karakteristika linija ../ OFFSET - definisanje X&Y podrucja i skaliranje vrijednosti ../ FACTOR - definisanje povecanja iIi smanjenja crteza ../ WINDOW - definisanje lokacije prozora (window) za crtanje ../ WINORG - definisanje vise prozora (windowsa) ../ ROTTRN - rotacija i translacija crteza za izlaz ../ NEWPEN - definisanje debljine linije ../ WHERE - vracanje (x,y) pozicije i crtanje sa faktorom skaliranja ../ SYMBOL - crtanje karakteraspecijalnih i centriranih simbola u cIvije iIi tri dimenzije 169
FORTRAN programiranje za windowse if'
./ ./ ./ if' if'
./ if'
./ if'
./ ./ ./ ./ .(
./ ./ if'
./ ./ ./ ./ ./ ./ ./ ./ ./ ./
./
170
ASPECT ~ definisanje sirine i vi sine odnosa karaktera crtanih sa SYBOL i NUMBER CHP ATH ~ elefinisanje simbol karaktera ~ horizontal no iii vertikalno GETWID ~ vracanje u karakter string FONT izbor karakter seta sa ineleks brojem IBMPLX ~ izbor IBM karakter seta STMPLX ~ izbor SIMPLEX jeelnostavnog karakter seta DUPLX ~ izbor elupliranog karakter seta COMPLX ~ izbor kompleks karakter seta TRIPLX ~ izbor tripleks karakter seta SCRPLX ~ izbor skript karakter seta GRKPLX ~ izbor gript karakter seta NUMBER ,"-, konvertuje realne brojeve sa elecimalnom tackom u odgovarajuci karakter string'i erta stringove u dvije iii tri dimenzije GETNUM konvertuje realne brojeve sa deeimalnom tackom odgovarajucim karakter stringom SCALE ~ skalira vrijednosti definisane u nizu sa max, i min. vrijeelnosti za upotrebu sa LLl\JE, CURVE, AX1S i LBLINE LINE ~ niz tacaka sa (X,y) koordinatama i erta se u dvije dimenzije sa definisanom linijom izmectu tih tacaka i definisanim simbolima za svaku tacku STLL'\[E ~ definisanje tipa linije i eentriranje simbola upotrijebljenih sa LIt"'\[E i LGLINE CURVE~ erta krivLJ liniju izmectu niza tacaka sa (X,y) koorelinatama i".XIS ~ ertanje linearnih osa sa skaliranim duzinama, deblj inom i oznakama u dvije elimenzije . AXIS3D - ertanje linearnih osa sa skaliranim, duzinama elebljinom i oznakama u tri dimenzije STAXIS ~ definisanje formata ose i debljine oznaka SCALG ~ definisanje logaritamskog faktora skaliranja za upotrebu LGAXS \ LGLIN LGLIN ~ ertanje log-log iii polulogaritamske linije u dvije dimenzije sa nizom (x,y) tacaka LGAXS ~ ertanje! logaritamskih osa u dvije dimenzije sa naslovom, poeljelom i vrijednostima COLOR ~ elefinisanje kolora koji ce biti upotrijebljeni za linije i tekst PALETE~ definisanje boje sa kolor indeksom FILL~ uzima u obzir odgovarajuci poligon koji treba da bude "ispunjen" STFILL~ izbor odgovarajuce srafure uporijebljene za FILL DFFILL~ definisanje srafure upotrijebljene za FILL
Racunarska grajika sa FORTRAN-om
----------------------~
./
DGRID - izvoaenje dvodimenzionalne interpolaeije za konstrukciju unutar programa za date Tacke upotrebom interpolacije lI(udaljellost na stepen) ./ ZSMTH ~ crtanje interpoliranih linija (smooths) za podrucje pravougaonika Slijedeci potprogrami su za ertanje elvo i tro-dimenzionalnih kontura ./ ZSlDE ~ definisanje tacke ulllltar poligona. Upotrebljava se za naslove unutar konture na mape ./ ZLEVEL ~ determinise sve konturne nivoe prezentovane na mapi ./ ZPOST ~ markin'i i oznacava date tacke 1I dvodimenzionalnoj mapi ./ ZCNTUR ~ erta dvodimenzionalnu povrsinu konture bazirane na konturnim tackama paralelograma ./ ZCSEG - erta-d~odimenzionalnu povrsinu konture bazirane na konturnim tackama paralelogxama. Dijeli paralelogram na manje povrsine za vecu preeiznost okonturivanja
./ ./ ./ ./ ./ ./ /
./ ./
./ ./ ./ ./
Slijedeci potprogrami su potrebni za kontrolu trodimenzionalnog teksta, osa i kontura DISP3D ~ definisanje broja climenzija (elvije iIi tri) SCAL3D definisanje elimenzija paralelograma U odgovarajucim jeclinieama SYORNT ~ definisanje ugla za tekst i ose P3D2D ~ konvertuje tacku u tri dimenzije za izlaz (output) 1I dvije dimenzije (x,y) FIT3D ~ elefinisanje troelimenzionalnog prostora za ispllnu (srafuru) UNE3D ~ ertanje iinija u tri elimenzije VTSP3D ~ inieira ako je tacka viclljiva poslije isertavanja mreze Potprogrami za crtanje trodimenzionalnih povrsina upotrijebljeni su sa kontrolnim tackama datih sa subroutinama ZGRID iii DGRID i ZSMTH: MESH ~ definisanje troclimenzionalne za dvodimenzionalnu transformaeiju i erta trodimenzionalnu mrezu povrsine MESHS - clefinisanje trodimenzionalne za elvodimenzionalnu transformaciju i erta trodimenzionalnu mrezu povrsine. Vrsi se podjela na manje paralelograme MSQUAL ~ elefinisanje kvaliteta linija za stanje povrsine MESHCI ~ definisanje dva kolor indeksa za ertanje mreze na vrhu i unutar podrucja MSHCOL ~ clefinisanje intervala za boje MESH4 ~ ertanje cetverodimellzionalne povrsine. Cetvrta climenzUa je prikazana preko boje
Potprogrami dvodimenzionalnih kontura ZGRID ~ izvoctenje dvodimenzionalne interpolacije za konstrukciju unutar programa za date tacke upotrebom Laplacian i splajn interpolaeije. 171
Racunarska graflka sa FORTRAN-om
FORTRAN prograliliranje za windowse
Primjer: CALL PLOT(I.,I.,-3) juli 1999. godine
crtanje linija
PROGRAH pl88
XSKALA=9./(1.2*X~~II)
YSKALA=8./(1.2*YMAXll) REAL X(ll) ,Y(ll) X I Y KOORDINATE !CHARACTER *1 ITEXT I
definisanje gornje desne tacke
DATA
XHAX/9./,Y~~X/8./
duzina X i y ose
CALL CURVE (X,Y,-10,1.) ! GOTO 900
;U=l1
DO 1=1,11 X(I)=I-1 Y(I) =X(I) **3 9*X(I) END DO XHAXl=HAXVAL(X) YHAX1=HAXVAL(Y) XHINl=HINVAL(X) YllIN1=HINVAL (Y)
YPOC= 0.223+ABS(Y(I) )/2.2 - 7
! inicijalizacija za plot !
CALL PLOTS(3,91,91) ! setovanje
~a
DO 1=1,11 X(I)=X(I)*XSKALA*O.9+1. Y(I)=Y(I)*YSKALA*O.9+1.6 END DO xpmin=minval(x) ypmax=maxval(y) ypmin=minval(y)
boju
I
CALL COLOR (15, 0) CALL NEWPEN(4) ! setovanje za factor !
FACT=I. CALL FACTOR (FACT)
XHAXll=ABS (XHINl) +ABS(XMAXl)
CALL STAXIS (.119, .26, .112, .15,2) DD=X~~I*(XSKALA/l.2)
CALL AXI S ( 1 . , 1 . 6, 'X
, ,-5,DD,0.0,0.0,1.5)
CALL STAXIS (.1, .2, .1, .12,0) DZ=YMAXl*YSKALA/l.2 if(yminl.lt.O.O) then ypoc=I.6 -abs( yminl*yskala/l.2) else ypoc=1.6 end if CALL AXIS(I. ,ypoc, 'Y-OSA' ,5,DZ,90.,0.,100.) CALL NEWPEN(2) CALL SYMBOL (3.,4.6, .223,' Y=X**3 - 9*X - 7' ,0. ,18)
CALL NEWPEN(l)
YHAXll=ABS(YMINl)+ABS(Y~~I)
CALL WINDOW(O.,O.,XMAX,YMAX)
172
KRAJ CRTANJA
173
· 'J',e '-"(/. windowse FORTRAN programlran
CALL PLOT(O., O ., 999) I
END
174
1.
DVOD
Mjesovito programiranje je proces povezivanja (building) programa koji su napisani u izvornom kodu sa dva iIi vise programskih jezika. Pri tome se programer mora pridriavati slijedecih karakteristika: .,/ Pozivanje postojeceg koda koj i je napisan u drugom jeziku, ../ Upotreba procedura koje mogu biti razlicite zavisno od pojedinih jezika, .,/ Davanje prednosti u procesnoj brzini.
';
Mjesovito programiranje je moguce sa 32-bitnim jezicima Visual Fortran, Visual ClC++, Visual Basic i MASM. Mjesovito programiranje u Win32 je za 32-clvobitne racunare U oclnosu na 16-bitne za koje je u mnogim slucajevima to ,tesko ostvarljivo. Karakteristike kreiranja mjesovitih programa su 1.1 davanju imena iyarijabli i procedure za upotrebe rutina napisanih Ll razlicitimjezicima. U cjelini se mora voditi racuna 0 konvencij i prozivanja koja ukljucuje koje su rutine ukljucene, koje se rutine ponistavaju poslije poziva, u kojima futinama je striktan iii fiksni broj argumenata, imena promjenljivih ili konstanti, da Ii su imena clekorisana (kao u Visual C++) i koji su odgovarajuci tipovi i data strukture zajednicke iii odgovarajuce u jezicima. U ovom clijelu opisan je tok primjene mjesovitog programiranja sa: .,/ Visual FortranlVisual C/C++ i .,/ Fortran/Visual Basic ,;1 Elle ,g:d,t
;I:~
Io.;,I$
~lnd0W
!;i<.>lp
:aj~~t1£J"i2t
:5
: ~jtH_
Raady
:!ijilstartIUA·O~~ ~.'~"'~.
t ®Kn~Q.3~d-
rl1!crosoft word
1!.~~~~~~.TAl. ~~sua.1 ~~~.~ra?
Slika 4.1
..
.'~'-;~~'
FORTRAN i drugi programskije:::.ici
FORTRAN programiranje za windowse
2. PROGRAMSKI JEZIK C/C++ Nastanak C jezika Osnovna ideja u razvoju bila je napraviti jezik koji je: ../ jednostavan za kompaj lirati ../ efikasan ../ portabilan ../ fleksibilan ../ modularan Od samog pocetka jezik je raZVIJen sa idejom da se jednostavno kompaj lira: ../ C++ koristi samo 32 kljucne rijeci: neke izvedbe BASICA koriste vise od ISO. ../ C++ definira samo jedan pojam za potprograme (funkcije u C-u); veeina jezika koristi dvojnu sintaksu: funkcije i subroutine. ../ Kod prenosa parametara (argumenata) u funkciju, C uvijek prenosi kopije originalnih parametara; mnogi jezici mogu prenositi iii kopije iii originale . ../ Funkcije u C-u su osnovni elementi za izgradnju programa . ../ C koristi samo tri osnovna tipa podataka (char, int, double) koji se mogu modificirati; mnogi jezici koriste znatno vise. Kao primjer spomenimo da C nema logicki (Boolean) tip podataka, vee koristi integer u tll svrhu. Svaki izraz koji daje kao rezultat 0 tretira se kao iogicka neistina, a sve drugo je logicka istina. ../ enema nareclbe za citanje i pisanje vee za citanje i pisanje koristi funkcije. To ne samo cia pojeclnostavljuje jezik. nego ga cini znatno moclularnijim. Ako zelimo citati ili pisati na nestanclarclnom ureaaju jednostavno koristimo drugu funkciju.
---.,.--~~.
Sa pojednostavljenjem kompajlera C je prebacio odgovornost na programera. To znaci da C programer ima vise "sloboda" u programiranju, sto rezultira u stvaranju efikasnijeg programa. Znaci, treba vise vremena da se postane iskusan C programer nego npr. iskusan BASIC programer. C kompajler je jednostavan i efikasan. To znaci da se C program izvodi bde, a koristi manje memorije nego isti takav program napisan u nekom drugom jeziku. Bogata podrska za rad s pointerima (varijable koje sadde memorijske adrese clrugih varijabli) omogucuje direktan pristup u memoriju i tako znatno doprinosi brzini izvodenja. Specijalni operatori za racl sa bitovima omogueuju bolje iskoristenje memorije. Mogucnost dinamickog alociranja.i osiobaaanja memorije i intenzivno koristenje sloga (C je s!ogovno orijentiran jezik) doprinosi njenom boljem iskoristenju. Zahvaljujiei svojoj efikasnosti C je u rnnogim primjenama zamijenio Asambler. 178
Programski jezik je fleksibilan ako se moze koristiti za programiranje razlicitih zadataka. Njegova struktura, s jedne strane, oillogueuje direktan kontakt s memorijom, sto ga cini pogoclnim za razvoj onih programa kod kojih je brzina izvodenja i iskoristenost memorije kriticna. Tu spadaju razliciti dijelovi operacionog sistema, kompajleri, clrajveri i s1. S druge strane, bogate kontrolne strukture omogucuju efikasno programiranje aplikacija. C je najpogodniji i najvise se koristi za sistemske programe . Programski jezik je moclularan ako se programi napisani u tom jeziku mogll jeclnostavno clogradivati i povezivati sa ostalim programima. Koncept funkcije, kao osnovnog elementa programiranja, omogueuje jednostavno povezivanje sa ostalim programima, a i jeclnostavnu nadgradnju postojeeih programa. Aplikacija koristi funkcije za interno povezivanje pojedinih dijelova. Zelimo Ii promijeniti fllnkcionalnost, treba samo pozvati clrugu funkciju. S clruge strane, aplikacija preko funkcija komunicira sa vanjskim svijetom (npr. perifernim uredajima). Ako zelimo kOlllunicirati sa novim hardverom, treba samo napisati (iii koristiti vee postojeell) funkciju i pozvati je iz programa .
2.1 OSNOVNA STRUKTURA C JEZIKA C je strukturni jezik, koji proklamira dekompoziciju problema na samostalne i neovisne cjeline koje zovemo fUllkcije (cest je naziv i potprogrami). Funkcije su osnovni dijelovi za izgradnju programa. Vaznost funkcija vicll se i po tome sto standard C jezika saclrzi i biblioteku funkcija. Funkcije l11ozemo pisati sami iii koristiti vee postojece (npr. iz standarclne biblioteke). ~----Najjednostavniji primjer programa pisanog u C-u: main() {} Svaka funkcija u C-u ima ime, npr. main, dvije obicne i dvije viticaste zagrade. Funkcijamain () moze imati odreoeni set parametara, kao npr.: main ( int argc, char *argv[ ] ) { } Prvi parametar definise intidzer varijablu za argument iii promjenljivu c. Argumentchar*argv moze biti kompleksan kao niz karakter stringova. Dobro clizajniran program izclvojit ce funkcionalne cjeline u zasebne funkcije. Te se funkcije mogu kasnije zamijeniti novim (boljim) ako treba. Tako npr. mozemo za ispis rezultata koristiti funkciju IspisRezultata. Ako kasnije 179
FORTRAN programiranje za windowse
FORTRAN i drugi programski jezici
zelirno drugaciji opis, iii ispis u nekom boljem obliku (npr. grafickom) zamijenit cerna postojecu funkciju novom, bez potrebe da mijenjamo tok programa. .lednako tako dekompozicija na funkcije omogucuje brzi i Iaksi razvoj programa unutar grupe. Posto su funkcije zasebne i samostalne jedinice, pojedinac moze kodirati i testirati svoje funkcije, neovisno 0 drugima. Jednom napisane i testirane funkcije mogu se kasnije koristiti i u drugim programima.
znakom # su pretprocesorske naredbe (obraauje ih pretprocesor). Naredba #include moze se staviti bilo gdje u program, ali je obicaj cla se stavlja na sam pocetak. C programi reclovito imaju po nekoiiko #include naredbi na pocetku . Slijedeca linijaje prazna, i ona se ostavlja da bi citljivost programa bila bolja. Iza ove nareclbe slijedi funkcija maine ). Buduci da program pocinje od funkcije main, ona se obicno stavlja na pocetku koda, iako to nije neophodno. Funkcije u C-u prepoznajemo po tome 8tO iza imena slijede zagrade, unutar kojih se opcionalno mogu staviti argumenti. Ako i nema argumenata, zagrade se moraju staviti. Otvorena viticasta zagrada, { , koja slijecli nakon funkcije, oznacava njezin pocetak, dok zatvorena viticasta zagrada, }, na kraju oznacava njezin kraj. Sve unutar toga su naredbe koje pripadaju toj funkciji. Funkcija main ima sarno jednu naredbu: printf ("zdravo svima\n"). Svaka naredba u C-u mora zavrsiti tacka-zarezom. Kombinacija \11 (dva znaka) na kraju znaGi skok u novi red. Funkcija printf je mnogo kompleksnija i njezin opsti oblik izglecla ovako:
Kao !ito smo rekli, C je koncentrisan oko funkcija. Sam pocetak programa je funkcija koja se zove main. Naglasavanjem potereba za funkcijama C povezuje kodiranje programa sa njegovim dizajniranjem. Programske cjeline (funkcije) mogu se nalaziti u jednoj jlj vise datoteka. Cesta je praksa da se funkcionitln0 cjeline izdvoje u zasebne datoteke. Kako se svi ti dijelovi na kraju povezuju u jedinstveni sistem? Da bismo to shvatili morflmo objasniti postupak nastajanja programa od njegovog izvornog do izvedivog oblika. C program se obicno sastoji od nekoliko izvornih datoteka koje imaju ekstenziju "c". U jednoj od tih datoteka nalazi se i funkcija main od koje program pocinje. Proces stvaranja programa sastoji se iz dva dijela: -./ kompiliranja (prevoaenja) ,/ linkovanja (povezivanja) Svaka izvorna datoteka mora se kompajlirati i kao rezultat se dobije tzv. ".obj" datoteka koja predstavija prevedeni kod (cesto se zove relokatibilni kod). Ovaj kod sadrzi relativne adrese i nije povezan sa onim dijelovima program a koji su izvan te datoteke (npr. funkcije u drugim datotekama iii sistemske funkcije).
2.2 PROCES STY ARAi'TlA PROGRAMA Svaki program u C-u mora imati harem jeclnu, glavnu, funkciju koja se zove mainTradicionalno najmanji i najjednostavniji C program ispisuje poruku, npc "zdravo svima". Taj program izgleda ovako:
# include maine ) { printf ("zdravo svima\n"); }
printf (Format, arg 1, ... , argn) Naredba printf je funkcija sa varijabilnim brojem argumenata (takve su funkcije moguce u C-u). Broj argumenata implicitno je zapisan II prvom argumentu, Format. Format sacldi tekst za ispis i proizvoljan broj "%" kombinacija, gdje n preclstavlja specifikator. Za sada je bitno uociti cIa svaka %n kombinacija zahtijeva dodatni argument iza FOlmata. Prema tome, koliko ima %n kombinacija u Formatu, to!iko mora biti i dodatnih argumenata, argl .. argn.
PrintY ("%d je cijeli broj, a %f realni broj \11", 11, m). Buduci da ima dvije %n kombinacije (%ci i %F), treba imati i elva doclatna argumenta, U ovom slucaju n i m. Ako je n=1 0, a 111=12.34 onda ce se ispisati: 10 je cijeli broj, a 12.34 real an broj Funkcije Opsti oblik funkcije izgleda ovako: Povratni podatak ImeFunkcije (deklaracija argumenta) { deklaracije naredbe
Prva linija # include nagovjestava da ce se koristiti standardna biblioteka. Naredba # include ukljucuje (kopira) ko~pletan sadrZaj clatoteke stdio.h. Ova datoteka se zove header datoteka (ekstenzija".h") i saddi sve potrebno za koristenje sistematske biblioteke. Sve naredbe koje pocinju 180
i81
FORTRAN programiranje
ZCl
windowse
Povratni podatak je ono sto funkcija vraca kao rezultat. Deklaracija argumenta je opcionalna i stavlja se jedino ako funkcija prima argumente. U tom mora se navesti tip podataka i ime varijable. Deklaracije ul1utar funkcije sluze za clekiarisanje !okalnih varijabli. One su viclljive same unutar funkcije. Proizvoljan bro] naredbi, racli citkosti cijeiog programa, treba ograniciti. Ukoliko je previse naredbi, mOie111o funkciju podijeliti na dvije ili vise. Primjer:
int potencija (int baza, int exponent) { int i, p; p=l for (i=l; i<=exponent; i++) p=p*baza return p };
_ _ _ _ _ _ _ _ _ _....:F:....-:::O:..R:.::T..:.R~A~N i drugi programskijezici
Tipovi podataka c koristi slijedece tipove varijabli: ./ ./ ./ ./ ./ ./ ./
char-karakter, eluzine I bajt na PC -u int-cjelobrojna varijabla, duzine 4 bajta na PC-u short-kratka cjelobrojna varijabia. duzine 2 bajta na PC-u !ong-eluga cjelobrojna varijabla, eluzine 4 bajta na PC-u float-kratka realna varijabla, eluzine 4 bajta na PC-u double-duga realna varijabla, eluzine 8 bajta na PC-u cjelobrojne varijable mogu imati moclifikator unsigned, sto znaci da su bez predznaka, oelnosno cia saclrze same pozitivne brojeve.
Nekoliko primjera: intn; unsigned long uI;
char polje[ I 0]; Ova funkcija vraca cijeli broj, pa je Povratni podatak int (int je u C-u oznaka za cjelobrojnu vrijednost). Funkcija prima dva argllmenta, baza i exponent, oba cjelobrojna. U deklaraciji se najprije navodi tip podatka (u nasem slucaju int), a zatim ime argumenta. Argumenti su meausobno oclvojeni zarezom. Funkcija nadalje koristi lokalne varijable i, p. Slijede naredbe za racunanje i na kraju vracanje rezultata nareclbom return p.
Varijabla n je cjelobrojna, a ul je eluga cjelobrojna varijabla bez predznaka. Polje varijabli predstavlja polje karaktera (znakova) oel 10 elemenata. P?lja u C-u se deklarisu tako cia se iza imena varijable stave uglaste zagrade i u npma broj koj i predstavlja dimenziju polja. Operatori
Funkcija se pozi va ovako: illt rezultat; Rezultat=potencija (2,3); Ovaj primjer izracunava 2 na potenciju 3 i daje rezultat 8. Opcenito gleclano, argumenti se u neku funkciju mogu poredati po vrijednosti ili po referenci. Ako se neki argument predaje po vrijednosti, onda se pri svakom pozivu funkcije kopiraju originalne vrijeclnosti. Funkcija, dakle, radi sa svojim kopijama, i nema bojazni cia ce promijaniti originalne vrijeclnosti. Ovakvi se argumenti cesto zovu i ulazni argumenti. Ako sa argument predaje po referenci, oncla se predaje referenca na originalni argument i sve promjene koje funkcija eventual no nacini na tom argumentu reflektiraju se na originalu. Drugim rijecima, funkcija ima direktan pristup na argument. Ovakvi se argumenti cesto zovu i izlazni argumenti. C jezik uvijek predaje argumente po vrijednosti. Predaja po referenci moze se ostvariti koristenjem pointera. 182
Operatori se u C-u mogu podijeliti u slijedece skupine: ./ aritmeticki operatori ./ logicki operatori ./ operatori nad bitovima Aritmeticki operatori A. ritmeticki operato.ri sluze za aritmeticke operacije, a mogu biti binarni iii unarnL Pored standardnlh operatora: mnozenje (*), elijeljenje (I), sabiranje .oduzlman]e (-), C koristi i modulo operator (%). Ovaj operator daje ostatak u dlJeljenJu cJelobrojnih vrijeclnosti. Tako npr. 10% 3 je I. Specificnosti C-a su i inkrement (++), te dekrement (-) operatori. Ovi operatori javljaju se U dva oblika, npr. ++a i a++ (isto vrijedi i za dekrement operatore). Razlika izmeau ova dva moda vidi se II slijedecem primjeru: X=a++ Stavlja vrijednost od a u X i zatim povecava za 1 183
FORTRAN i drugi programskijezici FORTRAN pmgramimnje za windowse
float shurt continue for default £oto sizeof static do Rezervisane rijeci vezano za komp01jler (decI fort rail near far const
X=++a Najprije poveca zajedan i zatim stavlja tu vrijednost u X Ako je a bio 4, onda ce slucaju biti X=5, a=5.
Ll
prvom siucaju biti X=4, 01=5, dok ce u drugom
void
volatile vvhl1e
Logicki operatori Logicki oDeratori sluze u logickim izrazima. C sadrzi relacijske operatore: ~ece (», vece iii jednako (>=), manje «), manje iii jednako «=). Znak za usporedbu je = = (dva znaka =). Treba biti pazij iv i razlikovati (~=) oei (=). Jedan znak jednako zna6i pridruzivanje, kao npr. a=b. Ovdje se vrijednost varijable b pridruzuje varijabl i o1. Dvostruki znak jednako usporeduje dvije varijable i daje logi6ku istinu akOSll jedn01ke, odnosno neistinu ako SLl razli6ite: Ako je 01=5 i b=4 onda ce:
2.3 VISUALFORTRAN/vISUALC++
U prethodnom dijelu date Sll osnovne karakteristikr C!C++ programskog jezika iz kojih se moze u06iti razlika u konvenciji izmedu FORTRAN-a i (:-a. Prilikom upotrebe VISUAL C/C++ mozemo editirati, kompajlirati i povezivati kod sa Microsoft Visual developmentom. Prilikom startovanja programskog jezika C bira se FilelNew i Visaul C omogueava aktiviranje editora sa izborom odgovarajucih opcija (slika 4.2).
O1=b staviti 4 u a a==b ce dati 0 (nula je logi6ka neistina u C-u, sve ostalo je logi6ka istina). Logicki I operator je &&, logicki ILl je II i logi6ki NE je !. Logicki NE se llloze kombinovati sa znakom jednakosti i onda zn01ci nejednakost (1=). Operatori nad bitovima Operatori nad bitovima su specificnost C jezika. Oni omogucujll logi6ke operacije nacl bitovima unutar cjelobrojnih varijabli. Najveca prednost je bolje iskoristenje memorije i uglavnom se primjenjuje u sistemskom programiranju (npr. kod pisanja drajvera). C ima logicki r (&), logicki ILl (I), 10gi6ki ekskluzivni ILl (J\), pOlTI£lk u lijevo «<), pomak u desno (») i jednostruki komplement (-). Tako npr. x=x& - 077 postavlja zadnjih 6 bita u nule. U tabeli 4.1 dat je pregled rezervisanih rijeci u CIC++ programskom jeziku. auto break case char
double else enum extern
int long register return
Tabela 4.1 strllct switch typeclef union
R'.!ady
;~Startl.ti ~~'~;~:n ~ j ~Y.nJiga4d-_MI~rc:;oftWord 11.~-.r:i~~~~_~.~~~~U:3.1. ~:::.~.
Slika 4.2 Prozor C++ Fortran kompajler omogucava kombinaciju sa C++, kako je prikazano na slici 4. I prilikom izbora opcije (Worksapace). Prilikom linkovanja na glavnoj liniji, ako je glavni C program CMAIN.C, tada cemo pozivati fOliranski potprogram normalno sa nazivom FORSUBS.~90. Kreacija CMAIN je sa sljiedeeim komandama: 185
184
FORTRAN i drugi programskijez.ici
FORTRAN programiranje za windowse
c I Ic camin.c DF cmain.obj forsubs.f90 Fortran DF kompajler 6e pridruziti objektni fajl za glavni program napisan u C-u i kompajIirati sa C kompajlerom, a kao rezultat toga je CMAIN.EXE sa dva objektna fajla. Prilikom fada sa FORTRAN-om i C++-om moramo voditi racuna 0 slijedecem: .,/ upotreba fortranske Run-time biblioteke (tipovi i projekti), .,/ upotreba visekorisnickih biblioteka i .,/ upotreba C Debug biblioteke. Slijedi primjer primjene·pozivanja FORTRAN-a programa pisanog u C++ iz FORTRAN-a.
IZ
C++
pozivanja
Primjer:
Pozivanje potprograma pisanog u C-u iz program a pisanog u FORTRAN-u Za dati primjer pozivanja potprograma pisanih u C programskom jeziku iz programa pisanog u FORTRAN-u potrebno je u projekat "Workspace" ukljuciti datoteke u Kojima se nalaze potprogrami C programskog jezika (u C programskom jeziku potprogrami se nazivaju funkcije). Za primjer koji slijedi, izgled ekrana nakon otvaranja projekta (Workspace "piramida") i ukljucivanja datoteka, koje se koriste u projektu, datje na slijedecoj slici.
Slika 4.3 U navedenom primJeru "poziv_pirnmide.for" je llne datoteke FORTRAN-skog programa koji poziva, a "piramida.c" je Ilne datoteke potprogtama pisanog u C-u koji se poziva. Primier ::,:t pozi'lanje
If
Ir.. te::rf,:5,ce zo.
~./e2U
potp.ro'~:.rrEUila
pis.::tW:J9
izm:edi1.l FORTRAlT·-5. i
C-a
(-··n iz Fi)RTRA.lf···a
!.1.
Z~{
poziva.nje patp:rcgralftB.
INTERFACE TO SUBROUTINE piramida [C,AI.IAS: '_piramida'J (a,b)
I
:HARACTER*l a [VAlUE] CHARACTER*l b [VALUE] END
! GLAVNI PROGRA}f
I
! Deklaracija p:ro~ftjehlj:;.v-ih ICHARACTER*l as,bs [ Unos PQcii3.taka.
I
PRIHT '( l]L A, 120) , , 'UlIESITE PRVI ZHAK' READ' (A, I1)' ,as PRINT' (lX,A,I20)', 'UNESITE DRUGI ZHAK' READ' (A, II)' ,bs
j
Pozi.1ra.nje
I
l?<:,t.py-ci~:r;ama
ICALL pira.m.i~~ C~s, bs)
! Rrai programs STOP END
I
186
187
___________F~O~R~T:..:R:..:A~N i drugi I_Jr_o--,-g'-.'_·(!_n_1s_·k_ic:.-j_ez_i_c_i___________
FORTRAN programiranje ZCl windowse
Radi illlstracije komllnikacije FORTRAN-skog programa i potprograma pisanog u C-u, u FORTRAN-skom programu "poziv_piramide.for" vrsi se unos granica intervaLl, a ispis piramide slova se vrsi iz potprograma "piramida.c" pisanog u C-u. Iz prikazanog se vidi da se u FORTRAN-skom programu moraju na pocetku nalaziti naredbe za II (za svaki pozivani potprogram poseban" Pri pozivanju potprograma mora se postovati standardna procedura za pozivanje potprograma u smislu adekvatnosti i broja koristenih varijabli. Ispis koda funkcije pisane u C-u ("piramida.c"):
m,.,~ ", " b
/"*
Primje/: Pozivanje potprograma pisanog u FORTRAN-u iz programa pisanog u C-u Za dati primjer pozivanja potprograma pisanih u FORTRAN-u iz program a pisanog u C-u potrebno je u projekat "Workspace" ukljuciti datoteke u kojima se nalaze potprogrami pisani u FORTRAN-u. Na slijedecoj je slici prikazan ekran nakon otvaranja projekta (Workspace "fakt_pit") i ukljucivanja datoteka, koje se koriste u projektu.
a funkcije (cha.r- a ~
cick.l.':JrE\ci.l;:) \T'::J.ri·iz:ll"J.ll char Jfl, n: POJll, -
k.GJf:"; :~.8 kCJrl:~,t,e U
I1.l.rJ.::.ciji.
(potp.rog:t'.::l.J1l1..l.)
,*,'
iOlt ij.k. IfI.=a ..
n=b;
pOJfL=n._
I
JIl=POJil"
}
:r-e:zul to. t,3-, ·x·/
("Piramida za interval [%c. %cJ'n",m.n); i=J[t,
D1-
for
i-c=n; i++) (Jr.=!), k<1'l-i (j=m.; j<-=i-l~
k++) putchar-(' '). j++) putchar(j)~ putchar(j--),
I·:rhile (j pu tchar ( --,n I
),
}
Slika 4.5 Za unijeta dva znaka min na intervalu ['a','z'] pravi se piramida slova. Npr. ukoliko je 'm'=b i 'n'=1 piramida slova ima siijede6i izg}ed:
Slika 4.4 188
U navedenom primjeru "fakt_pit.c" je ime datoteke C programa koji pozlva, a "F AKTORIEL.for" 1 "PIT AGORA.for" su imena datoteka potprograma pisanih u FORTRAN-u koje se pozivaju. Ispis koda glavnog programau C-u ("fakcpit.c"):
I
programe uradio mr H. Bukvic 189
FORTRAN programiranje za windowse
_ _ _ _ _ _ _ _ _ _-=-F.::O:..::R~T:..:R'.':A~N i drugi programskijezici
#inclll.de
f lOE!.t b,
float *c),
flo.::tt c' printf (" . . ,.n.Faktoriel ad PITAGORA :' '::0 40
printf(WZ~~s~ran~ce
l
40 hipotenuz.3. je.
%£'-...n'·-".n"
r
Slika 4.6 Ispis koda FORTRAN-skog potprograma "FAKTORIEL.for":
3. PROGRAMSKI JEZIK VISUAL BASIC
,'-
FUnCTIOn FAKTORIEL [VALUE]
(n)
n
i,
I
a.J(lt
'" i amt
Ispis koda FORTRAN-skog potprograma "PITAGORA.for": ~ SUBROUTIHE potprCf':JrdJlt PITAGORA fer
I
SUBROUTINE PIT A,GORA (a, b" REAL a [VALUE] F:EAL b [VALUE] REAL c [REFERENCE] [, c - SQRT (a * a + b ~b) END
c)
Radi ilustracije komunikacije C programa i potprograma pisanih u FORTRAN-u, u navedenom primjeru se u C programu "fakt_pit.c" zadaju vrijednosti ito, za trazenje faktoriela vrijednost 7 i za izracunavanje cluzine hipotenuze pra\iouglog trougla po Pitagorinoj teoremi duzine stranica trougla 30 i 40. Ispis rezuitata se isto tako vrsi iz C programa "fakcpit.c". Iz prikazanog se vidi da se u C programu, na pocetku programa moraju nalaziti "extern" instrukcije (za svaki pozivani potprogram posebna "extern" instrukcija). Pri pozivanju potprograma mora se postovati standarclna procedura za pozivanje potprograma u smislu adekvatnosti i broja koristenih varijabli. Za zadate vrijednosti npr. n=7 i a=30 i b=40 rezultati su slij~de6i:
190
Visual Basic je sigurno najjeclnostavniji, ikacla napravljen, profesionalni programskijezik. Njegova sintaksa temelji se na gotovo 50 godina starom Basic-u iz cijeg naziva mozemo zakljuciti kome je namijenjen. Za samo nekoliko mjeseci mozete ovlaclati Visual Basicom i poceti praviti svoje prve Windows programe Zasto programirati u VB-u? Visual Basic ima nekoliko preclnosti nacl ostalimprogramskimjezicima i alatima. On omogucava cia nacrtate svoj program prije nego i pocnete pisati kocl i tako sebi oiaksate posao. Druga velika preclnost jeste lako ucenje programskog jezika. Naredbe su slicne engleskomjeziku. Visual Basic se koristi kao skript jezik u MS Office-u 97, pa njegovim ucenjem dobijate mogu6nost programiranja II Office-u. Visual Basic ima mogu6nost nadgradnje pomocu -1\ctiveX kontroia. To su vanjske kontrole koje mozete ubacivati u svoje programe i poboljsati njihovu funkcionalnost i fleksibilnost. Vaznaje i mogu6nost vanjskih poziva operativnom sistemu pom06u tzv. API funkcija. Od verzije 5 imate mogucnost koristenja carobnjaka pom06u kojeg mozete, samo odgovaraju6i na pitanja i izabiru6i prave opcije, kreirati izglecl vaseg programa. Visual Basic je potpuno objektni programski jezik, sto znaci da se sve radnje izvode manipulacijom i promjenom svojstava raznih objekata. Pored promjene svojstava objekata, postoje i ugraaene funkcije koje sluze za 'nevidljive' operacije poput rada sa datotekama, racunskih operacija i sl. Mozete pisati funkcije racli poboljsanja mogucnosti VB-a iii prilagoaavanja potrebama. Zato je potrebno nesto bolje poznavanje programskog jezika i naredbi. Osim putem kocla, svojstva objekta mijenjaju se i prilikom dizajniranja programa putem Properties prozora. Ovaj naCin mogu6e je koristiti samo pri izradi programa, a ne tokom njegovog izvoaenja. Za promjenu svojstava pri izvoaenju programa morate koristiti naredbe tj. kod. 191
FORTRAN i drugi programski jezici
FORTRAN programiranje za windowse
Sve naredbe za promjenu svojstava objekata su u obliku: Ime_ objekta. Svojstvo
= vrijednost
Na primjer, da bisl110 promijenili tekst koji je ispisan na objektu Labell, upisat cemo slijedeci kod: Labell. Caption
= "Ovo je tekst ispisan u OVOI11 objektu"
Nazivi objekata i njihova svojstva su, u stvari, rijeci koje se koriste u engleskOI11 jeziku. U tome se i ogleda jednostavnost VB-a. Label je naljepnica, natpis, a Captionnaslov.
,/ Properties - je prozor u kojem se nalaze popisana svojstva trenutno oznacenog objekta. Sva ta svojstva moguce je promijeniti pomocu ovog prozora, ali i pomocu koda . ./ Toolbox - je prozor u kojem se nalazi popis objekata koje mozete unijeti u svoj projekt. Svi objekti su prikazani graficki, kao ikona, ali imaju i tooltip. ./ Code Window - je prozor gdje se upisuje kod. Upisivanje koda je lagano. Sarno dvokliknete na neki objekt i pojavljuje se ovaj prozor za unos koda. Izaberete objekat, potom akciju pri kojoj 6e se izvrsiti i sve.ie gotovo . ./ Project Explorer - je prozor koji nudi hijerarijski prikaz svih formi, modula itd. Tipovi podataka u Visual BasiCH Podaci koji u Visual Basicu se dobijaju i koriste tokom lZvrsavanja programa nalaze se u varijablama. Postoji mnogo tipova podataka pa tako i mnogo tipova varijabli koje ih mogu cuvati. Jedna varijabla moze da sadrzi samo jedan tip podataka, ito onaj za koji se odlucimo. ,/ Boolean - moze saddavati samo vrijednosti True i False. Koristi se kao spremnik rezultata logickih operacija . ./ Byte - ovo je jednoznakovna, jednobajtna numericka vrljednost u raspol1u od 0 do 255. i nema predznaka. ,/ Currency - saddi vrijednosti koje se odnose na val ute. ,/ Date - sadrzava datume. ,/ Integer - sadrzi numericke vrijednosti, negativne i pozitivne. ,/ String - saddi tekst. Nema ogranicenja II kolicini teksta koju varijable c1eklarisane za ovaj tip podataka mogu sadrzavati.
-!I~ ~
GO :::J~
it9"-. -
~.~ ill
3.] VISUAL FORTRAN /VISUAL BASIC
9:36
Slika 4.7 Prozori Visual Basica U VB-u, pored glavnog prozora, postoje i dmgi prozori koje pozivamo po potrebi. Svaki od njih ima svoju upotrebu i sluzi za odredene radnje. ./ Main Window - je onaj na kojem se nalaze toolbar i meniji kojima pozival11o sve osnovne funkcije koje kontrolisu rad programa. Te su funkcije New Project, Open project, Save, Save As, Compile, Run itd .. Ako zatvorite ovaj prozor izlazite iz Visual Basica. .
192
Visual Basic su upotrebljava obicno kao "Front-End Generator" u kombinaciji sa FORTRAN-om. Prilikom pozivanja FORTRAN DLL iz Visual Basic-a mora se voditi sledeca kontrola nad podacima i tipovima podataka: ,/ Visual Basic upotrebljava STDCALL standard sa nekim izmjenama. On ne pridruzuje "@n" dato u imenima na x86 sistemima. ,/ Sa Visual Basic-om mora se voditi racuna 0 rutinama koje ce pozivati (called) i odgovarajuce argumente. Skalarne vrijednosti argumenata mogu biti direktno pridruzene iz Basic-a u FORTRAN, ali stringovi, nizovi i drugi tipovi moraju biti opisani. Osnovni principi mjesovitog programiranja sastoje se u: ,/ Deklarisanje FORTRAN-ske mtine u Visual Basic ,/ Eksport rutine sa FORTRAN DLL-om ,/ Definisanje tip a podataka 193
FORTRAN programiranje za windowse
FORTRAN i drug! programskijezici
---------------------
U tabeli 4.2 datje pregled usklaaenosti tipova podataka u VB-u i FORTRANU: Tabela 4.2 I
Problem pozivanja-Cal
)I
i
i Visual
Basic i Visual Fortran inteaer varijable imaju usklac1ene. , Kao osnova (default) intidzer (integer) velicina u Basicuje sa 2 najta i od,govara INTEGER (2) u Fortranu Kao default Visual Basic i Visual Fortran imaju single i double Real precision sa istim brojem bajtova (4-single, odnosno 8 za double I "recision). . I Kao default u Basicll U s(ruKtilI'j poziva-caiieci Ciefiniite<~~'~k-a-o-----i BSTR. U ovom slucajll treba voditi raClll1a 0 llsaglasenosti,S:l String Fortranom. Kad se pridruzuje string iz Basica za Fortran d~klarise ! se:-:a ByVal. I ~~;'o clefault u Basicu je 0 , au Fortranu je J. Kad se 1..1 Basicu deklari;;::- !liz velicine "n" to znaci cia ima n+ I elemenata u i, Fortranu jer Ba~;C startuje sa nultim elementom. ! Tipovi koji su deklarisani u 3~1'lCH mogu biti priclruzeni iz Basica Types
I I
I I I
Logical
SUBROUTINE FortranCall 'DECS ATTRIBUTES DLLEXPORT :: FortranCall ime FortranCalll1 !DECS ATTRIBUTES ALIAS ovim je setovano
I u Fortran. Kao osnova Visual Basic i Visual Fortran imaju single i double I precision sa istim brojem bajtova to jest sa 2 bajta.
'OVO je eksport FortranCall
! Sa
Primjer: . . Potrebno je vrsiti racunanje povrsine trougla ako su date stral11ce a, b J C i uglova trougla primjenom kosinusne t e o r e m e . . v Ulazni poclaci, izlazni podaci,kao i komentar u. slucaJu ~da s.u pogr<,;snov.clate . stranice trougla, vrsi se sa VB-om. RacunanJe povrsIl1e trougla. vrSI se primjenom SUBROUTn
I
Deklarisanje FORTRAN-ske nltine u Visual Basic Koristenje Visual Basic-a mozemo opisati na primjeru Fortranskog potprograma sa nazivom FortranCali sa dva argumenta koji su single-precision: Declare Sub FortranCall as Single, A2 as Single)
lib
"d: \MyProjects\Fcall. dll"
Attribute VB~Name = "Modulel" Declare Sub trougao Lib "d:\Prograrn Files\trio\Debug\trio.dll" (a As Single, b As Single. c As Single, p As Single) Declare~Function ugao2 Lib ·'d:\Program Files\ugao2\Debug\ugao2.dll" (X As Single, Y As Single. Z As Single) As Single
(AI
Deklarisanje Fortranske funkcije sa imenom FortranFunc koja takoae ima dvije cjelobrojne vrijednosti a kao povratnu ima single-precision vrijednost: Declare Function FortranFunc Lib (AI as Long, A2 as Long) As Single
"d:\MyProjects\FFun.dll"
Eksport rutine sa FORTRAN DLL-om Prilikom kreiranja Fortran DLL-a mora se VOditI racuna 0 tome da funkcija iIi subroutine bude deklarisano sa ekstenziom .DLL. Primjer deklarisanja za DLL koja se eksportuje dataje na primjeru subroutine:
194
195
FORTRAN i drugi programskijezici
FORTRAN programiranje za windowse
D"irr. b
As S1.ngle
Dim r::: As :5l11cJ102 Dl~(l
P
}L3 Slngle
Dun ugaoa As Sin'Jle DDj ugaob .0.3 Sin.gle Din1 ugaoc.: As :5ingle Inpt~tBo;.: ("unes). stranu a") ..illl
;
0
8
.:..Jllil r6l"-
b
=
InputBox ("unes1. stranu b
rt
)
'c """ Inputiox ('unesi str::ann cit") 3:f ((3 + h) > c And (b + c) ;- a And CalL t::ougao(a, 0, C, p) ugaoa '" l.lgaoZ (l:"'>C, a) ugaob"" ugao2(c, a, bj ugaoc '" 180 (ugaoa + ugaob) Labe~l_Caption '" "pavrslna=" & p
(c
+
a)
;- bl
The
L8be12.Cap1:10n '" "alfa"''' .~ ugaoa Labe 13. Capt lon '" "beta=" .;; ugaob
"game="
&
ugaoc
"NETACNI PODACI"
;~-
~-Ln--i:'(i;T 1"
Freody ;;f:!Start
iU. ~ i!:~ .;:n.. 'J? i ~prOJedl' r':icrOSDft Visu<), ·1 ~KflliQa4c, r4icrosoft w'xd Il~DI.GIT~~.Vi.~.U~lc~.or~r~·.."; Slika 4.10
:-, ,,1;1 '
"';;c;~:-,-
1·=<,3~--;;;2i-
Slika 4.8
DUll
lJ
Sl:c:. Ccmlmandl ·::-llc;,\:(' ).s Single As 31.n9le
DHII ugaoa ."_S 31ngle Diu, ugaob P.3 Sl.ngle Dul'! ugaoc ).s Sl.ngle a '" Inpu::.30x ("unesl. stranu an) b '" Inpu-r.Box ("unesl. stranu b") c Inpu-r.Bc:{ ("unesi str:anu c") I f ((a + b) > c J'.lld (b + c) ). a _tl..nd (c Call trougao (a, b, c, pJ ugaoa '" uga02 (b, c, a) ugaob : 1.1ga02 (c, a, b) ugaoc '" lao - (ugaoa + ugaob) Labell.Caption = "povrs1.na=" & p Label2.Caption : "alIa:" & ugaoa Label3.Captl.on;o "beta=" ~ ugaob Label4.Ca.ptl.on '" "garna.=" .s; ugaoc Else ;0
Slika 4.9 196
+
a)
). b)
Then
~~ti~lifffi~"'~"IIII"lIlIlIillIlIlG]§~1
,J"'•. : 13;30
.: :::L~:.......
197
INDEX A abacus, 2 ADA Byron, 2 prograIllski
:2 aigorilam, 22-3 i ;\LGOL, 16 ALLOCATABLE,74 ARREA VISUALISER, ! 6 j l\Pl, 163 argument, 44, 47 :"'_S·C II 36; '152 assembler, 9, 16 analogni racLinari, 4, 9 auton1atsko gencrlranje progralna, 23 1
B BACKSPl\CE, 99 baiL 10,76, 193 bihlioteka funkcija, 152, 164 binarni sislem, J 2 bit. 10 BLOCK DATA, 38,77 blok naredbi, 24
C character, 40 C jezik) 162: 17E interfeis, 178 I FORTRAN, 177 c++ jcz.ik, i 77 -190 interi'ejs, 177, j 88 / FORTRAN, i77 Ckompajlcr, 177 case - viol SELECT CASE CALL ciklus, 32 brojcani, 32 us]ovni,32 CLOSE,99 COBOL,5 COMPILER, 17 COMPLEX, 40 COMMON,73-75
CONTINUE, 8 I CYCLE,72
o DATA, 37, 77 datotcka, 98 sekveflcljalna,98 direklna, 98 DEALLOCATE,74 DIM ENS rON, 73 DLL,36, 129,176 ciouble 53
E edilor,51 ckspertni si;;lcm, 2 i END,129 END 00,67 END DO lime], 69 END FILE, j 00 ENTRY, 87 EQUIV ALENCE, 78 exit, 72 F floal, form, lOI formal slobodni, 38 riksirani,3E FORMAT narcdba, 49 sinwksa,50 /,a realne brojeve, SQ, 52 La cijeIc brojcve, 49, 52 za double precision, 53 cbaractcr,54 FORTRAN programski jezik, 5, 8, 129 konzoina aplikacija, 35 standardna aplikacija, 35 QWIN aplikacija, 36, 156 graficke aplikacije, 36, 152 DLL aplikacija, 36, 177 FUNCTION programska jedinica, 84, 87 primjer,87
,0
'-0 "generator compileri, 20 GOTO, 26, 57 tormal, 52 grafika sa Fortranom, 152 :;rafika sa ARREA VISUALIZER, 161 ,grafika sa PLOT 88, 169 ,graficke rutine, 152
:n -
H hardver, 7 heksadecimalne vrijednosti, l3
IF naredba,61 struktura, 62 THEN ELSE, 63 THEN ELSE IF, 65 IMPLICIT, 37 INCLUDE, INCLUDE,37 indeksirane varijable, 72 INPUT,49 INQUIRE, 100 INTEGER, 39, 4l INTERFACE Visual Basic, 165, 191 C/C++, 178 interpreter, 17 izvorni program, 8
J jednodimenzionalni niz, 72 jezici assembler, 16 deklarativni, 18 funkcionalni, 19 masinski, 16 objektno orijentisani, 19 paralelni i vektorski, 19 prirodni, 21 proceduralni, 17 K
kompajler, 17
L
LOGICAL 40 iogicke naredbe,43 izrazi,43
logicki operatori, 43, 66 M main, 9 memorija RAM, 74 ROM, 74 MODULE,84 programska jedinica, 95 primjer, 95 sintaksa, 95 N nacrLna geometrija, 129 naredbe,37 kontroie taka, 32 grananje, 56 llsiovne,59 neuralne mreze, 21 nizovi,72
o objektl1o orijentirani jezici, 19 operativlli sistern, 8,9, 11 oktalni sistem, [3 OPEl luI operator, 42 opisivaci,49-56 OUTPUT,49
PLOT 88 pakel program, 168 spisak naredbi, 168 pozivanjc (llnkcija, 87 PRINT, 49, 97 PRIVATE. 129 PROGRAM progrmnska jedinica, 84 prirnjeri, 108-126, 156-161, 167168,172-174,182-187,194-197
Q QUICKWIN, 36, 156 R
READ,49 REAL,41 RETURN,77 REWIND, [01 rotacija, 133, 137, 142 S
SAVE,77 sekundarna rnernorij a, 10 sekvencijalna (vidi datoleka) sislemske funkcije, 44 slrukture, 22 SELECT CASE, 30, 65 sintaksa, 65 primjer, 30, 66 SUBROUTINE, 85 sintaksa, 91 primjer,91 T
P
PASCAL, 1,5 PARAMETER,37 parametri,37 petlje, 32, 67 brojcane, 32, 67 uslovne, 32, 67, 71 DO, 67, 71,81 DO WHILE, 67, 71 imenovane, 69 ugnijeZdene, 29, 70
lransformacije, 130, 141 translacija, 136, 141,161 U
ugnijezdene (vidi petlje), USE,37 uslovni prelazak, 61 V
VISUAL FORTRAN, 152, 193 VISUAL C++, 162, 178-190 VISUAL BASIC, 162,191-197
W
WHrLE, 67,71
LITERATURA
J.
IS. I.Endzel: "Praticeskoe uvedenie v maijinnuo grafiku", Izdateljstvo "Radio i svrzi", 1982.
L. J. Ribar, "Fortran Programming For Windows", Osborne McGraw-
Hill,1993. 2.
R. C. Desai: "Fortran Programming And Numerical Methods", Tata McGraw-Hill Publishing Company Limited New Delhi, 1995.
16. "IYJ1KROSOFT WINDOWS NT WORKSTll.TION", Mikrosoft Corporation, 1997. ] 7. "/vlikrosof't Visual C++ Professional Edition", Mikrosoft Corporation,
]997. 3.
W. E. Mayo, M. Cwiakala: "Programming With Fortran 90", Schaums Theory and problems-A Mc Graw-Hiil Publication, 1995.
4.
DluITAL Array Visu
5.
DIGITAL Visual Fortran, Prof",.ssional Edition, Digital Equipment Corporation, 1997.
6.
T. L. Young, M. L. Van Woert-Ph. D.: "PLOT 88", Plotworks, Inc., 1993.
18. B. Mesetovi6: "Visual Basic (1-4)", Skala programiranja, INFO (15-18), 1999. 19. J. Dvornik: "Ra:.:vo;' rnatemCltickih mode/a ", Grao.:yinar 42 (12, 507516), ]990. 20. E. Salihovi6: "Programiranje - Programskijez.ik C", INFO 13, 1999.
7.
B. Babet: "Borland C++", Mikrosoft Corporation, 1993.
8.
VISUAL BASIC, Mikrosoft Corporation, 1997.
9.
Z. Lagumdzija: "Kol11pjuteri i njihova primjena", Fabulas ABC, 1995.
10. D. K. Grozdanic: "Basic Compileri Fortran 77-lro", Gracievinska
knjiga, 1990. 11. N. M. Prljaca, M. 1. Glavic: "Programiranje uC programskomjez.iku", Fakultet elektrotehnike u Tuzli, 1999.
12. D. Majkic: "Kompjuterska grajlka", Narodna tehnika Vojvodine, 1987. 13. B. Z. Sergeevna: "Fortran 77 £S", Izdateljstvo "Finansije i statistika", 1989,
14. V. Vuietic, 1984.
C. Ljubovic:
"Programiranje 'Fortran' ", Svjet10st Sarajevo,
21. Hewlett-Packard: "/1,1echanical Engineering", Users' Library Solutions HP-41C, 1980. 22. A. Jezernik, B. Golob," FORTRAN 90 in racunalniki pri inzenirskem delu", 1998.
23. L. Second Edition, Macmillan
and Scientist", 1988.
Na osnovu misljenja Federalnog Ministarstva obrazovanja, nauke, kulture i sporta broj: 04-15-1494/01 udzbenik «FORTRAN PROGRAMlRANJE ZA WINDOWS-e» autora doc. dr. Mevludina Avditaje proizvod iz clana 19. tacka 10. Zakona 0 porezu na promet proizvoda i usluga na ciji se pcomet ne plata porez na promet proizvoda.