108
Dr sci. Mevludin Avdi6 FORTRAN PROGRAMIRANJE ZA WINDOWSE 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 TeJ.1nicka priprema i DTP: doc. dr sci. Mevludin Avdi6 i mr sci. IZlldin BaJrektarevic Stampa: DOO "COPY GRAF" - Tuzla Tiraz: 250 primjeraka ! I I I CIP - Katalogizaeija U pllblikaeiji Naeionalna i univerzitetska biblioteka Bosne i Hercegovine, Sarajevo 004 . 432 .2 FORTRAN ( 075 . 8 ) 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 UNIVERZITET U TUZLI RUDARSKO-GEOLOSKO-GRADEVINSKI F AKULTET Mevludin S. Avdic TUZLA, 2001.

FORTRAN - Programiranje Za Windowse

Embed Size (px)

Citation preview

Page 1: FORTRAN - Programiranje Za Windowse

Dr sci. Mevludin Avdi6

FORTRAN PROGRAMIRANJE ZA WINDOWSE

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

TeJ.1nicka priprema i DTP: doc. dr sci. Mevludin Avdi6 i mr sci. IZlldin BaJrektarevic

Stampa: DOO "COPY GRAF" - Tuzla

Tiraz: 250 primjeraka

! --~------------.------------'~--.

I I I

CIP - Katalogizaeija U pllblikaeiji Naeionalna i univerzitetska biblioteka Bosne i Hercegovine, Sarajevo

004 . 432 .2 FORTRAN ( 075 . 8 ) 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

UNIVERZITET U TUZLI RUDARSKO-GEOLOSKO-GRADEVINSKI F AKULTET

Mevludin S. Avdic

TUZLA, 2001.

Page 2: FORTRAN - Programiranje Za Windowse

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.

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

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.

Page 3: FORTRAN - Programiranje Za Windowse

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 PRA VILA 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 4.4 OPISIV ACI ZA STRINGOVE I KONTROLU ................. 55 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 6.2 USLOVNE PETLJE ........ ......... ............................... 71

Page 4: FORTRAN - Programiranje Za Windowse

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 GLA VNI 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 RA V 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

Page 5: FORTRAN - Programiranje Za Windowse
Page 6: FORTRAN - Programiranje Za Windowse

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.

Page 7: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windowse

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<ivu prvog mehanickog racllnara 10garitmara (siber)

1663. ,/ Joseph Jacguard je 1881. god. konstruisao ureaaj za automatsku kontrolu

stanja. Charies Babbaae se smatra prvim covjekom koji je predlozio koncept modernog kom~utera. Godine 1833. predao je planove "analiticke masine". To je me~hanicki ureaaj na pami pogon koji bi prim~o ul~vz ~ :idu bus.~n~ kartice, automatski izvfsavao proizvoljnu sekvencLl antmetlckill ll1strukcIJa I

davao rezultat u vidu busene kartice, iii u stampanom obliku. Babbageov kompjuterski sistem sastojao se od ulazno-izlazne jedinice, proc.esora, kontrolne i memorijske jedinice. Tako se Babbage smatra ocem kompJutera. Proaram za ovu masinu pravila je Augusta Ada Byron, keerka poznatog

C k' pjesnika i ona se smatra prvim svjetskirnkompjuters .im programerom. Godine 1890. pojavi1a se tabulaciona "tabulating" masma ~ermana Ho11eritha koji je upotrijebio busene katiice i elektricnu snagu za IzvrsenJe operacija. Ova kompanija je poslije prerasla u International Business Machiness (IBM) korporaciju. Howard Aiken sa Harward univerziteta proizveo je 1937. god. automatsku masinu (nazvana Hardware Mark I) upotrebom elektromagnetnih jezgara.

Prvi operativni elektronski digitalni racunar ENIAC (Electronic Numerical Integrator And Calculator) razvili su Mauchly i Eckert sa Pensilvanijskog univerziteta 1946. Racunar je bio tezak ?~O .?O .tona.i ~~~o preko 18.000 vakuumskih cijevi. Koristen je za proracun art~~erlJSklh balIstlcklh tabela za americku armiju. Proracun putanje, za koj i je vje~~oj osobi trebalo 10, sati vrsio je za 15 sekundi. Ipak, EINAC nije bio kompjuler sa memorisanim

programom. . . Prvi kompjuter sa memorisanim programom eil) je EDSAC kOJe~ Je

razvio M.V.Vilks sa Kembridzskog univerziteta Ll Engleskoj 1944. godme, skupa sa prvim americkim kompjuterom sa memorisanim programo~ EDVAC-om (Electronic Diskrete Variable Automatic Computer), kOJl je

2

Uvod u racunare

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

Page 8: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windowse

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.

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 super­kompjutera. Ipak, najmoeniji mikrokompjuteri su jaci i od nekih mini-

4

Uvod u racunare

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. Posjeduju jedan iii vise veoma moenih procesora (32 - bitnih iii jacih ) koji rade na veeim brzinama (reda desetina miliona instrukcija u sekundi).

2. Imaju veci kapacitet prinlarne 11lelTIOrije (reda nekoliko 111egabajta) i veiiki kapacitet medija sekundarne memorije (nekoliko desetina gigabajta memorije u magnetnom disku).

3. 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<ilizovane kompjutere (Specialized computers) koji treba da posluze samo u jednoj vrsti primjena. Takvi su kompjuteri obicno bolje graaeni, manj i i kompaktnij i, a, s druge strane, efikasniji u okviru predviaene namjene. Dobar primjer moze biti kompjuter koji regulise paljenje u automobilskim motorima, kompjuter koji upravlja

5

Page 9: FORTRAN - Programiranje Za Windowse

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.

3. SASTAVNI DIJELOVI RAC:UNARA

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

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.

, , , , , , , , , , , , , ,----------------- -----

DATA SIGNAL!

KONTROLNI SIGNAL!

GLAVNA MEMORJJSKA

JEDINICA

KONTROLNA JEDINICA

ARITMETICKA LOGICKA

JEDINICA (ALU)

, , , , , , , , ,

- ______ - __ -----------.1

---- ------ --- --~- ---, ,

CPU [ KON~OLA

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

Page 10: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje Z(l windowse

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. 'v' v •

,/ 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.

APLIKACIONI SOFTVER - programi koji daju direktive za obradu pojedinacnog posla iii aplikacije kompj:ltera .. Aplikacioni softve~, iy 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:

,/ 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

Uvod 1I racunare

,/ 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 super-

kompjutere, ,/ Po vrsti - na digitalne i analogne kompjutere i hibridne ,/ Po namjeni - na opstenamjenske i specijalizovane

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

Page 11: FORTRAN - Programiranje Za Windowse

FORTRAN programirallje za windowse

./ 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).

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

DRUGI SISTEl'vlSKI KONTROLERJ

I UREflA.Jl

SJSTEMSKi BUS (clat~ bus - address bus - control bus)

t 1 1 t t I 'if

Tastatura Video Paraielni Flopi interfejs clisplej inrerfe:js disk kontroler kontroler kontroler kontroler

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

Uvod u racunare

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

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

Page 12: FORTRAN - Programiranje Za Windowse

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.

Npr. Broj 357,06

3· 102 + 5 . 101 + 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.

Prirnjer: Binarni znaci nazivaju se BIT (BINARY DIGIT) 0=0 =0 2°=1 =1 21+°=2 =IO

12

i+21=3 =II 4=100 5=101 6=IIO

Uvod u racunare

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:

423(8) =4.82

+2.81

+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 no 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) = 3.162

+ 14 .161

+ 12 .160 = 1004(10)

13

Page 13: FORTRAN - Programiranje Za Windowse

FORTRAN programirwrje za windowse ___________ u =-_vo,-,d-,-,,-u-,--r=ac:..:~l=tn:..:.a=r=e __________ _

Tabela !.1 I 33 00100001 41 21 90 OlOllDlO 132 SA " 34 00100010 42 22 127 01111111 177 7F

# 35 00 I OO() II 43 23 123 01111011 173 7B

A 65 01000001 101 41 193 I I OO()OO I 301 CI $ I 36 I

00100100 44 24 91 01011011 133 5B

% 37 00100101 45 25 108 01101100 154 6C I

& 38 00100110 46 26 80 01010000 120 50 B 66 01000010 102 42 194 110000 I 0 302

CH C 67 0100001 I 103 43 195 I 10000 I I 303 C3 D 68 01000100 104 44 196 I 1000 I 00 I 304 C4 39 00100111 47 27 125 01111101 175 7D

( 40 00101000 50 28 77 01001101 lIS 4D

) 41 00101001 51 29 93 01011101 135 5D

E 69 0100010] 105 45 197 11000 I 0 I 305 C5 F 70 OlOOOllO 106 46 198 11000110 306 C6 G 71 01000 I I I 107 47 199 I 100 II I 307 C7 H 72 01001000 110 48 200 I 100 I 000 310 C8

42 00101010 52 2A 92 01011100 134 5C

+ 43 00101011 53 2B 78 01001110 116 4E

comma, 44 00101100 54 2C 107 OliO 10 11 153 6B

minus - 45 0010110 I 55 2D 96 01100000 140 60

T i 73 01001001 I I I 49 201 1100 I 00 I 311 C9 J 74 0100.1010 102 4A 209 11010001 321 I DI

K 75 0100101 I 113 4B 210 11010010 322 D2 46 00101110 56 2E 75 01001011 113 4B

/ 47 00101111 57 2F 97 01100001 141 61

58 OOIIIOID 72 3A 122 OllllOlO 172 7A

59 00111D11 73 3B 94 01011110 136 5E

< 60 00111100 74 3C 76 o 1 00 II 00 114 4C

- 61 00111 101 75 3D 126 OIl I I 110 176 7E

> 62 0011 I I 10 76 3E 110 01101 I 10 156 6E

I L 76 01001100 114 4C 21 I IIOIOOll 323 D3 ! M 77 01001101 lIS 4D 212 11010100 324 D4

N 78 0100 I I 10 116 4E 213 11010101 325 D5

0 79 OIOOlIII 117 4F 214 IIOlOllO 326 D6 P 80 I 01010000 118 50 215 I 10 101 II 327 D7

-~

Q 81 01010001 121 51 216 11011000 330 I D8 :

R 82 01010010 122 52 217 110 II 001 331 D9 S 83 010 lOO I 0 123 53 226 I 101 1000 342 E2 '? 63 00 I I I I I I 77 3F I I I 01101 I I I 157 6F

@ 64 01000000 IDO 40 124 01111100 174 7C

[ 91 01011011 133 5B - ------------ -T 84 0101001 I 124 54 227 II lOOOI J 343 I E3 U , 85 OIOIOIOI 125 55 228 11 100l 00 344 E4

[ \ 92 01011100 134 5C 224 I 11100000 340 EO I V 86 01010! 10 126 I 56 229 1] lOO 10 I 345 65

W 87 01010111 127 57 230 11100110 I 346 E6 I 1 93 01011101 135 5D - ------------- - -

X 88 01011000 130 58 231 I I I 100 III 347 E7 1\ 94 01011110 136 5E - ------------- - -

- 95 0101111 1 137 SF 109 01101101 155 6D Y 89 01011001 13 I I 59 232 I I 101000 350 Ell

Z 90 01011010 132 5A 233 11101001 351 E9 - 96 o I 1 00000 140 60 - ------------- - -

0 48 00110000 60 30 240 11110000 360 FO a 97 01100001 141 61 129 10000001 201 81

I 49 0011000 I 61 31 241 I II 10001 361 FI b 98 o 11000 10 142 62 130 10000010 202 82

2 50 00110010 62 32 242 111]0010 362 F2 c 99 ! 01100011 143 63 131 10000011 203 83

3 51 00110011 63 33 243 1]110011 363 F3 I d 100 01100100 144 64 132 10000100 204 84

4 52 00110100 64 34 244 I III IOIOO 364 F4 e 101 01100101 145 65 133 10000101 205 85

5 53 00110IOI 65 35 245 11110101 365 F5 f i 102 01100110 146 66 134 10000110 206 86 'J 103 01100111 147 67 135 100001li 207 87 b I 6 54 00110110 66 36 246 I I I 101 10 366 F6

7 55 00110 III 67 37 247 J U 101! I 367 F7 h 104 01lO1000 150 68 I 136 10001000 I 210 88

8 56 00111000 70 38 248 11111000 370 F8 i 105 01101001 151 69 137 10001001 211 89

9 57 00111001 71 39 250 11111001 371 F9 J 106 01101010 152 6A I 145 10010001 221 91

Blank 32 00100000 40 20 64 01000000 100 40 I k 107 01101011 153 6B 146 10010010 222 92

14 15

Page 14: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windowse

I 108 01101100 154 6C 147 10010011 223 93

m 109 o I I () I 101 155 6D I ]48 I 00 I 0 100 224 94

n I 10 01101110 156 6E 149 10010101 225 95

0 III 01101111 157 6F 150 100 I 0 II 0 226 96

P 112 01110000 160 70 151 10010111 I 227 97

q 113 01110001 161 71 152 10011000 230 98

r 114 01110010 162 72 153 100] 1001 231 99

s lIS 01110011 163 73 162 10100010 242 A2

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 i DO

- 126 01111110 176 7E - ------------ - -

DEL 127 01111111 177 7F - ------------- - -

¢ ------ ---------- ----- ------- 74 01001010 112 4A

/ ------- ---------- I ----- ------- 95 01011111 137 5F

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

Uvod u racunare ---------------------------

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

JOlO

IOJJ

Operand

11001

11010

(Zamijeni tekuGu vrijednost u akumulatoru za vrijednosti Y

na lokaciji flOOI)

(Dodaj vrzjednost Z na lokaciji I IOlO na vrijednost Z it akumulatoru)

17

Page 15: FORTRAN - Programiranje Za Windowse

FORTRAN priJRramimnje za windowse

1100

Asemblerski jezik

Kod operanda

LD

AD

ST

Jezik visokog nivoa

Fortran

Cohol

Jezik 4. generacije

11011

Operand

X

y

z

X=Y+Z

(Pohrani vrijednost Xu akumulatoru IW lokaciju lIOll )

(Na[Jllni X u akumulutor)

(Dociaj YakullwLatoru)

(Pohrani re::.ultat u Z)

COMPUTE X=Y+Z

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

__________________________ ~[_~)_C_)c_l_lI_r_(_lc_·i~Il~/[~lr~e __________________________ _

Funkcionalni jezici

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

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. - 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

Page 16: FORTRAN - Programiranje Za Windowse

FORTRAN progrc/illiranje ~([ windmvse

Automatsko generiranje programa

Godine 1978. izraden je program namijenjen generiranjll FORTRAN­skog 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

Page 17: FORTRAN - Programiranje Za Windowse

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)<e greske). Uklanjanje sintaksnih gl:esaka iz programa je obicno jednostavno jer yam sam raclInar claje clijagnosticku poruku o rnjestu i vrsti greske.

Logicke greske se mnogo teze otklanjaju. Nakoll svega kompjuter ce jeclnostavno izvrsiti vase instrukcije. Kompjuter ne 11l0ze znati odgovor koji ce biti i zato ne trebate ocekivati njegovu pomoc u pronalaskll gresaka. Otklanjanje greSaka je umjetnost i mora se razviti tehnika ispravljanja problema.

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

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.

23

Page 18: FORTRAN - Programiranje Za Windowse

24

FORTRAN programiranje za winc/owse

Koraci razvoja programa:

logick~ greskc

sinlaksne greske

f--I READ *,X,Y Y I IFeX.LE.Y) THEN

~ \I I ~ EL~~X*Y '--y' ~ '--y' Z=X/Y

~ END IF M 1"'N"'2

a) programski konccpt b) razvoj algorilm<-t c) programsko kodiranje d) isprJ.vljanj.; gresaka

BLOK

sekvencionalnc I narcdbc ~

L grananje

petJje

FUNKCIJA

bczuslovni prclaz

ulaz iii izlaz

l)roces

uslovni preiaz

uslovna petlia

SIika 1 A Osnovni blokovi izgradnje programa

SIMBOL

Uvod u rae un are

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 fo =-

2 d

r =--t , 2

w=y· V

SemLl toka

w=Llv

Primjer 1_2:

A igoritwn

Racunanje vanjskog poluprecnika 1'0

Racunanje unutrasnjeg poluprecnika rj

Racunanje zapremine kugle V

Racunanje teZine kugle w

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:

25

Page 19: FORTRAN - Programiranje Za Windowse

d ro =-

2 d

r· = - - t I 2

FORTRAN prograllliral1je za windowse

V=~'TC.(r~ -r/) 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.

26

Serna taka

"0 == d/2 rj==d/2-t

v == 4rr13(r/-r/)

w == Liv

Ai gorita/11

Unosenje precnika d i podataka t i L1

Racunanje unutrasnjeg i vanjskog poillprecnika ro i rj Racunanje zapremine kllgle v Racunanje tezine kugle w

Stampanje podataka v i w

_____________ .-:=Uvod u racunare

Pril17jerl_3:

Prepisati prethodne primjere, s tim cia se racuna tezina kugle za razlicite ulazne podatke.

Sema toka

Read d, t, Li

~'Ii==d/2 ri == d/2 - t

v == 4rr13(rr/-r/)

w == Liv

Operacije grananja

Aigoritam

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

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.

27

Page 20: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windowse Uvod u racunarc

Pril7ljerl_ 4: Napraviti algoritam i semu toka za citanje elva broja i odreouje da Ii su jeelnaki.

Sema toka

Stop

Primjerl _5:

Algoritam

Unesi vrijednosti xi y

x jednako y ?

Ako j'iste pisi 'jednako' Ako riije pisi 'nije jednako'

Kraj grananja

Napraviti algoritam i semu toka za odrec1ivanje cia Ii taci<a (x,y) lezi unutar kruga radijusa r . Koristi uslov cia ako je (Xl + /) 1/2 < r, tacia je tacka unutar kruga. Ako tacka lezi izvan kruga stampati u izlazu poruku i ucialjenost z oci tacke cio centra kruga.

28

----------------------------------------

Sema toka Alr;oritam

(X2+./)'12 ne < r"

poc!rLlcja"

Ugnijeidene operaci:je grananja

Ucitaj r, x, y

Da lije (X2 + /)112 < r? Ako jeste, stampaj 'unutra' Racunaj z = (X2 + /)112

Stampaj z Ako nije, stampaj 'van'

Kraj 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.

29

Page 21: FORTRAN - Programiranje Za Windowse

FORTRAN programironje za windowse ----------------------~

,~ema toka

da II < () ? nc

Struktm'a odabira slucaja (Select Case)

Alr;oritam

Ucitaj n

Da Ii je n<O ? Ako jeste, n je negativan i 15isi !!negativan lT

Ako nije, da Ii je n = 0 Ako jeste, n je nula i pisi "nub" Ako nije, n je pozitivan i pisi "pozitivan" Kraj pelljc Kraj petlje

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.

30

[!vod u racunare

CV

CV=I CV=2 CV=3 CV=4

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

x

Algoritam

Ucitaj vrijeclnosti x, y, z

Oclaberi sIucaj (na osnovu

a = y*z a=31z

vrijednosti x) kadaje x = 1 kaclaje x =3 kadaje x = 5 a = 5*ylz

Kraj odabira slucaja

Stampaj vrijednost a

31

Page 22: FORTRAN - Programiranje Za Windowse

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

start = I stop = 100

step = I

Print LCY, LCy2

ALRoritam

Petlja (n, pocetna vrijeclnost = I; kraj = 100; korak = 1

Stampaj vrijednost LCV I i LCV2

Kraj petlje

I LCY - brojac ponavljanja (li ovom siucaju je to varijabla n) 32

Page 23: FORTRAN - Programiranje Za Windowse

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:

Page 24: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za wit/dowse

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.

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

FORTRAN program.skijezik w windowse

Tabela 2.1 Karakter Opis Karakter Opis

prazno mjesto dvotacka = jednako I usklicnik

+ plus " dupli apostrof - mlllUS & znak pridruzivanja

mnozenje-zvjezdica % I postotak / podijeljeno-kroz tacka-zarez ( lijeva zagrada < manje od ) dcsna zagrada > vece od

z.arez ) znak pitanja-upitnik decimalna tacka $ znak dolara

aposlrof

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.

I

Tabela? ? _.-OPTIONS naredbe

PROGRAM, FUNCTION, SUBROUTINE, MODULE iii BLOCK DATA naredba

USE naredbe IMPLICIT NONE naredbe

Linije P ARI\METER IMPLICIT komentara,

NAMEUST, naredbe naredbe

INCLUDE FORMATi

interfejs blokovi, tipovi Naredbe i

ENTRY PARAMETERi deklaracionih naredbi,

direktive naredbe DATA naredbe funkcijskih

naredbe potprograma i specificirane naredbe

DATA naredbe Izvrsne 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

Page 25: FORTRAN - Programiranje 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.

Primjer: Napisati FORTRAN program u slobodnom formatu koji korisniku zeli dobrodoslicu na kursu Fortrana.

PROGRAM DOBRODOSLICE PROGRAM ZDRA VO

CHARACTER *20 1ME PRINT *,' UNES1 POD APOSTROFOM SVOJE 1ME I PREZ1ME - DO 20 &

I Ovo se odnosi na FORTRAN 90 ( ) 38

FORTRAN proRrarnskijezik za windowse

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

Integer (intidzer) vrijednosti su cijeli brojevi. Rang vrijednosti, koji moze biti, zavisan je od tipa racllnara. Tipicno podrucje je od _T12_1 do + 232_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

Page 26: FORTRAN - Programiranje Za Windowse

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

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:

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.

input: a,b,c, (stranice trougla) postupak:

40

FORTRAN progrwnskijezik za windowse ---------------------------

a+b+c s-

2

P=s· ~(s -a)' (s - b)· (s -c)

listing: 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:

41

Page 27: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windowse

Primjer: Tabela') "\ -.-

Opis naredbi ReZl.lltat RE/\L ::X,Y,Z Deklarisanje X, Y i Z kao relane varijeble REAL :: LENGTH Definisanje LENGTH kao realne variiable INTEGER :: COUNT Definisanje COUNT kao intidzer varijable COMPLEX :: PHASE Definisanje PHASE kao kompleksne varijable LOGICAL :: YESNO Definisanje YESNO kao logicke varijable DOUBLE PRECJSlON ::X 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

Logicke operacije Sl! samo za logicke promjenljive aritmeticke i poredbene operacije za ostale.

konstante, a

U tabeli 2.4 datje prikaz aritmetickih operacija i hijerarhijski redoslijed rjesavanja.

Tabela') d. -.. Prioritet Algebarski simbol Fortran simbol Opis

] Ab ** Eksponent 2 X * Mnozenje 2 / . Dijeljenje 3 + + Sabiranje 3 - - 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

FORTRAN programski jezik za windowse

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:

Tabela'25 Operator Opis Primjer RezuHat

.LT. Less than (manje od)( <) 1<2 Istina (True)

.LE. Less than or equal to ( manje iii

3.14 <=100 Istina (True) jednako od )«)

.ECl. equal to ( jednako) (=) 0-10 Laz (False)

.NE. Not equal to (nije jednako) (;to) I 0/=]0 Istina (True) I

.CiT. Great than ( vece od) (» 1>2 Laz (False)

.GE. Great than or equal to (vece iIi

4>=3 Isti na (True) jednako)(»

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 Opis Broj argumenata

.NOT. Negacija 1 argument

.AND. Oba simultano 2 argumenta .OR. IIi 2 argumenta

43

Page 28: FORTRAN - Programiranje Za Windowse

I

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 1I inetervalu: 1.0 < x < 10.

READ"', X IF(l.O .LTX .AND.X. LT.IO.O) PRINT", X,' izmedju vrijednosti 1.0 i 10.0'

Kao 5to se moze vicljeti, matematicki izraz je: 1.0<X< I 0.0.

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.

Tabela 2 7 Naziv Opis Argument Rezultat Primjer

I Cijeli eijeli ·1 apsolutna Rcalni realni

J=ABS{ 51)

I I ABS(x) vrijednost Double Double X= ABS(-173)

I Pree. Pree. Z=ABS(-O.lD04)

\

Realni I realni (rad) X= ACOS(0.5)

ACOS(x) arkuskosinus Double Double Z= ACOS(O.5DO)

Pree. Pree. (rad) Realni realni (rad)

X= ASIN:O.S) ASIN(x) arkusinus Double Double

Z= ASIN:O.5DO) Pree. Pree. (rad)

Realni realni (rad) X=ATAN:.O.S)

ATAN arkustangens Double Double Z= ATAN:.O.SDO)

Pree. Pree. (rad) Realni realni (rael)

X= COS: 1.0475) COS(x) kosinus Double Double

Z= COS: 1.0475DO) Pree. Pree. (rad)

COSH(x) kosinus

Realni realni (rad) y = COSg2.00) hiperbolno

promjena u Cijeli Double Z= DELE3) DELE(x) Double Pree. Realni Pree. Z= DBLEO.O)

44

FORTRAN progrwnskijezik::(1 windowse ----------------------~

I

I

I ! I I I

I

DPROD(x,y) dupla prceiznosl f proizvoda x i y

EXP(x) eksponeneijal

INT(x) skracivanje u

ejelobrojno

FLOAT(x) promjena u

real Jl()

prirodni LOG(x)

logaritam I logaritam baze

LOGIO(x) I 10

elavanje najvece MAX(.) vrijednosli

elavanje MIN( ... ) najmanje

vrijcelnosli

MOD(i,j) razlika iij

zaokruzivanje I NINT(x) na najblizu

eijelu vrijecinost

SIN(x) sinus

SINH(x) sinus hiperbolno I

SQRT(x) kvadratn i korjcn

TAN(x) tangens

TANH(x) tangens

hiperboino

Realni

Realni D. Prce.

Realni D. Pree.

Cijeli D. Pree.

Realni I D. Pree. I Realni I

D. Pree.

Cijeli Realni

D. Pree.

Cijeli Realni

D. Pree.

Cijeli Rcalni Double

I

Pree. Realni (rad)

Realni

Realni D. Pree. Realni (rad)

D.Pree.

Realni

realni

realni D. Pree.

eijeli eijeli

realni realni

realni D. Pree.

realni D. Pree.

eijeli realni

D. Pree.

cijeli realni

D. Pree.

cijeli

eijeli cIJclI

realni

realni

realni D. Pree.

realni D. Pree.

realni

A=DPROD(2.0,3'(»

X=EXP(I.O) Z=EXP( I .ODO)

J=INT(3.99999) J= INT(O.3999DO I)

X=FLOAT(4) X=FLOAT(OADO I)

I X=LOG(2.17828) Z=LOG(O.2718D01)

X=LOG I O( 1 (0) Z=LOG I (XO. J DO)

I=MAX(S, I ,6,2) X=MAX(O.2,5.6) Z= MAX(l DO,3D3)

I=MIN(S, I ,6,-2) X=MIN(0.2,S.6) Z=MIN(IDO,3D3)

J=MOD(29,4)

J=NINT(3.99) I J-NINT(06DO I) - T

X=SIN(O.5202)

Y~SINH(2.0)

X=SQRT(17.6) Z=SQRT(0.17D2)

X=TAN(O.78S) Z=TAN(O.78SDO)

Y=TANH(2.0)

Kada se koriste trigonornetrijske funkcije, mora se vocliti racuna da se uglovi unose u radijanima, a ne u stepenima.

Prirnjer:

I I

Ovaj program Llcitava clvije tacke sa koorclinatama (XI, YI) (X2' Y2) a zatim izracunava uclaljenost izrneau njih formulorn:

4S

Page 29: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windowse

UDALJENOST IZMEDJU DVIJE TACKE (XI,YI) I (X2,Y2)

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 ;:;~'zitivna velicina. Ukoliko ne znamo koja ce to vrijednost biti, moramo napraviti ;Z!Tljenu u programu.

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

FORTRAN programski jezik za windowse ----------------------~

Tabela') 8 -. Naziv Opis Argument Rezult. Primjer

Daje imaginarni Kompleksni I

I AIMAG(Z) dio kompleks. realni I X=AIMAG«3.0,4.0»

broja I AINT(X,K) Skracivanje na

Realni I realni I X=AINT(3.9999)

cio broj X=AINT(3.999_4)

Zaokruzivanje I X=AN INT(3.999) ANINT(X,K) na najblizi cio Realni realni X=ANINT(3.999_ 4) broj

I Upucivanje na

I KIND(X) KIND rijednost Bilo koji

I cijeli I=K1ND(1.O_ 4)

zaX

LEN(C) Upucuje na Karakter cijeli I=LEN('abcd')

duzinu karaktera

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 I Arg. Rezult. Primjcr

DOT_PTWDUCT Realni I realni Proizvod

cijeli A=DOT (X.Y) XiV Cijeli i

Komp!. komp!.

MnozenJe Realni realni

MATMUL(X,Y) Cijeli cijeli A=MATMULeX,Y) matrica

Komp!. komp!.

Lociranje pozicije Realni realni

MAXLOceX) maksimalne Cijeli cUeli I=MAXLOceX) vrijednosti u Komp!. komp!.

matrici

Pronalazenje Realni realni

MAXVAL(X) najvece

Cijeli cijeli A=MAXV AL(X) vrijednosti u

Kompl. kompl. matrici

47

I

Page 30: FORTRAN - Programiranje Za Windowse

I

I

FORTRAN progral7liranje z,a wine/Ollise

Lociranjc pozicije

?vlINLOC(X) minimalne i Cijeli I cijeli

I I=MINLOC(X)

vrijednosti u Kompl. , kompl. matrici

Pronalazenje Realni realni

MINYAL(X) najmanje

Cijeli cijeli A=MINY AL(X) vrijedllosti u

matrici Kompl. komp/. I

Suma Rcalni realni SUM(X) elcmenata Cijcli cijeli A=SUM(X)

matrice Kompl. kompl.

Transpoi1Ov. Realni realni

TRANSPOSE(X) Cijeli cijeli Y=TRANSPOSE(X) malricc

Kompl. kompl.

Primjer: 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.

x = DOT ]RODUCT(A,B) PRI"TT* X.

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 Rezult. Primjer

RANDOM~NUMBER(X) Daje slucajni

realni CALL broj RANDOM~NUMBER(X)

Postavlja RANDOM~SEED generator

CALL RANDOM~SEED slucajnog broja

48

I

FORTRAN progrwlIskijezik::.(/ windmvse ----------------------~

4. NARED13E ULAZA I IZLAZAINPUT-OUTPUT

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:

READ *, varijablal, varijabla2, ..

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.

Pril17jer: 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.

Primjer:

READ *, x, y, z PRINT *, x, y, z

x = 14.3 Y = -27.943 z = 0.0034567

input:

14.3,-27.943,0.0034567

output:

14.3 -27.943 0.0034567 123456789012345678901234567890123456789012345678901234567890

12345 6

49

Page 31: FORTRAN - Programiranje 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

U izlazu bi smo dobili:

output:

X=2.40()()OO X**2=5 .760000 J234567890J234567890J2345678901234567890J2345678901234567890

J 2 345 6

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.

READ br, varijablal, varijabla2, ... br FORMAT(lista instrukcija)

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.

50

FORTRAN pror;ramskijezik za windowse

../ 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:

'0' 'I' '+'

jeclan vi:ortikalni pomjeraj dllpli vertikalni prostor nova strana pisanje na trenutnoj liniji

OpisivaCi editora

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

F realni brojevi

E realni, eksponencijaini

D dllpla preciznost

0 realni, opsti

Slovni podaci:

A slovne varij able A w

slovni stringovi 'xx'

Iw

Fw.d

Ew.d Dw.d

Ow.d

A20

12

F6.2

E6.2 D20.8

08.2

'primjer'

Slijedeci niz format-specifikacija kontrolise fizicki polozaj, kao sto Sll razmaci, ta~ulatori, poravnanja itd .

51

Page 32: FORTRAN - Programiranje Za Windowse

FORTRAN progrwnimnje ;:a windowse

Rastojanja X preskoci n mjesta nX T predi na kolonu n Tn TR predi clesno za n mjesta TRn TL preoi lijevo za 11 mjesta TLn / nova linija I

Ponovi r( ) Ponovi specifikacije u ( ) r( )

4.1 OPISIY ACI ZA ClJELE VRIJEDNOSTI

5X T7 TR3 TU / 2(f4.1 )

Kacla stampamo cijele brojeve, moramo vocliti racllna 0 tome cia ostavimo c1ovoljno prostora za stampanje te vrijeclnosti.

Sintaksa: Iw

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

FORTRAN progro/11skijez.ik W windowse

Primier:

Udalj == 12.345 Vrij == 0.0034 Brzi == udalj/vrij PRINT 5, udalj, vrij, brzi

5 FORMATC', 8.3, 8.4, FIO.I)

(brzi= 12.345/0.00345=3578.2608)

output:

F7.2 F9.6 FIO.I

12.35 0003450 3578.3 J 234567890 J 234567890 J 2345678W) J 234567890 J 23456 7890 f 23456 7890

J 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 6

Za stampanje brojeya sa Double prectSlon koristi se slican oblik 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

53'

Page 33: FORTRAN - Programiranje Za Windowse

uz uslov da je: w?:d+8

FORTRAN programiranje za windowse

Isti primjer uz izmjenu:

5 FORMAT(",D12.4,Dl1.3,DIO.I)

output:

D= 12A D=I1.3 DIO.l

0.123SD+002 O.34SD-002 OAD+004 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: Opisivac: Output: 0.010000 --0.1 OOE-O 1 0.100000 --0.100----1.000000 GII.3 ---1.00----10.00000 ---10.()----100.0000 ---100.----1000.000 --0.100E+04

(oznaka. - =prazno mJesto)

4.3 OPlSIVACI ZA KARAKTER-VRIJEDNOSTI

Kao i kod cjelobrojnih vrijednosti, i kod karakter-vrijednosti jedino vodimo racuna 0 ukupnom broju mjesta. Oznakaje:

Aw

Aje format karakter-vrijednosti w je ukupna sirina rezervisana za karakter.

Pril1ljer:

54

CHARACTER:: IME*20 IME ==' DAMIR MUSTAFIC'

10

FORTRAN programslcijezilc za windowse

PRINT 10, 1MB FORMAT (' ',A 20)

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.

4.4 OPISIV ACt ZA STRINGOVE I KONTROLU

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 Y=-11.381 PRINT 10, X,Y,X

10 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

Postaji nekoliko format specifikacija koje su korisne za kreiranje izgleda izlaza.

X / T TR TL

IIi

nX / Tn TRn TLn

3X I 17 TR7 TL3

preskace tri 111 j 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

Formatiranje ulaza i izlaza mozemo uraditi i na slijedeci nacin:

PRINT"(' ',13,2(F7.2, I X))", !, A, B

55

Page 34: FORTRAN - Programiranje Za Windowse

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.

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

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<l.

Broj Iinije je pozitivni cio broj smjesten u kolonama od J do 6 (fiksirani format) iIi na pocetku linije u koju se mora preci. BezusIovni pre!azak se koristi u elva slucaja: ./ bela je potrebno preskociti niz nareelbi ./ kada je potrebno ponoviti instrukcije Primjer: Koristenje naredbe GOTO za preskakanje naredne instrukcije (ili niza instrukcija):

x

Primjer:

30 40

X=X+I GOTO 40 X=X-J PRINT", X

Koristenje nareelbe GOTO za pravljenje petlje.

varijabla I predstavlja brojac I = I

20 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

Page 35: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje 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.

lzr;.lGunati vrijednost funkcije F(x) clate izrazom

F(x) = 4.0(xI + 2X2 + 3x} + 4X4 + 2xs + 3X6 + x7 + 2xs + 3x~)

gdje je x k = -J1O - k , k = 1; ... ,9

Proracunska procedura je:

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 5. SUM = SUM + x preskoci na korak 8 6. SUM = SUM + 2x preskoci na korak 8 7. SUM = SUM + 3x idi na slijedeci korak 8. prirastaj I za I 9. ako je I> 3, I = I i slati na korak I 10. napisi rezultat II. kraj programa

SUM=O I I DO K=I,9 X=SQRTtFLOAT( IO-K» GOTO (11,24,13), I

II SUM=SUM+X

24

13 12

58

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

FORTRAN progrwnskijezik za windowse ----------------------~

Pridruieni prelazak3

Opsti oblikje: ASSIGNn TOi GOTO i, (111,n2," .,I1K)

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.

Primjer: Prethoclni primjer ce biti ponovljen ali sa primjenom ovog oblika prelaska uz isti algoritam:

SUM=O.O K=O

52 ASSIGN I I TO I 51 K=K+I

X=SQRHFLOAT( I O-K» GOTO I, (11,24,13)

II SUM=SUM+X ASSIGN 24 TO I GOTO 51

24 SUM=SUM+2.0*X ASSIGN 13 TO I (JOTO 51

13 SUM=SUM+3.0*X fF(KLT.9)GOTO 52 FX=4.0*SUM PRINT*, FX END

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 ista napomena kao I za izracunati prelazak 59

Page 36: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windowse

Relacioni operatori i logicki operatori Tabela 2.12

Operator °2is Primjer Rezultat

< manje od 1<2 iSlina manje iIi

3.14<= 10 istina <== jednako

== jcdnako 0-10 netacno /== nije jednako 0/== 10 istina

> vece od 1>2 netacno vece iii

4 >== 3 istina >== jednako

Logicki operatori

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.

~T()T

.,il,ND.

.OR:

negacija oba ispravna 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<X.AND X< I OJ) PRINT", X, 'jE IZMEDU I I 10'

Tabela') 13 -. Operator Opis Broj argumenta

.NOT Negacija I

.AND. oba istovremeno 2

.OR. iIi 2

Prioritet u izvrsenju naredbi imaju slijedece operacije

1. ( .... ) ( .... ) zagrade

2. Ab ** stepenovanje

3. x, / *,J mnozenje i dijeljenje

60

FORTRAN programskijezik za windowse

4. +, - +, - sabiranje i oduzimanje

5. ==,*,< == ==, 1==, < :S;,>, ::0: <==,>,>== operatori porec1enja

6. X .NOT. logicka negacija

7. 0 .AND. logicko I

8. EB .OR. logicko ILl

5.3 IF NAREDBA

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)

n2

61

Page 37: FORTRAN - Programiranje Za Windowse

FORTRAN programirunjc ~a windmvse

Primjer: IF'(XI-X2) 20,30,40

20 Y=XI+X2

30

40 50

COT050 Y=Xl*X2 COT050 Y=X1-X2 CONTINUE

Primjer: lzracunati vrijednost F(x) primjenom dodijeljenog preiaska ako je funkcija F(x) dana izrazorn:

16

F(x)=2·x+3

=8-3·x

x:<;;l

1<x<2

x~2

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

FORTRAN programskijezik za windowse ----------------------~

Svaka od ovih dviju blok naredbi moze da sadrZava jednu ali i stotine linija sa instrukcijama.

Primjer:

PROGRAM SPERA

PROCRAM ZA RACUNANJE ZAPREMINE I POVRSINE SFERE

29 READ *, D PI=3.14 V=PFD**3/6.0 A=PI*D**2 PRlNT *, D,V,A COTO 29 END

Primjer:

10 UNESI X PRINT *, 'UNESI VRIJEDNOST' READ",X AKO JE X NECATIVAN POGRESNO I IDI PONOVO NA UNOS PODAT AKA fP(X<O)THEN PRINT *, 'POGRESNO' COTO 10 ELSE PRINT*, 'VALIDAN PODATAK' END IF

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

Page 38: FORTRAN - Programiranje Za Windowse

FORTRAN progral1liranje za windowse

blok instrukcija_1 ELSE

IF(tescuslov_l) THEN biok instrukcija_2

ELSE IF (tesUJs!ov _N) THEN

blok instrukcija_N ELSE

blok instrukcija_N+ I END IF END IF

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:

64

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<= 1 0) 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

_________ F_O_R_T_'R_A~l'v_'_' prog ral1lski jez.ik z.a windowse

END IF END IF

Modifikovana upotreba ELSE IF konstrukcije

. 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

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

Page 39: FORTRAN - Programiranje Za Windowse

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

I CASE (1) iedna vrijednost CASE (I ,1,S) Esta vrijednost ] ,3, iIi S

CASE (1 :S) podrucje vrijeelnosti za izbor CASE (:0) poelrucje cijeiih brojeva ( do 0) C/\SE (1:) poelrucje cijelih brojeva ( od 1) CASE (1,10,100:) lista vrijech~osi I podrucje cijelih

brojeva Cod 100) CASE CA') karakter sa vrijednosti 'a' CASECA':'H') podnicje karaktera (od 'a' do 'h') CASE CBOB':'MAT') podrucje karaktera (od 'BOB' elo

'MAT') CASE (I ,'a') pogresno - nije isti tip ( INTEGER i

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*, 'SMRZA V 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

Page 40: FORTRAN - Programiranje 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.

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:

PROCRAM petlja_2 PRINT *, 'UNESI I, J, K' READ", I, J, K ' llnosc sc vrijcdnost za kontrolnu varijablu, ST ART,STOP

DOL=l, J, K PRINT", L END DO END

iSTEP

Primjer:

Funkciju 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

23 22 21

FORTRAN programskijezik za windowse

X=FLOAT(I) *0.1 D0221=1,2 Y=5.-J D023 K=3, 9, 2 Z=O.I'" FLOAT(K)

I FLOAT - pretvaranje fNTEGERu REAL

R= SQRT(X*X+ y*y +Z*Z) PRINT*,'X, Y, Z, R',X, Y, Z, R CONTINUE CONTINUE CONTINUE

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

Za primjenu petlj i sa brojacem vazllo je napomenuti slijedece: I) Kontrolni parametar je cijeli broj (INTEGER). 2) START, STOP, STEP vrijednosti llloraju biti logicki jasne. 3) Kontrolni parametar se ne moze mijenjati unutar petlje. 4) Petlja mora biti zatvorena. 5) Korak mora biti definisan. Ako nije automatski se uzima 1. 6) U petlju nema uskakanja.

Greske koje mogu nastati:

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

Page 41: FORTRAN - Programiranje Za Windowse

FORTRAN pror;ramiranje :::a windowse

Opsti oblik je: rime:] DO Naziv kontrolne varijabIe= START, STOP, [,STEP]

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:

-----

DONKVI= START, STOP, [,STEP]

Niz Instrukcija_l

DONKV2= START, STOP, [,STEP]

Niz instrukcija_2

END DO(petlja_2)

Niz instrukcija_3

END Do(petlja_l)

Primjer:

70

PRINT* ,'UNESI 1, J' READ"', I, J DONKVI=I, I

FORTRAN pror;ramskijezik Z(l windowse

DO NKV2=1, J PRINT *, NKVI+NKV2 END DO END DO

Za dvostruku petlju tabelarno je dato mijenjanje kontroinih parametara:

NKVI

2 2 2

NKV2 I 2 3

2 3

6.2 USLOVNE PETLJE

IZLAZ

2 3 2 4 6

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:

DO Wl:-IILE (usiov je ispllnjen)

bIok instrukcija

END DO

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

Page 42: FORTRAN - Programiranje Za Windowse

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

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," .,Xn. Ove udaljenoti illlaju zajednicko illle 'x', i mogu biti predstavljene sa vektorom iii nizom;

gdje XI, X2, X3,. ",Xn predstavljaju elemente niza xi illlaju nUlllericku vrijednost. Ako je x predstavljeno kao:

x = [1.5, 6.1,40.1,23.1, .... )

77

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, ... ,Xn 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 1-integer (cjelobrojna) varijabla i ima vrijednost 1,2,3, ... , zavisno od elementa kojeg precistavIja. Tme niza moze biti tipa REAL iii INTEGER na prillljer XC 1 0) iIi M(lO).

lndeks nizamoze biti INTEGER konstanta, varijabla iii izraz. Nekoliko primjera prikazuje primjenu indeksa u nizu:

Tabela 215 llioga u indeksu: lspravno: neispravno:

konSlanla X(l) XC!.) varijabla X(J) X(Z)

varijabla + konstanta X(J+I) X(J+i.l) konslanta * varijabla X(2*J) X(2*J)

konst. " varij. ± konst. X(2*J-I) X(2*J-l.O) izraz (funkcija) X(INT(SQRT(Z») 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

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

Page 43: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje 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, 1 0): :A, B, C(l 0,15)

iii REAL, ALLOCATABLE, DIMENSION (:):: E

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)' , I DET(I,]) 4 DET(l,2) 7 DET(],3) 110 DET(l,4) 2 DET(2,1) 5 DET(2,2) 8 DET(2,3) I II DET(2,4) 3 DET(3,l) 6 DET(3,2) 9 DET(3,3) I ]2 DET(3,4) )j\ If-

'-------------''------ Pozicija memorije

trodimenzionalni niz Z(3 3 3): , ,

19 Z(I,I,3) n Z( 1,2,3) 25 Z( 1,3,3) 20 Z(2, I ,3) 23 Z(2,2,3) 26 Z(2,3,3)

I 10 Z(I,I,2) 13 Z( 1 ,2,2) 16 Z(l,3,2) 27 Z(3,3,3)

III Z(2,1,2) 14 Z(2,2,2) 17 Z(2,3,2)

I Z(I, I, I) 4 Z(I,2,1) 7 ZO,3,1) 18 Z(3,3,2)

2 Z(2,1,1) 5 Z(2,2,J) 8 Z(2,3, I) 3 Z(3,1,I) 6 Z(3,2,1) 9 Z(3,3,1)

T 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

FORTRAN programski jezik za windowse

Opsti oblikje: ALLOCATABLE [::] a((d-spec)] [a(d-spec)]

COMMON naredba

Opis: Kreira memoriju za globalne podatke za programsku jedinicu.

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:

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

Page 44: FORTRAN - Programiranje Za Windowse

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

Page 45: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windowse

END

ALENCE naredba

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:

Varijabla ne moze zauzeti vise od jedne memorijske lokacije, niti mogu dva iIi vise elemenata istog niza zauzimati istu memorijsku lokaciju.

78

FORTRAN programski jezik za windowse

primjer bez greske: EEAL r, s ( 10 ) EQUIVP,LENCE (r, s ( 1) ) EQUIVALENCE (r, s(2»

S 1 ijedece nije dozvoljeno:

! 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 odd­byte 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 charl(10) EEAL rea1a, rea1b EQUIVALENCE (rea1a, char1(1» EQUIVALENCE (rea1b, charl(2»

Ono sto se pojavi u n ne moze biti inicajalizirano II tipu izjave. Slijede6i primjer uzrokuje gresku:

INTEGEE i /1/ EQUIVALENCE (i, j)

79

Page 46: FORTRAN - Programiranje Za Windowse

L

FORTRAN programiranje 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

../ naredba ne moze prosiriti common blok dodavanjem memorijskih elemenata u slijecleci common bIok, kako je dato i u slijedecem primjeru;

ovo je pr~mjer greske

CmlJl!ION /abcde/ r (10) REAL s(lO) EQUIVALENCE (r(l), s(7))

j 2 3 1 fj r1 f3 1

4

f4

? 1 ') S7 Sx S') 1 5 10

5 r5

I 6 I 7 ! 8 1 9 1 10 J I r6 I r7 1 fR 1 1"9 1 riO 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

FORTRAN prograrnskijezik za windowse ------------------------

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

Input - unos i Output - ispis elemenata niza iii cijelog niza moze biti sa upotrebom:

DO - petlje imena-hiza podrazumijevane DO - petlje

Operacije TNPUT/OUPUT - a bit ce prikazani na primjerima unosa podataka:

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

Page 47: FORTRAN - Programiranje Za Windowse

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= Lyi i:::::1

. Matematicki simbol'L:' predstavlja cia ce se izvrsiti sabiranje clanova niza I­I OO,i da cerezultat biti clat kao varijabla 'a' ... ,

Sema toka:

Listing:

START = 1 STOP = 100

STEP = 1

a = a + Yi

PROGRAM SUMA_A REAL, DIMENSION (l00) ::Y

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:

ALgoritam: I. unos broja podataka (N)

82

FORTRAN progralllskijezik za wit/dowse

2. sum=O. 3. petlja (I=l do N)

unos vrijednosti kao XCI) dodaje XCI) u sum

4. Racuna se srecinja vrijednost ( avg=sum/N) S. petlja (I=! do N)

racllna se dev(i)=x(i)-avg 6. daje se podatak x(i),dev(i)

Sema taka:

S7ART= 1 STOP = N STEP = 1

S7i1RT= / STOP = N STEP = 1

OUTPUT: DEV, X(I)

END

83

Page 48: FORTRAN - Programiranje Za Windowse

FORTRAN programirallje z{[ ,vindolVse

listing:

PROGRAM SUMA_A REAL, DIMENSION(lOO): :X,DEV

PRINT *, 'UNESI BROJ VRIJEDNOSTI (N <= lOO)}' READk ,N

SUM=O. DO I=l,N

PRINT *, ' UNESI PODATAKA BR:' ,I READ * ,X(I)

SUM=SUM+X(I) END DO

l'NG=SUM/N

PRINT *, 'SREDNJA VRIJEDNOST JE

DO I=l,N DEV(I) =X(I} -AVG

, ,AVG

PRINT *, 'DEVIJACIJA ZA X -, X(I},' JE =' ,DEV(I) END DO

END

8. PROGRAMSKE JEDINICE

------> 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.

8.1 GLAVNIPROGRAM

Fortranski program moze biti sastavljen samo od jednog dijela, ali mora imati glavni program (main) u obliku:

ime] [speclfikacioni dijelovi] [izvrsni dijelovi]

84

FORTRAN programskijezik za windowse

dijelovi illternog potprograma J PROGRAM[ ime ]]

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_

izvrsni dio - predstavlja jednu iii vise izvrsnlh naredbi (tabela 2.2) iIi konstrukcija, osim naredbi RETURN i ENTRY

clio internog programa - Je ili

clio koj i sacinjava jedna ii i VIse progral11skih jedinica Dio internog programa odvojen je sa nareclbom CONT A1NS·

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.

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

END SUBROUTINE SUB 1 END PROGRAM test

Primjer glavnog programa:

lme programa: test speciiikacioni dio

! izvrsni 9i~o ________ __

interni potprogram

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

Page 49: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windowse

Algoritam i sema toka: n l

C=---­if ( n - 1 )!

/

Listing:

Read

Slart ~ I Stop ~ /I

'Start ~ I Stop~i

PROCRAiVf KOMB_BROJEVA READ*, N, I

86

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 END DO C=K1/K2/K3 PRINT*, C END

Start ~ I Stop ~ 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

Opsti oblik je: type FUNCTION ime (lista varijabIi) potprogramske inst;ukcije

RETURN ENI)

Pril17jer: Prethodni program (KOMS _ BROlEY A) bit 6e uracten primjenom potprograma

(IFACT),

Sema toka:

PROGRAlVl BROJ_KOMB2 PRINT* , 'UNESI Nil'

READ*' N, I Kl,=IFACT (N)

FUNCTION N - ulazni argument

C IFACT::=>

1 iti/C/ ~ /

1 Slart ~ I SlOP ~ I

C Return::=>

!IFACT - lme za

87

Page 50: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windowse

K2=IFACT(I) K2 - izlazna vrijednos~

K3=IFACT(N-I)

I I - ulazni argument

! N - I - ulazni argument K3 - izlazna

C=Kl/K2/K3 vrijednost

~)R_IN'I * r C= I ,e

IF1\CT (L)

- ulazni argument IFACT=l

J=l,L IFACT=IFACT*J

Primjer:

IFACT - lme za FUNCTION, L

Napisati program, semu toka i algoritam za odredivanje ugla izmectu dva vektora.

Sema toka:

88

Read n fl(l) to((III) f2(2) tof'(IIl)

Function SKALP

1 C Return ~

Listing:

FORTRAN programski jezik za windowse

Ugao

RaClInanje ska/(lrrtox

proi7.voda DOT

A = !'f (//)2 B = if (J/ ? V i=l i=l

U"C/O = arccos' -~--( Dotprod j " l AxB

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

Page 51: FORTRAN - Programiranje Za Windowse

FORTRAN prugramiranje za windowse

Test primjer:

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

F'

coscx=461 -hos . J 3

cx=cos'\0.89 1065)=26.992770°

F'

Primjer: . Napraviti program za izracunavanje vrijednosti determinante 3x3

koristeci Cramerov postupak:

90

all

a 21

u::\!

PRGGR2\l'1 DETERl'1INANTA RE}""L A ( 3 , 3 )

a l2 an

a 22 an

a.12 a.13

PRINT *, 'UNESI HATR1CU PO REDOVIl:1A' READ *, ((A (I, J), J=L 3), 1=1,3) PRINT * 'DETERl'11NANTA A JE DET A=' DET (A) END

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

FORTRAN programskijezik za windO\+'se

8.3 PROGRAMSKA JEDINICA S\;BROUTINE

SlJBROUTINA je programska jedinica koja se poziva sa naredbom CALL iii naredbom pridruzivanja, a kao izlazne podatke moze imati veci broj argumenata.

Opsti oblik je: CALL potprograrnirne (V I, V2, ... , VN)

SUBROUTINE potprogramirne (V I, V2, "" VN;

CALLADD (X, y, Z, I, SUM) SUBROUTINEADD (A B, C, L, TOT)

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

all a l2 aD

detA= a 21 an an

a 31 a 32 a 33

X. = detA; I detA

hi a l2

detA I = h2 a 22

h3 a 32

7X I+2X2+3X3=45 -lX1+4X2+8X3=44 2X I-3X2+2X3=28

aD

a 23

(/33

det A2 =

X I =4 X 2=-2 X3=7

all

a 21

a 31

hi (/13

b2 a 23

h3 a 33

91

Page 52: FORTRAN - Programiranje Za Windowse

Listing:

FORTRAN programiranje za windowse

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) A2(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 END

Primjer: Naci kompanente vektara F (2, 4, -1) u kaordinatnorn sisternu koji je

zarotiran aka z-ose za 30°

. Listing:

92

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)

FORTRAN pmgramskijezik za windowse

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:

Rend

novo F

[

costa)

R = Sin~a) -sin(a) 0°

1

]

costa)

°

Matmll{

start = I stop = 111

start = I stop = n

93

Page 53: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje z.a windowse

Raspored varijabli i nizova prije naredbe CALL SUB 'UTINE.

REALA (100)

u sklopu

I ~ROUTI.NESUM (X, TOTAL)

"AT' ~~ REALX(IOO) '-r\.LL SUM (A, TOT)

.~

----- END

END

REAL A(lOO), B( 100)

CALL ADD (A, 100, TOTALl) ......__i'Y SUBROUTINE ADD ex, M, SUM) , /;'f REAL X(M)

.~ /

. ~""" .

CALL ADD (B', 10'TOTAL2)/"~E~TD . 4----------------------

END

8.4 PROGRAMSKA JEDINICA: MODULE

Novina u FOTRAN90 programskom jeziku je i ova programska jedinica. Moze biti pridruzena drugim programskim jedinicama sa naredbom USE·

94

Opsti oblik je:

MODULE modul-ime [specifikacioni dio] [CONTAINS

modul potprogram [modul potprogram] ... ]

FORTRAN programskijez.ik za windowse

deklaracione i inicijalizacione naredbe END ~v!ODULE [modul- ime]

modul-ime - ime za modul

specifikacioni dio - jedna iIi vIse specifikacionih naredbi (tabela 2.2), OS 1m: ENTRY, OPTIONAL

modul potprogram - je FUNCTION iIi SUBROUTINE potprogramska jedinica definisana za modularni pIoces. Mora na kraju imati naredbu END FUNCTION iIi END SUBROUTINE.

Primjer: U ovom primjeru definise se modul za konstantu PI sa nekoliko modula

koji imaju pristup konstanti:

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 . I

I drugi modul sa islom instrukcijom REAL FUNCTION B( ) USE CONST ANTE

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

Page 54: FORTRAN - Programiranje Za Windowse

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

OPERATOR

TYPE (VECTOR) ! A, B, C GLAVNI PROGRAM PRINT *,' UNESI VEKTOR A'

READ * ,A PRINT *,' UNESI VEKTOR B'

READ *, B

C=A + B ! UPOTREBLJAVA NOVI +

PRINT * END

A+B=' ,C

Izgled ulaznih i izlaznih parametara:

96

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:

INTRINSIC DATA PARAMETER Derivecl-typeciefinition POiNTER DfMENSION RECORD EQUIVALENCE SA VE IMPLICIT

Primjer:

STATIC TARGET Tip deklaracije 1

USE

U slijedecem primjeru je dat prikaz programske jedinice BLOCK DATA.

BLOCK DATA BLKDAT INTEGER S, X LOCIeAL T, W DOUBLE PRECISION U DIMENSION R(3)

!BLKDAT - ime ! Slijedi specifikacioni dio

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 Moze biti upotrijebljenjedan od atributa:DIMENSION. INTRINSIC, PARAMETER, POINTER, SAVE, STATiC, or TARGET.

97

Page 55: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje 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 Funkcija

BACKSPACE Vraca poziciju fajla za jedan zap is CLOSE Zatvara faji ENDFILE Pise zadnji zapis u fajiu

EOF Determinise gdje je podatak u fajiu nakon odgovarajuceg pozicioniranja

INQUIRE Vraca karakteristike oznacenog iii Eksternog fajJa

OPEN Otvara fajl

PRINT Stampanje podataka u fajl (*)

READ Ulazni podaci

REWIND Vraca fajl u pocetnu poziciju

WRITE Izlazni faj I

Sintaksa za pojedine naredbe u sklopu glavne naredbe za :VO datoteke:

98

FORTRAN !7rogramskijezik za windowse

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

Page 56: FORTRAN - Programiranje 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)

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

Name ime fajla.

label

FORTRAN programskijezik za windowse

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')

* 5 6

OPEN (UNIT=10,FILE='undamp.dat') WRTTE( 1 0, *),UNDAMPED MOTION WRITE (I, MF)

Rezervisane eksterne jedinice

tastatura iii skrin (uvijek) tastatura skrin

101

Page 57: FORTRAN - Programiranje Za Windowse

I

FORTRAN programiranje za windowse

Primjer:

CHARACTER * 14 FIME IFILE=A WRITE (FIME, 100) IFILE

100 FORMAT(,FM', 13.3,'.DAT') WRITE (*,*)FIME END

Tipovj fajlova

U narednoj tabeli dat je pregled specifikatora za fajlove i njihove funkcije.

Tabela') 16 -. SPECIFIKATOR VALUES FUNKCIJA OSNOVNO-

DEFAULT 'SEQUNTIAL'

ACCESS 'DIRECT Access mod 'SEQUNT1AL' 'APPEND'

ACTION 'READ' 'WRITE' (iIi MODE) Fajl access 'READWRITE' 'READWRITE'

ASSOCIATEV Slijedeci ARIABLE var direkni access Bez vrijednosti

zapis

BLANK 'NULL' Interpretacija 'ZERO' kao prazno

TNULLT

BLOCKSIZE N Fizicka Fajl sistemski: _expr velicina bloka elef~1Ult

BUFFERCOUNT N_expr Broj I/O Jedan buffer-a

CARRUAGECON 'FORTRAN' Kontrola za

TROL 'LIST' stampanje 'NONE'

'LITTLE - ENDIAN' 'BIG - ENDlJAN' 'CRAY' 'FDX' Numericka

CONVERT 'FGX' format 'IBM' specifikacija 'VAXD' 'VAXG 'NATIVE'

DEFAULTFILE Prielruzeno C _expr imeDefault Raelni elirektorij

fajlu

102

I

I

FORTRAN pr'Jgramski jezik za windowse

'APOSTROPHE' Ogranicavac DEUM 'QUOTE' za karakter 'NONE'

'NONE' konstante 'K~EP' iii 'SAV~' 'DELETE'

Dispozicioni-DISPOSE 'PRINT'

ranje faj!a pri 'KEEP' (i I i 'PRINTIDELETE'

zalvaranju 'SUBMIT' 'Sl'BMITIDELETE'

Kontrola ERR Label greske

"I ~.~z vrijednosti prijenosa

FUNKCIJA I OSNOVNO-

SPECIFIKA TOR VALUES DEFAULT

FILE C _expr Ime fajla Fort.n (iii NAJ\1E)

'FORMATTED' Tip Zavisi oel setovanja

FORM 'UNFORlVIATTED' formatiziranja za ACCESS

'BINARY' Aktiviranje

I 'TRUE' prozora u 'TRUE' IOFOCUS I 'FALSE' quick win

aplikaciji IOSTA.T I Var I 1/0 status Bez vrijednosti

Ogranicenje MAXREX N _expr za Direct Nema granica

access zapls

ORGANIZATION 'SEQUENTIAL' Organizacija 'RELATIVE' fajla 'YES' Punjenje

'YES' P.4D 'NO' zapisom 'ASIS'

Pozicioniranje POSIT10N 'REW1ND'

fajla 'AS1S'

'APPEND'

'No value' Zastita oel

No default READONLY upisa Zavisno oel

RECL N _expr Duzina zapisa RECORDTYPE, (iIi RECORDSIZE)

ORGANIZATION RECORDTYPE 'FIXED'

'VARIABLE' Zavisno od 'SEGMENTED' ORGANIZATION, 'STREAM' 'Tip zapisa CARRIAGECON-'STREAM CR' TROL, ACCESS i -

FORM setovanja 'STREAM - LF

103

Page 58: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windowse

DENYRW' ! SHARE

DENYWR' Parlicipacija I

DENYONE' DENYRD' fajla DENYONE'

i Dozvoljavanje SHARED Bez vrijednosti , SHARED podjele fajla

OLD' NEW' STATUS SCRATCH' FajJ status kod UNKOWN'

(ili TYPE ) REPL.t\CE I otvaranja

UNKNOWN' I

Naslov za I

TULE C malu window

Bez vrijednosti _expr quickWin applikaciju

SPECIFIKATOR I VALUES FUNKCIJA OSNOVNO-DEFAULT

I UNIT Bez vrijednosti;bilo

N _expr Logicki broj koja iounit mora I I biti specificirana IUSEROPEN Opcija za

koristenje

I Func

programske Bez vrijednosti

opcije

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

I

I

FORTRAN programskije;:ik za windowse

testa. Podaci 0 ocjenama bit 6e smjesteni na datoteku sa nazivom STUDENT, a konacne ocjene sa rednim brojem na datoteku KON_ Oel.

Listing:

! Program za podatke ispita za studente

Program sekv_dat character (LEN=25) :: IME(1000) REAL, DIMENSION(1000):: PISMENI,USMENI,GR_RAD,TEST,SR_OCJ

PRINT *,' KOLIKI JE BROJ STUDENATA?' 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

! 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

Page 59: FORTRAN - Programiranje Za Windowse

FORTRAN programiraflje za windowse

WRITE(4,*) I,NINT(SR_OCJ(I» END DO CLOSE (4) END IF

CLOSE (7) END

Datoteka STUDENT:

AA

7.000000 7.000000

BB 6.000000

8.000000 CC

3.:;00000

DD 10.00000

7.000000 EE

9.000000 6.000000

8.000000

6.000000

6.000000

7.000000

9.000000

Datoteka KON_ OCl (redni broj i konacna oejena): 1 7 2 3 4

5

6 7 7

9

Primjer datoteke sa direktnifl) pristupom:

7.000000

6.000000

8.000000

7.000000

9.000000

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 CH4 (CONCNCH4) i sadrZaj CO2 (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

__________ F_'O_R_T_R_A_N~programski jezik za windowse

10 PRINT *, 'NOVA DATOTE~~, NOVI UNOS ILl KOREKCIJA (1,2,3)' READ *, INPUT SELECT CASE (INPUT) CASE (1)

NREC=l 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, ('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

Page 60: FORTRAN - Programiranje Za Windowse

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

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

END SELECT

PRINT *, 'HIA LI JQS ZAHTJEVA (DA=1/2=NEJ?' READ *,NOVO I? (NOVO=~l) GOTO 10

C~OSE (" , -)

10. PRIMJERI FORTRANSKIH PROGRAMA

10.1 PRIMJERI FORTRANSKIH PROGRAMA IZ I DIJELA

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 ,. ENrl

Za ulaz (podaci vee pisani u program D=30, T=2 i GAMA=90) izlaz je dat na slijedecoj slid:

Hj8

FORTRAN programskijezik za windowse ----------------------~

Primjer 1_2

PROGRAH PRDfJERl 2 PARAHETER (PI=3.14) REAL D. T. GAHA . RU . RIT . IT, T,J PRINT ..

10 PRINT". 'UHESITE PRECHIl{ d. DEBLJINU ZIDA '. I SPECIFICHU TEZINU gama READ *. D. T. GAl1A 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

Rezultat izvrsenja programa za ulazne podatke (D=40, T=3 i GAMA=9) unijete sa tastature prilikom pokretanja programa datje na slijedecoj slici:

Primjer 1_3

. ., HESUE :enECNIK d. J)EllLJINU ZlJ)1I t! r S:eECIEICNU IEZUUl ga .. " lil --

"i ~ 7. '"'

-'" ~

EZINA SUPLJa KUGLE JE 116318: • 200!l00 _ ~ = ~ - -

10

20

30

~~~iR!\P~Igi~~lR~ RV V I) I P1.RAlfETER (PI=3 14) PRINT ,. PRINT*. 'UHESITE PRECNI¥. d. DEBIJINU ZID1. t I SPECIFICHU TEZIllU gama' READ *,D,T,GAKA. RV=D/2 RU=D/2.-T 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

Rezultat pokretanja ovog programa (mogllcnost unosenja i visestrukog izvrsavanja programa) datje na slijedecoj slici:

109

Page 61: FORTRAN - Programiranje Za Windowse

Primjer 1_4

FORTRAN programiranje za windowse

PRO'~RMf PRIHJERl 4 F~EAL X, Y PRINT .. PRINT .. , . UNESITE VRIJEDHOSTI X I Y' READ *,X,Y PRIHT .. IF (XEQ.Y) then

PRINT", 'X je jednako Y'

ELSE PRINT ,. I PRINT *, 'X nlJe jednako Y' PRINT ,.

END IF

END

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

110

Primjer 1_5

FORTRAN programskijezik za windowse

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 1

IF (Z,GT R) THEN PRINT*. 'TACKA JE VAn KRUGA POLUPRECNIKA R"' F: PRIllT " END IF

10 ,END

Rezultat izvrsenja prethodnog programa za unijete vrijednosti dat je na slijedecoj slici:

Primjer 1_6

" ~. - ~ - ""

NI~IH.:rI!' llBIJEDfilOSrr RA!' I V' , 111 ,,' ,

, , ' , ,

- - "" , -

"= Y:'2J:951t'l ' = ,

ACKA dE U KRUGU ROLUPREGNIl(R R= 10.000001i'

PROCRMf PRHf,JERl 6 REAL II -PRINT * PRINT ')f, 'UljESITE BRO,J n' 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 * I ELSE ~~~Ni :' 'UHESEHI BROJ JE POZITIVAH'

END IF END

Za unijeti broj 6 rezultat programa "PRIMJERI_~":

, '

NI'Sl1'1'l BJlO,' JiIi ,

NESElU BllOa' ;m ll!~" Ilfl)

.. =" ~n9 key 1:" c:u • .--r,,"mw

III

Page 62: FORTRAN - Programiranje Za Windowse

FORTRAN prugramiranje za windowse

PRO'::;RAH PRIl{']ERl 7 REAL A,X,Y,Z -PRINT " PRINT ", 'UNESITE BRO.JEVE

EAD *,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·

I Z'

Za unijete vrijednosti X=3, Y=7 i Z=32 rezultat izvrsenja programa dat je na slijedecoj slici:

Primjer 1_8

10·0

'J.IESn;E BROUEUR ~.~y :t Z' -?' ~i2 -

~ ~2~_~00000

":loess: an!,!:kif:l8 .tA continu~

PROGRAt1 PRIHJER1_8

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

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,

112

FORTRAN programskijezik za windowse

102 PRl1VIJERI IZ MEHANIKE

Zadatak J

Kretanje motornog mehanizma

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 ¢'

////-r---I .

I , ,

Jednacine: n:n

OJ=-30

x = Reose + Leosel>

L

113

Page 63: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje Zit windowse

Xmax = (R + L)co{Sin-1( R ~ L )]

X mill = (L - R)CO{ Sin-1

( L~ R )]

fu=x -x· max 111111

a . _I(E + Rsin 8) o=SlD

L

v= dx = Rol- Sin (8+<P)) dt \ cos<P

i3. <P = <P max - <P mill

. d(J;> Rease (J;>=-=01---

elt Lcos(J;>

.. d2

1> .. 2[~(d1> )0--2 • R Sine.l 1>=--=01 -- tan1>-----

dt l de L cos 1> 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

FORTRAN programskijezik za windowse

<P - ugaono pomjeranje iIi zakret kIipnjace

<Pmax - max ugaono pomjeranje iii zakret klipnjace

. <P lllin - min ugaono pomjeranje iii zakret klipnjace

i3.cD - ukupni ugaoni zakret klipnjace <P - ugaona brzina klipnjace, Cb - ugaona ubrzanje klipnjace.

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')

Unos podataka PRINT*, '

motornog mehaniz 1ma'

Program za racunanje nekih vrijednosti

PRINT*, ' Ucitavanje potrebnih vrijednosti '

PRINT * READ (1,*) R READ (1,*) L READ (1,*) E RE,zm (1, *) N

PI=3.14159265358979323846

Ispis komentara PRINT 1020, ' Za

','R=' ,R, 'L=' ,L, 'E=' ,E, 'N=' ,N PRINT * PRINT*, ' PRINT * PRINT 1030

C ProraCun trazenih vrijednosti DO 1=1,12 READ (1,*) THETA THETA=(PI/180.)*THETA OMEGA= (PI*N) /30.

REZULTATI SU'

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

Page 64: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje Z{l windowse

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)

Ispis rezultata

1010

PRINT 1010, TTHETA,X,FI,V,FI1,A,FI2 END DO

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 e = 0° - 3600 dobijaju se rezultati prikazani na sljedecoj slici:

2 7 o 4800 O. 15. 30. 45. 60.

116

Ulazna datoteka:

FORTRAN programski jezik:;:a windowse ----------------------~.

90. 135. 180. 225. 270. 330. 360.

Iazlazna datoteka:

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 111, konstanta oprl1ge k i konstanta prigusenja c. Izlaz ce biti:

I. OJ za neprigusen sistem tj. kad je C<Ckrit pri cemu je Ckrit izracunato uz pressing [B],

2. - 0 za slucaj kadaje C=Ckrit

3. - 1 za prigusen sistem kadaje C>Ckrit

Pocetni uslovi su pomak i brzina u trenutku t=O (xo i xo )

Jednacine:

c = 2 fk,;; knf -V Km

O)~~k_( c J2 m' 2m

117

Page 65: FORTRAN - Programiranje Za Windowse

FORTRAN progmmimnje za windowse

x= (ci: + kx)

m

Neprigusene oscilacije

(c2 -4km < 0) c

x(t)=Re- 2J)1t cos(wt-8) c

C --I

x(t)=-ROJe - 2111' sin(cu/ - 8)---Re 2111 cos(OJt -81 2m

Gdjeje:

Rcos8 = xo

. 1 l' C J R sinS =- Xo +.--Xo OJ 2m

Kriticno prigusenje:

( C. iIi c2 = 4km) knf'

c --I

(t) - fA + B f)e 2111 X -" krit krirt-

C --I

J c

i(t) = [B kril - - (A kril + B kri/) e 2m 2m

Gdje je:

Prigusene oscilacije:

(c 2 -4km > 0) '()-A 1]1 B '21 X t - {)Ve + ()Ve

x(t)= A rer,r + B r; erz! ()V 1 {)V 2

118

FORTRAN programskijezik za windowse -------------~

Gdje je:

k

111

Napomena:

Za prigusenje, OJ nema znacenja i u stvari je imaginarni broj.

Za C=Ckril, OJ=O.

Ovaj program zahtijeva unosenje uglova Ll radijanima, u suprotnom se javlja greska.

Listing programa:

* Deklaracija varijabli i otvaranje datoteka 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')

***********************************************************

* * Unos podataka

PRINT * READ (1, *)

READ (1, *)

READ (1, *)

rnirovanja READ (1, *)

M C XST

XO

rnasa koeficijent pigusenja istezanje opruge u stanju

pocetno izduzenje READ (1, *) DIXO pocetna brzina

***********************************************************

* * Ispis naslova i ucitanih vrijednosti

PRINT * WRITE (*,100) M,C,XO,DIXO WRITE (2,102) M,C,XO,DIXO PRINT .. PRINT * PRINT *

REZULTATI SU'

119

Page 66: FORTRAN - Programiranje Za Windowse

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

IF( 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"T-

DELTA)+K1*X*COS(OMEGA*T-DELTA) ELSE IF (C==CKRIT) THEN

ELSE

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))

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 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

FORTRAN programskijezik za willdowse

*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 zavrsetak programa

CLOSE (1) CLOSE (2) STOP END

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:

121

Page 67: FORTRAN - Programiranje 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

. df gdjeje f (x)=-.

dx

Stmkturni plan za primjenu Newtonove metode je:

1. Ucitaj pocetnu vrijednost Xo i zahtijevanu tacnost e

2. Sve dok je If ct:k)1 ponavljaj korake do k=20, prema

_ f(x,) x k +! - X k --.,--

j (xk )

stampaj Xk+! i f (Xk + l )

3. Stop

Neophodno je ograniciti korak 2 jer proces mozda nije konvergentan.

Kompleksni korijeni

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 .

Listing:

122

PROGRAM ComplexNewton

COMPLEX ::X READ *,X PRINT "(2AIO)", "Re(x)", "Im(x)" PRINT *

FORTRAN programski jezik za windowse -------------

N=l DO WHILE ABS (F(X»)>=IE-6 .AND. N<20)

X=X-F(X)IDF(X) PRINT "(2FI0.4)",X

END DO CONT/\lNS

N=N+l

FUNCTION F(X) COMPLEX X.F F=X**2+X+!

El~D FUNCTION F

DF(X) COMPLEX X,DF DF=2*X+l

END FUNCTION DF

END PROGRAM ComplexNewton

Ova verzija programa moze se koristiti za nalazenje realnih nula s tim da moraju biti zadata realna pocetna rjesenja.

FUNCTIOn DF(X) COHPLEX X, DF DF"'2*X+l

END FUNCTIon DF

POCETHTJ VRIJEDHOST U OBLIKU (I<, B)'

"ITit(:..:)"

PROGRAM ComplexHewtonJ

Rezultati izvrsenja programa za ulazne podatke (0,2) dati su na slijedeeoj slici:

NESHE POCEfNll URI JEDNGSI U OBLll{u ~A~B? ~0.Z1 --

lle<,,): J",<x)

-.29;11 t.t?fiS -.'1S:E2; .R2'''S

.'1'11)3 .IllS53 -.silua .8660 -:SOOi! .1l6G0 .

123

Page 68: FORTRAN - Programiranje Za Windowse

FORTRAN prograrniranje za windowse

Program TRIANG (Trougao)

PF:OGRAH TRIAHG

LOGICAL FLAG ,I Zas tc:~nca PRINT *, 'UllESITE STRAlfICE ,", b Ie' READ *,iLB,C PRIlIT *, . DUZHiE STRAHICA TROUGH, SU' . ,A, B, C FLAG=(A+B) GT.C AND. (B+C) GT.ll AND. (C+A) .GT.B

END

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 *, 'POVRSINk TROUI.:;LA JE'. POVRS ~~i~+, : 'UGI.OVI TROUGLA Sf' " lJGAOA, UGAOB, UGAOC

ELSE PRINT *. 'HEISPRAVUI-POGRESNI PODACI ZA STRAHICE' PRIHT * EliD IF

REAL FunCTIon UGAO(X, TL Z) PARAHETER (PI=3.141592&5) TEMP= (X*X+Y*Y-Z-x-Z) /( 2*X*Y) 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), A2(X2,Y2) i A3(x"Y3) moze se izvrsiti koristenjem izraza iz vektorske algebre:

! Xl

P=~l X 2 Y2 2 X3 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), A2(4,1), A3(1,5):

124

FORTRAN programski jezik za windowse ----------------------~

Listing: PROGRl\jVj PTROUG

! RACUNANJE POVRSINE TROUGLA CIJI SU VRHOVI DATI SA KOORDINATAMA

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

PT=DET(A)/2. PRIN'r *, 'POVRSINA TROUGLA JE PT=', PT

END

! FUNCTION - KORISTENO CRAMEROVO PRAVILO

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: 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

20

PRINT *,' JEDNACINA NIJE KVADRATNA' STOP

CONTINUE

125

Page 69: FORTRAN - Programiranje Za Windowse

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<O.) THEN

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

Pl .. !. l.l.'.'.· .. l! •. " I I I JiJlJi I I I . .' . I I, ~ \...../

Page 70: FORTRAN - Programiranje Za Windowse

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

Page 71: FORTRAN - Programiranje Za Windowse

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

y=y

,,~------------~~ A y

y a z

x 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.

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

__________________ R_a~c~ll~n~a~r.\:.:.k:.::a__'grajlka sa FO RTRA N-om

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 II ravni IZ prethodne jednacine dobija:

odakle slijedi ~a su transformisane koordinate

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.

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

Page 72: FORTRAN - Programiranje Za Windowse

FORTRAN progral7liranje za windowse

Ako su date dvije tacke u ravni, tacka A sa svojil11 koordinatal11a XI,Y I tacka B sa koordinatal11a X2,Y 2 onda matrica koordinata il11a oblik:

lz osnovne jednacine slijedi da se matrice transformisanih koordinata dobijaju kad se matrice koordinata pomnoze sa matricom transformacije T, dimenzija 2 x 2.

Tacka A sa koordinatama XI.Y\, transformisala se u tacku A sa

koordinatama XI i )II pri cemuje:

XI = TIIX I +T2I YI

311 =Tlix i +T22 YI

Slika 3.2

B

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

Racunarska grafika sa FORTRAN-om

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

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.

-Slikn 3.3

x = x . cos a - y . sin a

31 = x . sin a + y . cos a

Jeclnacina u matricnom obliku moze se napisati:

- J[ cosa A = [x 31 J = [x Y . - sm a

Gclje je matrica

[ cosa

-sina sinal cosa

matrica transformacije.

sin a] cosa

y = r\sin(a + (3)

T

Slika 3.4

133

Page 73: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windowse

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 1 ]

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.

Mnozenjem matriee An i Tn dobije se rnalrica lIclllsfotmacionih koordinata A formata 3 xl, koja ima ob!ik za tacku u ravni.

[T" Til TI3

[x y I]. Tl1 T22 T13

T31 T32 To}

= [x' y' v'J= [:: ~:

Na ovakav Je nacin trodimenzionalnim vektorom predstavljen dvodimenzionalni vektor polozaja. Analogno ovome, cetverodimenzionalnim vektorom predstavljamo trodimenzionalni vektor polozaja.

134

Racunarska grajika sa FORTRAN-om

iT" TI2 TI3 TI4

[x 1]. T21 T22 T13 T24 = [x' , ,

v'] = [x 1 ] y z y z y Z T31 T32 T3} T34

~T41 T42 T43 T44

Matriee transformaeije za likove u ravni

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 T23 treba posmatrati transformaciju tacaka koje se dobijaju slijedecom transformacijom:

o

[x y y

v = TI3 . X + T 23 . Y + 1

lednacina predstavlja jednacinu ravni u prostoru gdje Je V treca koordinata (slika 3.5).

135

Page 74: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windowse

y

j---3>-X

Slika 3.5

Translacija u ravni

Elementi matrice transformacije, koji definisu translaciju, su T31 i T32 pa matrica transformacije ima oblik:

T=[~ Til

o

Ako matriClI koordinata pomnozimo sa ovakvom matricom transformacije, dobicemo:

x= X +T31

Y = y +T32

Kombinacijom ranijih jednacina i slike 3.6 se vidi da element Tol daje transformaciju u X-pravcu, a Tn transformaciju u Y-pravcu.

136

Racunarska grajika sa FORTRAN-O/11

>X x

Slika 3.6

Rotacija

Koriste6i ranije jednacine dobija se matrica transformacije za rotaciju raVl1l.

r cos ex

T = -sinex

L 0

sin ex

cos ex

o ~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

\ \

\ \ \

\

). ;;

x

Slika 3.7

137

Page 75: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje ZCl windowse

A

(X

X

Slika 3.8

A = A TT; ·TR ·Tn

IIi u razvijenom obliku:

I{ ~ a oro," sin a T a

~I ~ ~ y I] [x y 1 ~ -S~l a -cosa

~J T~I -Tli -Tn 0 T32

Kada se matrIce TTl, T R, i T T2 pomnoze dobija se konacna matrica transformacije.

[

cosa

T= -sin a

- To2 (cos a -1)+ T32 sin a :1]

-T3J sina- T32 (cosa-I)

sin a

cosa

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.

138

Raczmarska grafika sa FORTRAN-om. ----------------------~

Uvecallje - smanjenje

Matrica transformacije koja claje lIvecanje, odnosno smanjenje, Ilna oblik:

ITII a a I

T=l~ T22 a a T33

Ako je element rnatrice transforrnacije T33 = I, matrica T irna slijedeei oblik:

a

a

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:

T= I: La a

a a a

T13

Ako lllatricLl koorclinata tacaka pOlllnozimo sa ovakvom matricom transfofmacije, clobieemo:

Jz jednacine je lako uociti da se smanjenje lika dobija ako je T33 > I, odnosno uveeanje ako je T33< I.

139

Page 76: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje w windowse

y y

TJ~ 0 °l 0.5

~ J

r lo 0

:>

2

0.5

X X

Slika 3.9

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:

140

1

o

Uglovi tgcxx i tgcxy su nagibi za Xi Y pravae.

y

Racunarska grafika sa FORTRAN-om

2.2 PROSTORNE TRANSFORMACIJE

Analogno homogenim koordinatama u ravni imamo da se za prostorne homogene koordinate tacaka cetvorodimenzionalnim vektorom predstavlja trodimenzionalni vektor polozaja:

A = [x Y z I]

Odgovarajuca matrica transformacije mora da. bude dimenzija 4 x 4 ima oblik:

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 , T22, T23 , 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).

141

Page 77: FORTRAN - Programiranje Za Windowse

x = X +T41

Y = y + T42

Z = Z+T43

z

Rotaeija

FORTRAN programiranje za windowse

y

A

x

A"

Slika 3.11

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 co'Y

sin y 0

~l - Sill Y eosy 0 Tz=

0 I ~J . 0

0 0 0

Lako je izvesti prostornu matrieu transformaeije za rotaeiju oko Xi Y-ose:

0 0

~1 eosU sin U

- sin U eos U

0 0

142

Racunarska grafika sa FORTRAN-om --------------------------~ -----------------------------------

reos~ 0 -sin~

~j I 0 0

Ty = 0 eos~ sin~

L 0 0 0

Elementi matriee transformaeije su izvedeni za usvojene pozitivne srnjerove rotaeije prikazane na sliei 3.12.

y

f3

x y

z Slika 3.12

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

Page 78: FORTRAN - Programiranje Za Windowse

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.

y

f2 0 0 01 T=lo 0.5 0 0

I () 0 0.5 0 I LO () () I J

x :> x

z Slika 3.13

T44 je element prostorne matrice transformacije koji daje general no uvecanje­smanjenje jednako u svim pravcima.

, I 0 0 0

A = [x I] 0 1 0 a = [x' , T44 ] Y z y z

a a 1 a La a a T44

A = [x y Z 1 ]

Ako je T44 > 1 dobit ce se smanjenje tijela, odnosno ako je TH < uvecanje tijela u pravcu X, Y i Z-ose.

Tijelo u ogledalu

Ako se matrica koordinata A pomnozi sa jedinicnom matricom dobit ce se matrica A:

144

RaCzll1w:l'ka graflka sa FORTRAN-om

Sada, nekom od elemenata na dijagonali (Til, Tll iIi T11) pridruzimo vrijednost -1.

11

a Txy = a

La

a

a a

a a -I

o

Mnozenjem matrice koordinata sa prostornom matricom transfonnacije dobija se:

[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.

y F ]:)-_____ ~"'" c A ~//

.. /,,/ ,///

A // '/// //:"/

F~ __ ¥=~=/=/~'_/_"--~'-/7/~/------~-

~---=:/::> x

z E 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.

145

Page 79: FORTRAN - Programiranje Za Windowse

FORTRAN pror;ramiranje za windowse

1 0 0 °l 11 0 0

~I I

Tyz = 0 1 0

~I Tvz = 1

0 -1 0

0 0 1 " 0 0 1

0 0 0 lo 0 0 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).

gdje su:

Matrica transformacije za defonnaciju tijela ima oblik:

,. I

I tgav

T= " l tg~z tga x Ol

tga y 0

tga z 0

o

tgax, tgay , tgaz - nagib u odnosu na X,Y i Z osu koordinatnog sistema.

x

z Slika 3.15

146

RaclInarska grajika sa FORTRAN-om

Projekcija

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:

T" ri ! Hl

j lo 0 0 1

y",y x=x

f

,\ '" Eli --- - ------- --------~\ C

[~C~G ..... , ' G

D",H D H

z

Slika3.16

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

Page 80: FORTRAN - Programiranje Za Windowse

paje

FORTRAN programiranje za wil/dowse

o 0 OJ 100

010

001

A za ravan XZ, Y koordinata jednaka je 0 i matrica transformacije:

paje

T"J~ ~ ~ ~1 lo 0 0 IJ

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.

Slika 3.17

148

Racunarska grafika sa FORTRAN-om -----------------------

perspektiva

Slika 3.18

o cosa

-sina

o

izometrija

~~l cosa J

o sin a

o

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 - Y d x = -d---- p; y = ----- P I' + z d p + Z

x x=----·

z ' 1+--

dl'

- y y=--

1+~ d p

149

Page 81: FORTRAN - Programiranje Za Windowse

z

z

FORTRAN programiranje za windowse

dp

y

z

x

Stika 3.19

y

cavan projektovanja (ekran)

ravan projektovnnja

x

+--- ravan projektovanja

~~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

Racunarska grafika sa FORTRAN-om --------------------------~

Matrica perspektivne transformacije u sfernom koordinatnom sistemll

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, -Ty , -Tz:

Tx = p. sin '!f' cos cp

Ty = P . sin '!f' sin cp

Tz = P . cos '!f

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

o o o

o 1

o o

Koordinatni sistem se vraca u polozaj taeke M translacijom sa parametrima translacije Tx, Ty, 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

Page 82: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windowse

3. GRAFIKA SA FORTRAN-om (VISUAL FORTRAN)

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.

Tabela 3.1 Column () 3 .1 4

ib:3 Bits o 0 () o o 0 b7 o o

b6 () o 1 0

~~ __ ~B.~5 __ +-____ ~O+-____ ~ ____ ~04-__ ~+-__ ~O~ ____ ~ ____ ~(~)+-_. ____ ~

104 b3 b2 b 1

o () NUL 0

o

20 DLE 1'6 51'

20 21

I 0 0 0 1 SOH DC1 i7

4

I

1 XON 11 22

o 0 1 0 STX DCZ 18 ,. 12 23

o 0 1 1 ETX DC3 1') # XOFF 13

o I 0 0 I EOT II ~ 4

24 DC4 20

14

o 1 o 1 ENQ 5 NAK I;~ % 1 :') 15

() I 1 0 ACK ~ I SYN ;~ 1 & 6 I 16

7 0 1 1 tIEL ~ I ETD ~; 17

10 30 1 0 0 0 BS 8 CAN 24

, X 18 11 31

100 1 HT 9 EM 25 9 19 [2 .12

101 0 i 10 LF 10 SUB 26 A 1;\

13 33 1l I 1 0 1 I VF 11 ESC 27 +

B 1B 14 34

12 I I 0 0 FF 12 F5 28 C IC 15 35

13 I 1 0 1 CR 13 GS 29 D ID 16 36

14 1 I I 0 14 RS 30 SO E [E

15 1 1 1 I SI 15 US 3 i F IF

152

40 .)2

20 41 33 21 42 34 22 I 43 35 23 44 36 24

45 37 25 46

47 39 27 50 40 28 51 41 '1C)

52 42 2A 53 43 ?8 54 44 2C 56 45 2D 56 46 ?E 57 47 2F

, 60 100 o 48 @ 64

30 40 61 101 49 A 65 31 41

62 102 2 50 B 66

32 ! 42

6.' 103 '51 C 67 ~3 4_~

64 104 4 52 D 68

34 44 65 105

5 II ~3 E 69 .,5 I 45

166 106 . 54 F 70

46 36 67 107 55 G 71 37 47 70 110 56 H 7,")

3~ 48 71 111

9 57 73 39 49 72 112 58 74 3A 4A 73 113 59 K 75 .1S 48 74 114

< 60 L 76 .10 4C 75 115 61 M 77 3D 4D 76 116

> 62 N 78 3E 4E 77 117 63 0 79 3F 1 -I-r:

120 P 80

50 121

Q 81 51 122

R 82 51 12J

124 T 84

54 125

U 85 55 126

V 86 56

1

1,27 W 87

57 130'

58 131

Y 89 59

1.12 Z 90

SA 133 91 5B 134 92 SC 135 93 50 136 94 5E 137 95 SF

d

k

o

140 96 60 141 97 61 142 98 62 143 99 63 144 100 64

145 101 65 146 102 66 t47 103 67 ISO 104 68 151 105 69 152 106 6A 153 107 6B 154 108 6C 155 109 6D 156 110 6E 157 111 6F

160 P 112

70 161

q 113

71 162 114 72

'1

163 i !5 73 164 116 74 165

u 117 75 lfi6 118 76 [67 119 77 17°1 120 n 171 121 79 172 [22

7A 173 123 7B 174 124 7C t75 125 7D t76 126 7E 177

DEL 127 7F

Racunarska r;rafika sa FORTRAN-om

Tabela ') ') Naredbe u o-rafickom modu - .,,<..., c IME - NAREDBA Opis naredbe

fokusiranje speci fici ranog prozora (windows)

I vracanje odrec1enog broja u aktivni mod

IGETHWNDQQ konvetiuje jedinicni broj unutar Windowsa za funkcije

GETWINDOWCONFTNG daje karakteristike windowsa

GETWSIZEQQ daje velicinu i poziciju windowsa (prozora)

INQFOCUSQQ ! definise koji window ima fokus SETACTIVEQQ i aklivira windows

SETWINDOWCON'FfNC setuje karakteristike windowsa (prozora)

SETWSIZEQQ setuje velicinu i poziciju windowsa (prozora)

ABOUTBOXQQ dodavanje boksa za teks! APPENDMENUQQ ..fJfidruzivanje meniu CLiCKMENUQQ simuliranje efekata u meniu DELETEMENUQQ brisanje menia GETEXITQQ selovanje za QuickWin aplikaciju

INCHARQQ citanje karaktera sa tastature i vracanje Ll ASCII vrijednost

ilNITIALSETTTNGS kontrola pocetnog setovanja menia i okvira (windows) prozora

INSERTMENUQQ insert za meni I MESSACEBOXQQ prikazivanje boksa T\;IODIFYMENUFLAGSQQ slanje menia

MODIFYMENUROUTINEQQ modifikovanje menia "callback" rutine

MODIFYMENUSTRINGQQ modifikovanje menia za tekst

REGlSTERMOUSEEVENT registrovanje za primjenu rutina mouse (mUia)

SETEXITQQ setovanje QuickWin apIikacije za izlaz

SETMESSAGEQQ izmjena QuickWin ukljucujuci status bar, status i dialog boks setovanje menia na kojem se listaju

SETWINDOWMEl'JUQQ odgovarajuca imena i njihovo pridruzivanje

UNREGISTERMOUSEEVENT vracanje rutine definisane sa REGISTERMOUSEEVENT

W AITONMOUSEEVENT blokovi za vracanje misa (mouse) u pocetnu jJoziciju

IS3

Page 83: FORTRAN - Programiranje Za Windowse

FORTRAN programimnje z.a windowse Racunarska grajika sa FORTRAN-om

konvertuje RGB boje u komponente IN'fEGERTORGB red, green, blue (crveno, zeleno,

(jETW INDU\VCORD setovanje prozora ltwindowsa" za

"fizicke" koordinate

pI avo) ~:ET\j[r~VY'PORT setovanje izlaza

RGBTOINTEGER konvertuje integer definisan sa red, crreen i blue boje

SE~l'VIEVvY(JP_C sctovanje organizaeije izlaza (windows-a)

FLOODFILL ispuna povrsine iIi maske :;E'1'WINDOV/ setovanje prozonl - window

FLOOIJFILL W ispuna prozora ;\RC definisanjekruznog Iuka

~LOODFILLRGB ispuna sa RGB povrsine ,3" He C _ \'I\l definisanje kruznog luka u prozoru

FLOODFILLRGB IV ispuna sa RGB povrsine za prozor

- (windows)

CLEARSCRFEN brisanie zasiona - skrina [eLUPSE detinisanje elipse iii kruznog luka

OETBKCOLOR vracanje erne boje za tekst I grafiku

GETBKCOLORROB I vracanje RGB boje za tekst i grafiku __ I ELLIPSE W definisanje elipse iii kruznog luka u

I - prozoru

GETCOLOR vracanje indeksa boje C ETCU RRENTPOS rn 0 N definisanje trenutne pozicije kursora

I (~ETCULORRUB vracanje indeksa RGB boje GETCURRENTPOSITJON W ucfinisanje lrenutne pozicije kursora -

CETPIXEL uzimanje piksela za prozor

GETPIXEL W uzimanje piksela za prozor CRSTATUS definisanje statusa

GETPrXELRGB uzimanje RGB piksela UNETO definisanje linije

GETPTXELRGB 'vV uzimanje RGB piksela za prozor -LINETO - W definisanje Iinije u prozoru

GETPIXELS visestruko uzimanje piksela MOVETO povlacenje linije

OETPIXELSRGB visestruko uzimanje RGB piksela

GETTEXTCOLOR davanje boje za tekst MOVETO W povlacenje linUe u windows

-- kooruinatama

GETTEXTCOLORRGB davanje boje za lekst RGB PIE definisanje kruga

REMAPALLP ALETTERO B davanje palete RGB PIE - W definisanje kruga u prozoru

SETBKCOLOR setovanje crne boje za tekst i grafiku POLYGON clefinisanje poligona

SETBKCOLORRGB setovanje ROB boje za tekst i grafiku POLYGON - W definisanje poligona u prozoru

SbTCOLOR setovanje boje RECTANGLE definisanje pravougaonika

SFoTCOLORRGB setovanje ROB boje RECTANGLE \(\T definisanje pravougaonika u prozoru

SETPIXEL setovanje piksela SETPLXEL \;V setovanje piksela za prozor SETPIXELRe;B setovanje ROB piksela

DlSPLA YCURSOR prikazi poIozaj kursora CETTEXTPOSITION sctovanje pozicije teksta GETTbXl'''NTNDOW setovanje pozicije teksta u prozoru

SETPfXELRGB W setovanje RGB piksela za prozor OUTTEXT prikaz leksta na skrinu

SETPIXELS visestruko setovanje piksela SETTEXTPOSITTON setovanjc pozicije starta teksta

SETPIXELSRCB visestruko setovanje RGB piksela SETTEXTWINDOW sctovanje pozicije starta teksta u

SETTEXTCOLOR setovanje boje teksta

SETTEXTCOLORRCB setovanje boje teksta - RGB grafika

prozoru SETFONT definisanje fonta za tekst

GETFILLMASK definisanje podrucja ispune (fill) SETGTEXTROTATION definisanje ugla ispisa leksta

GETUNESTYLE definisanje stila Iinije GETIMAGE ocitavanje slike (image)

GETWRlTEMODE definisanje moda za ispis GETIMAGE W ocitavanje slike (image) u prozor

SETCLIPRGN definisanje maske na prozoru IMAGESIZE definisanje velicine slike (image)

SETFILLMASK setovanje podrucja ispune

SETWRITEMODE setovanje nacina ispisa

GETPHYSCOORD prelazak na "fIzicke" koordinate

CETVIEWCORD setovanje pregleda za "fizicke" koordinate

IMAGESIZE W detlnisanje velicine slike (image) u

- bajtovima

PUTIMAGE vracanje view-port koordinata slike (image) u bajtovima na displej - skrin

PUTIMAGE - W vracanje view-port koordinata slike

GETVIEWCOORD - W setovanje pregleda prozora "windowsa" za "fizicke" koordinate

(image) u bajtovima na displej - skrin u definisani prozor

154 155

Page 84: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windU\lse

LOADTMAGE ocitavanje slike sa diska u memorUu iIi na skrin

LOADIMAC,E W ocitavanje slike sa diska u memoriju

- ili na skrin u prozoru

SAVEIMAGE cuvanje slike na periferni dio rac. (windows bilmapa - .BMP) cuvanje slike sa prozora skrina na

SAVElMAGE W periferni dio rac. (windows bitmapa--

.BMF)

New ~.~ . ~. . DEI

FUes Protects I' Wort~PdCel, f Other DocuUlen!s !

Re.;dy

)~Startl (:!)[11102:5Z'COP!aJel

program f_3.1 y(x)=x**3-9*x-7

USE DFLIB CALL graphicsmode () CALL drawlines ()

END

Ir;;-DiG~~~L Vi;:;-r;;a;­slika 3.20

SUBROUTINE graphicsmode () . USE DFLIB

156

RacZlnarska grafika sa FORTRAN-om

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

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

Page 85: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windowse

DATA options jllt1courierl II, J't'helvllT f 11t 1tmsrmn'!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", &

"100", "200", "300", "400", "500", "600", "700", "800", "900", "999" /

crtanje boxa

status=REC'I'ANGLE ($GBORDER, INT2 (0) ,INT2 (0) ,maxx, maxy)

numfonts=INITIALIZEFONTS()

! izbor fonta i velicine slova

!FONTNUM=SETFONT('t' 'arial' 'f5w2i')

I racunanje koordinata za funkciju f(x) 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

Racunarska grajika sa FORTRAN-om ----------------------~

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

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»

podjela po x osi

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

Page 86: FORTRAN - Programiranje Za Windowse

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

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

Racunarska grat/ka sa FORTRAN-om

idyy=idyy+idyyl i yy=maxy-(isp-l)*idY'Jl-40

CALL MOVETO (O,iyy,xy) CALL OUTGTEXT (podio(ipodio))

END DO

CALL MOVETO(INT2(70) ,INT2(150) ,xy) CALL OUTGTEXT (' KRIVA') CALL MOVETO(INT2 (70), INT2 (180) ,xy) CALL OUTGTEXT(' jednacina Y=X**3-9*X-7')

END

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

Page 87: FORTRAN - Programiranje Za Windowse

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

Page 88: FORTRAN - Programiranje Za Windowse

I

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

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 l'avStarlVicwer Ogranicava - zavrsetak podrucja za Array Viewer favendviewer

Data Acces Pridruzuje i prikazuje specificirani fajl la Array Viewer favSetFileName

Prikazuje specificirani niz u ''\ornry Viewer favSetArray Region of Interest (R01) Definise poziciju bv,ja prvog i posljednjeg elementa u ROI f~lVSetRoi

Daie pozicii'''l~rvog broja u ROI za date dimenzije favGetRoiLh [Daje po~'iciju posljednjeg broja u ROI za date favGetRoiUb dicenzije

Setuie dimenzije kolona i redova ravSetRowColDim Daje podatke za kolone i redove favGetRowColDim Setuje ROI sa aktuelnom "D" slikom favSetRoi2D

Data Filter Seluje povezivanje Graph View sa vrijednostima koje favSetDataClamp su van podrucja Daje povezivanje Graph View sa vrijednostima koje su favGetDataClamp van podrucja Setuje gornju i donju granicu za X koordinatu u Graph

favSetXClamp View

Daje gornju i donju granicu za X koordinatu u Graph favGetXClamp View ..

164

Racunarska grafika so FORTRAN-om

Setuje gornju i donju granicu za Y koordinatu u Graph favSctYClamp View

Daje gornju i donju granicu za Y koordinatu u Graph t~1VGetYClamp View

Setuje gornju i donju granicu za Z koordinatu u Graph favSetZClamp View

Setuje gornjll i donju granicu za Z koordinatu II Graph favGetZClamp View

Setovanje za osvjeZenje menija (da iii ne) favSelDataRefrcshEnahle Davanje naredbe za osvjezenje menija (da iIi ne) favGetDataRefreshEnable Redraw - za rel1ekciju izmjene vrijednosti podataka favU.l2.date Palette Kreiran je aktuel ne 'pakte -~ ,. -:.-

favS'ttCustomPalelte Setovanje boje palete favSetPaletteld Davanje idenlifikacije za boju palete favGetPal~tte[d Setovanje podrllcja u kojem se paleta llpotrebljava favSetPaletteRange Davanje podrucja vrijednosti u kojem je paleta

favGetPaletteRange zahtijevana Automatsko pridruzivanje palete favSclPaletleAutoAd just Upotreba palete (da iii ne) favSetUseColorPalette Pridruzivanje definisane boje paleti ravGetUseColorPalelte

i Prikazivanje palete (da iii ne) favSctShowPalette Davanje prikaza setovanih paleta favGetShowPalette

Graficke ose I Auto skaliranje osa (da iii ne) favSetAxisAutoScale

Davanje auto skaIiranja osa CavGelAxisAlltoScalc Pridruzivanje dimenzija osa sa podjelom fa'i£@tgim£~alc

I Prikaz grafickih osa I favSetShowAxis Davanje naredbe zaJ2rikaz setovanih osa favGetShowAxis Izabrana selekcija (da in ne) favSetDataSelectEnable Prihvatanje izabrane selekcije sa podacima favGetDataSelectEnable

Graph View Setovanje tipa grafike (visina crteza, image map,

favSetGraphType vektorski prikaz iii prikaz u ravni) Izbor aktuelnnog tiJ.l.a grafike fa vGetGri!:£h Type Setovanje stila grafike (mreza, povrsina, bar, linije ili

favSetGraphStyle tacke) Izbor ,.g:afickog stila l'avGetGr<IQ.hSt:i!e Setovanje vrijednosti definisanih granica crteZa za

favSetGridDensity -.Il.rikaz graficke povrsine Izbor gustine linija za pravougaonik favGetGridDensity Setovanje pocetnog stanja za prikaz favSetDg~thcue

i Prihvatanje rJocetnog stanja za prikaz favGetDg~thcue

165

Page 89: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windowse

Setovanje vrijednosti za linije paralelograma koje ce l'avSctShovvGrjd

hiti prikazane u grafici Izbor za setovanje pri ShowGrid - prikazu gntfike na favGctSho'vvGrid displcju Krivc linije (da iji ne) l'avSetLineSI110()th

Izbor za iskrivljene linije fa vGctLi neS m(lOlh

Height Plot Setovanje ve!icine Z-ose relativno od X i Y osc fa vSctZScale Prihvatanje Z skaliranih vrijednosli fa vGetZScale ]ednodimcnzjonalnjJekst i boja (d~~Jli ne) u mapi i"avSclTextureMode

Davanje tekuceg stanja (texture) i"avGelTcxtureModc Setovanje aktuelnog osjencenog stanja CavSe~~ading

Izbor za osjencavanje " CavGelShaciing Setovanje osvjetljavanja favSetHighLighl Izbor za setovanu vrijcdnost osvjetljavanja CavGetHighLight Setovanje sakrivenih linija favSetHiddenLight Izbor za definisane sakrivenih linije favGcLHiddcnLighl

image Map

I Setovanje orijentacije (IDENTITY, XFLIP, YFLIP, favSetImageOrientation I XYFLIP) i Prihvatanje aktuelne setovane orijentacije favGellmagcOrientaliol1

I Setovanje !,f8lhodno definisanog odnosa (Aspect CavSctFixcdAspect [ ratio) i Prihvatanje ranije definisanog odnosa favGetFixcc!Aspcct

Setovanje jinearnog filtera za Image favSetImageFiller

Prihvatanje aktuelnog setovanja fa vGctlmugeFi j ter

Veciol' Graph Sctovanje komponenata indeksa vrijednosti favSetComplndex

Prihvatanje izabrane opcije setovanja favGetComplnc!cx

Data View Setovanje preciznosti sa kojom ce biti prikazan broj u favSetPrecision crtdu (View) Prihvatanje selovanih podataka za preciznost favGetPrecision

Camera Setovanje pozicije kamere favSetCameraPosition

Prihvatanje izabrane pozicije kamere favGetCameraPosition

Setovanje centra kamere u zoni od interesa (COL) favSetCamer;lCoi

Prihvatanje setovanih podataka za COL favGetCameraCoi

Setovanje pozicije kamere kao fiksirane pozicije favSetHoll1ePosi tion (home position)

166

I

Racunarska grafika sa FORTRAN-om

Setovanje pozicije kamere u fiksiranu poziciju CavToHomcPositiol1 (home position)

Marker Setovanje pozicije kolone/rec!a j"avSetRowCol Prihvatanje setovane pozicije i"avGctRowCoj Prikaz markera i"u",SetShowMarkcr Prihvatanjc aklulne prikazane pozicije nnrkera favGctShowMarker

M iscei laneous Setovanje stringova koj i ce biti prikazani l! nasiovnom

I

- -----

kucistu Array Viewera favSetArrayName .... _---

Davanje broja gresaka i"avGetErrorNo Prikaz Array Viewer prozora (Window) favShowWindow Setovanje stringa favSclAnl1otaliol1

Primjena paketa Array Visualizer sa upotrebom nastavku.

rutina prikazana Je u

Program za graficki paket Array Visualiser

PROGRAM main

USE AVDef ---------.u~s~~ DFLib

integer status

REAL VDATA ( 2 , ° : 10 )

VDATA (1,1) vrijednosti za x VDATA (2,1) vrujednosti za y

do i=O,10 vdata(l,i)=i vdata(2,i)=vdata(1,I)**3-9.*vdata(1.i)-7. end do

GRAFIKA - ARRAY VISUALISER

CALL FAGLSTARTWATCH (VDATA,STATUS)

print * ',startuje se array visualiser' call faglshow (vdata,status)

167

Page 90: FORTRAN - Programiranje Za Windowse

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

read *, key: .. i f ( -·key . eq ~o-l ) then

y=x**3 - 9*x -7'

call faglEndwatch (vdata,status)

print

stop end if end do

end

168

* , done! I

slika 3.22

Racunarska grafika sa FORTRAN-om

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

PLOT 88 biblioteka ukljucuje slijedece opcije:

../ 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:

../ 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

Page 91: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windowse

if' 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 if' IBMPLX ~ izbor IBM karakter seta if' STMPLX ~ izbor SIMPLEX jeelnostavnog karakter seta ./ DUPLX ~ izbor elupliranog karakter seta if' COMPLX ~ izbor kompleks karakter seta ./ TRIPLX ~ izbor tripleks karakter seta if' 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 if' 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

Potprogrami dvodimenzionalnih kontura ./ ZGRID ~ izvoctenje dvodimenzionalne interpolacije za konstrukciju unutar

programa za date tacke upotrebom Laplacian i splajn interpolaeije.

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

170 171

Page 92: FORTRAN - Programiranje Za Windowse

FORTRAN prograliliranje za windowse

Primjer:

juli 1999. godine

PROGRAH pl88

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

;U=l1

DO 1=1,11 X(I)=I-1 Y(I) =X(I) **3 END DO XHAXl=HAXVAL(X) YHAX1=HAXVAL(Y) XHINl=HINVAL(X) YllIN1=HINVAL (Y)

9*X(I) - 7

! inicijalizacija za plot !

CALL PLOTS(3,91,91)

! setovanje ~a boju I

CALL COLOR (15, 0) CALL NEWPEN(4)

! setovanje za factor !

FACT=I. CALL FACTOR (FACT)

XHAXll=ABS (XHINl) +ABS(XMAXl) YHAXll=ABS(YMINl)+ABS(Y~~I)

CALL WINDOW(O.,O.,XMAX,YMAX)

172

Racunarska graflka sa FORTRAN-om

CALL PLOT(I.,I.,-3)

crtanje linija

XSKALA=9./(1.2*X~~II)

YSKALA=8./(1.2*YMAXll)

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)

CALL CURVE (X,Y,-10,1.) ! GOTO 900

YPOC= 0.223+ABS(Y(I) )/2.2

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)

KRAJ CRTANJA

173

Page 93: FORTRAN - Programiranje Za Windowse

FORTRAN programlran e '- . · 'J', "(/ windowse

O 999) CALL PLOT(O., ., I

END

174

Page 94: FORTRAN - Programiranje Za Windowse

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 Io.;,I$ ~lnd0W !;i<.>lp

;I:~ :5 :aj~~t1£J"i2t : ~jtH_

Raady

:!ijilstartIUA·O~~ ~.'~"'~. t ®Kn~Q.3~d- rl1!crosoft word 1!.~~~~~~.TAl .. ~~sua.1 ~~~.~ra? .. Slika 4.1

Page 95: FORTRAN - Programiranje Za Windowse

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

FORTRAN i drugi programskije:::.ici

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

Page 96: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windowse

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.

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<stdio.h> maine ) { printf ("zdravo svima\n"); }

Prva linija # include<stclio.h> nagovjestava da ce se koristiti standardna biblioteka. Naredba # include <stdio.h> 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

FORTRAN i drugi programski jezici

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:

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

i81

Page 97: FORTRAN - Programiranje Za Windowse

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 };

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.

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

__________ ....: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];

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

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

Page 98: FORTRAN - Programiranje Za Windowse

FORTRAN pmgramimnje za windowse

X=++a Najprije poveca zajedan i zatim stavlja tu vrijednost u X

Ako je a bio 4, onda ce Ll prvom siucaju biti X=4, 01=5, dok ce u drugom slucaju biti X=5, a=5.

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:

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.

Tabela 4.1 auto double int strllct break else long switch case enum register typeclef char extern return union

184

const

continue default do

float for £oto

FORTRAN i drugi programskijezici

shurt

sizeof static

Rezervisane rijeci vezano za komp01jler (decI fort rail near

far

2.3 VISUALFORTRAN/vISUALC++

void volatile vvhl1e

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).

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

Page 99: FORTRAN - Programiranje Za Windowse

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 IZ C++ pozivanja programa pisanog u C++ iz FORTRAN-a.

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.

186

FORTRAN i drugi programskijez.ici

Slika 4.3

U navedenom primJeru "poziv_pirnmide.for" je FORTRAN-skog programa koji poziva, a "piramida.c" je potprogtama pisanog u C-u koji se poziva.

Primier ::,:t pozi'lanje potp.ro'~:.rrEUila pis.::tW:J9 !.1. (-··n iz Fi)RTRA.lf···a If

llne Ilne

Ir .. te::rf,:5,ce zo. ~./e2U izm:edi1.l FORTRAlT·-5. i C-a Z~{ poziva.nje patp:rcgralftB.

IINTERFACE TO SUBROUTINE piramida [C,AI.IAS: '_piramida'J (a,b) :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

IPRIHT '( 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 l?<:,t.py-ci~:r;ama ICALL pira.m.i~~ C~s, bs)

! Rrai programs

ISTOP END

datoteke datoteke

187

Page 100: FORTRAN - Programiranje Za Windowse

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 pocetku nalaziti naredbe za II

se u FORTRAN-skom programu moraju na (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"):

a funkcije m,.,~ ", "b (cha.r- a ~

/"* cick.l.':JrE\ci.l;:) \T'::J.ri·iz:ll"J.ll k.GJf:"; :~.8 kCJrl:~,t,e U I1.l.rJ.::.ciji. (potp.rog:t'.::l.J1l1..l.) ,*,'

char Jfl, n: POJll, -

IfI.=a ..

n=b;

iOlt ij.k.

pOJfL=n._

JIl=POJil" I }

:r-e:zul to. t,3-, ·x·/ ("Piramida za interval [%c. %cJ'n",m.n);

D1- i=J[t, i-c=n; i++) for (Jr.=!), k<1'l-i k++) putchar-(' ').

(j=m.; j<-=i-l~ j++) putchar(j)~ I·:rhile (j putchar(j--), pu tchar ( I --,n ), }

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

___________ F~O~R~T:..:R:..:A~N i drugi I_Jr_o--,-g'-.'_·(!_n_1s_·k_ic:.-j_ez_i_c_i __________ _

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.

Slika 4.5

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

Page 101: FORTRAN - Programiranje Za Windowse

,-'-

FORTRAN programiranje za windowse

#inclll.de <stdio hI

FAI<TORIEL (int n), PITN:;ORA (r lOB.t d._ 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

Ispis koda FORTRAN-skog potprograma "FAKTORIEL.for":

FUnCTIOn FAKTORIEL (n) n [VALUE] i, a.J(lt

'" i

amt

I

Ispis koda FORTRAN-skog potprograma "PIT AGORA.for":

~ SUBROUTIHE potprCf':JrdJlt PITAGORA fer

ISUBROUTINE PIT A,GORA (a, b" c) REAL a [VALUE] F:EAL b [VALUE] REAL c [REFERENCE] [, c - SQRT (a * a + b ~b) END

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

__________ -=-F.::O:..::R~T:..:R'.':A~N i drugi programskijezici

Slika 4.6

3. PROGRAMSKI JEZIK VISUAL BASIC

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

Page 102: FORTRAN - Programiranje Za Windowse

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.

-!I~ ~

GO :::J~

it9"-.

- ~.~

ill

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

FORTRAN i drugi programski jezici

,/ 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.

3.] VISUAL FORTRAN /VISUAL BASIC

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

Page 103: FORTRAN - Programiranje Za Windowse

FORTRAN programiranje za windowse

U tabeli 4.2 datje pregled usklaaenosti tipova podataka u VB-u i FORTRANU:

Real

String

Types

I Problem pozivanja-Cal i

Tabela 4.2

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 I Kao default Visual Basic i Visual Fortran imaju single i double I 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 I BSTR. U ovom slucajll treba voditi raClll1a 0 llsaglasenosti,S:l I 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 I deklari;;::- !liz velicine "n" to znaci cia ima n+ I elemenata u i, Fortranu jer Ba~;C startuje sa nultim elementom.

I! Tipovi koji su deklarisani u 3~1'lCH mogu biti priclruzeni iz Basica

u Fortran.

I Kao osnova Visual Basic i Visual Fortran imaju single i double Logical

I precision sa istim brojem bajtova to jest sa 2 bajta.

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 lib "d: \MyProjects\Fcall. dll" (AI as Single, A2 as Single)

Deklarisanje Fortranske funkcije sa imenom FortranFunc koja takoae ima dvije cjelobrojne vrijednosti a kao povratnu ima single-precision vrijednost:

Declare Function FortranFunc Lib "d:\MyProjects\FFun.dll" (AI as Long, A2 as Long) As Single

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

FORTRAN i drug! programskijezici ---------------------

SUBROUTINE FortranCall 'DECS ATTRIBUTES DLLEXPORT :: FortranCall 'OVO je eksport

ime !DECS ATTRIBUTES ALIAS ovim je setovano

)I FortranCalll1 FortranCall ! Sa

Primjer: . . Potrebno je vrsiti racunanje povrsine trougla ako su date stral11ce a, b J C

i uglova trougla primjenom kosinusne teoreme.. 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<fE u FORTRAN-ll, a racunanje uglova pnm,!enom potprograma FUNCTION u FORTRAN-u. Subroutina je napisan~,na dIrek~OnJu "d:\Program Files\trio" a potprogram FunctIon u clirektoflJu d:\Pro",r~m Files\ugao2". Sa ovim primjerol11 htjelo se omogu6iti koristenje. oba .tIpa potprograma iz VB-a sa FORTRAN-om. Neopboclno je ~1ap~menutl da Je u opisanim rutinama vrlo vazno voditi racuna 0 putu za poveZlvanJe potprograma I

programa u jednu cjelinu.

Deklarisanje interfejsa:

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

195

Page 104: FORTRAN - Programiranje Za Windowse

..illl ;

0 8

.:..Jllil r6l"-

196

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") b = InputBox ("unes1. stranu b rt )

'c """ Inputiox ('unesi str::ann cit")

3:f ((3 + h) > c And (b + c) ;- a And (c + a) ;- bl The

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

L8be12.Cap1:10n '" "alfa"''' .~ ugaoa Labe 13. Capt lon '" "beta=" .;; ugaob

"game=" & ugaoc

"NETACNI PODACI"

Slika 4.8

Slika 4.9

FORTRAN i drugi programskijezici

Freody ~-Ln--i:'(i;T 1"

;;f:!Start iU. ~ i!:~ .;:n .. 'J? i ~prOJedl' r':icrOSDft Visu<), ·1 ~KflliQa4c, r4icrosoft w'xd Il~DI.GIT~~.Vi.~.U~lc~.or~r~· . .";

Sl:c:. Ccmlmandl ·::-llc;,\:('

).s Single

DUll lJ 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 ;0 Inpu-r.Bc:{ ("unesi str:anu c")

Slika 4.10

If ((a + b) > c J'.lld (b + c) ). a _tl..nd (c + a) ). b) Then 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

~~ti~lifffi~"'~"IIII"lIlIlIillIlIlG]§~1

;~- :-, ,,1;1 ' "';;c;~:-,-

1·=<,3~--;;;2i-

.: :::L~: ....... ,J"' •. : 13;30

197

Page 105: FORTRAN - Programiranje Za Windowse

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 1 36; '152 assembler, 9, 16 analogni racLinari, 4, 9 auton1atsko gencrlranje progralna, 23

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

c++

jezik) 162: 17E interfeis, 178 I FORTRAN, 177

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

Page 106: FORTRAN - Programiranje Za Windowse

,0 '-0 "generator compileri, 20 GOTO, 26, 57

:n - tormal, 52 grafika sa Fortranom, 152 :;rafika sa ARREA VISUALIZER, 161

,grafika sa PLOT 88, 169 ,graficke rutine, 152

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

K

assembler, 16 deklarativni, 18 funkcionalni, 19 masinski, 16 objektno orijentisani, 19 paralelni i vektorski, 19 prirodni, 21 proceduralni, 17

kompajler, 17

L LOGICAL 40 iogicke

naredbe,43 izrazi,43

logicki operatori, 43, 66

M main, 9 memorija

RAM, 74 ROM, 74

MODULE,84

N

programska jedinica, 95 primjer, 95 sintaksa, 95

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

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

PLOT 88 pakel program, 168 spisak naredbi, 168

pozivanjc (llnkcija, 87 PRINT, 49, 97 PRIVATE. 129 PROGRAM

Q

progrmnska jedinica, 84 prirnjeri, 108-126, 156-161, 167-168,172-174,182-187,194-197

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

T

sintaksa, 91 primjer,91

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

Page 107: FORTRAN - Programiranje Za Windowse

LITERATURA

J. 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.

3. W. E. Mayo, M. Cwiakala: "Programming With Fortran 90", Schaums Theory and problems-A Mc Graw-Hiil Publication, 1995.

4. DluITAL Array Visu<liizer, Digltal Equipment Corporation, i 998.

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.

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, C. Ljubovic: "Programiranje 'Fortran' ", Svjet10st Sarajevo, 1984.

IS. I.Endzel: "Praticeskoe uvedenie v maijinnuo grafiku", Izdateljstvo "Radio i svrzi", 1982.

16. "IYJ1KROSOFT WINDOWS NT WORKSTll.TION", Mikrosoft Corporation, 1997.

] 7. "/vlikrosof't Visual C++ Professional Edition", Mikrosoft Corporation, ]997.

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, 507-516), ]990.

20. E. Salihovi6: "Programiranje - Programskijez.ik C", INFO 13, 1999.

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.

Page 108: FORTRAN - Programiranje Za Windowse

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.