1
Xmax
X mill
= (L - R)CO{ Sin-
fu=x max -x· 111111 a
.
o=SlD
_I(E + Rsin
v= dx = dt
L
1 (
L~ R )]
8)
Listing pragrama: PROGRAM MOTMEHAl~IZAM DOUBLE PRECISION PI ".REAL N,R,L,E,FI,OMEGA,X,XMAX,XMIN,DX,V,A,FIMAX,FIMIN,DFI,THETA REAL FI1,FI2,DFIDTH OPEN (UNIT=l,FILE='ULMOTMEH' ,STATUS='UNKNO~m')
)0-- Sine.l
.. d 1> .. 2[~(d1> R • 1>=--=01 - - tan1>----dt l de L cos 1> 2
J
Gdje je: n - brzina koljenastog vratila u o/min, E - ekscentricitet, L - duzina klipnjaca, R - poluprecnik koIjenastog vratiIa, OJ - ugaona brzina koIjenastog vratila, 8 - ugao zakretanja koljenastog vratila, x - pomjeranje klizaca, xmax - max pomjeranje klizaca xmin - min pomjeranje klizaca fu - hod klizaca v - brzina klizaca a - ubrzanje klizaca
114
min ugaono pomjeranje iii zakret klipnjace
i3.cD - ukupni ugaoni zakret klipnjace
cos
i3.
Rease (J;>=-=01--elt Lcos(J;> 2
.
Rol- Sin (8+
ugaono pomjeranje iIi zakret kIipnjace max ugaono pomjeranje iii zakret klipnjace
Unos podataka PRINT*, ' motornog mehaniz 1ma' PRINT*, ' vrijednosti ' PRINT * READ (1,*) READ (1,*) READ (1,*)
R L E
RE,zm
N
(1, *)
Program za racunanje nekih vrijednosti
Ucitavanje potrebnih
PI=3.14159265358979323846 Ispis komentara PRINT 1020, ' Za ','R=' ,R, 'L=' ,L, 'E=' ,E, 'N=' ,N PRINT * PRINT*, ' PRINT * PRINT 1030
REZULTATI SU'
C ProraCun trazenih vrijednosti DO 1=1,12 READ (1,*) THETA THETA=(PI/180.)*THETA OMEGA= (PI*N) /30. FI=ASIN( (E+R*SIN(THETA) )/L) XMAX=(R+L)*COS(ASIN(E/(R+L) )) XMIN=(L-R)*COS(ASIN(E/(L-R» ) DX=XMAX-XMIN V=R*OMEGA*(-SIN(THETA+FI)/COS(FI») 115
FORTRAN programski jezik:;:a windowse
FORTRAN programiranje Z{l windowse
----------------------~.
90.
X=R*COS(THETA)+L*COS(FI) A=(R*OMEGA**2)*(-COS(THETA+FI)/COS(FI)(R*(COS(THETA))**2)1 l(L*COS(FI)*COS(FI)*COS(FI) )) FIIvIAX=ASIN ( (E+R) IL) FIIvIIN=ASIN( (E-R)/L) DFI=FHlAX-FHUN FI1=OIvIEGA*(R*COS(THETA)/(L*COS(FI))) DFIDTH= (R*COS (THETA) )/(L*SQRT(l«ElL) + (R/L) *SIN(THETA)) **2)) FI2= (OMEGA*OMEGA) * «DFIDTH**2) *TAN(FI)(R*SIN(THETA) I (L*COS(FI) ))) IF <10E:C'2t~f'I2=0 FI=FI*180,/PI IF (ABS(FI)<10E~5) FI=O TTHETA=THETA*(180./PI)
135. 180. 225. 270. 330. 360.
Iazlazna datoteka:
Ispis rezultata PRINT 1010, TTHETA,X,FI,V,FI1,A,FI2 END DO 1010 FORMAT(2X,F4.0,3X,F5.2,lX,F6.2,lX,F7.1,lX,F6.1,lX,F10 .2,lX,F10.2) 1020 FOR}1AT(3X,A,4X,A,F4.0,2X,A,F4.0,2X,A,F4.0,2X,A,F6.0) 1030 FORlfL4T(2X,5HTHETA,4X,lHX,6X,2HFI,6X,lHV,5X,3HFl1,6X,1 HA,10X, 13HFI2,1) CLO SE.~(,-,1_)'---_ __ STOP END
Za motorni mehanizam za E=O sa n=4800 o/min i radijusom koljenastog vratila R=2 kao i duzinom klipnjace L=7 i za uglove rezultati prikazani na sljedecoj slici: Ulazna datoteka:
e = 0° -
0
360 dobijaju se
Zadatak 2
Slobodne oscilacije Ovaj program daje tacno rjesenje diferencijalne jednacine koja opisuje oscilator sa prigusenjem koji slobodno osciluje: In!: + Ct + kx = 0 . Ulazni podaci su masa Izlaz ce biti:
4800 O. 15. 30. 45. 60. 116
konstanta oprl1ge k i konstanta prigusenja c.
I. OJ za neprigusen sistem tj. kad je C
2 7
o
111,
Pocetni uslovi su pomak i brzina u trenutku t=O (xo i
xo )
Jednacine:
cknf
= 2 -Vfk,;; Km
O)~~k_( c J2 m'
2m
117
FORTRAN progmmimnje za windowse
x=
FORTRAN programskijezik za windowse
-------------~
Gdje je:
(ci: + kx) m
k
Neprigusene oscilacije
111
(c 2 -4km < 0) c
x(t)=Re- 2
J)1t
cos(wt-8)
x(t)=-ROJe - 2111'
c
C
--I
8)---Re
sin(cu/ -
2m
2111
cos(OJt -81
Napomena: Za prigusenje, OJ nema znacenja i u stvari je imaginarni broj.
Gdjeje:
Za
Rcos8 = xo
l'
R sinS =1- Xo +.--X . C o OJ 2m
C=Ckril, OJ=O.
Ovaj program zahtijeva unosenje uglova javlja greska.
J
Ll
radijanima, u suprotnom se
Listing programa:
Kriticno prigusenje: ( C. knf'
iIi c
2
* Deklaracija varijabli i otvaranje datoteka
= 4km) c
X
(t) -- "fA krit + Bkrirt-f)e
i(t) = [B kril
C
- -
2m
--I
2111 c
(A kril + Bkri/)
Je
***********************************************************
* * Unos podataka
* * Ispis naslova i ucitanih vrijednosti PRINT *
Prigusene oscilacije:
(c 2 -4km > 0)
'()-A t -
2m
PRINT * rnasa READ (1, *) M READ (1, *) C koeficijent pigusenja istezanje opruge u stanju READ (1, *) XST rnirovanja pocetno izduzenje READ (1, *) XO pocetna brzina READ (1, *) DIXO ***********************************************************
Gdje je:
B x(t)= A rer,r +B 1
X
--I
PROGP~M DIFERENCIJALNA JEDNACINA REAL X,DIX,OMEGA,R,DELTA,M,C,XO,DIXO,A,B,K,CKRIT REAL XST,G,Rl,R2,T,Kl DOUBLE PRECISION E OPEN (UNIT=L F"LLE ULDIFJED', STATUS=' UNKNO\\iN' ) OPEN (UNIT=2,FILE=' IZDIFJED' ,STATUS='UNKNO~m')
{)Ve
()V
1]1
+
()Ve
'21
{)V
r;2 erz!
WRITE WRITE PRINT PRINT PRINT
(*,100) M,C,XO,DIXO (2,102) M,C,XO,DIXO ..
*
REZULTATI SU'
* 119
118
FORTRAN programskijezik za willdowse
FORTRAN programiranje za windowse
PRINT 1020 Ij\7RITE (2,1020) ***********************************************************
* * Izracunavanje potrebnih vrijednosti G=9.80665 E=2.718281828459045235 K=(M*G)/XST CKRIT=2 k SQRT(K*M) DO T=O,l.l,O.l THEN OMEGA=SQRT( (KIM) - (CI (2*M)) **2) R= C/(2*M) R=R*XO+D1XO R=R**2 R=R/(OMEGA)**2+XO**2 R=SQRT(R) DELT}\=ACOS (XO IR) K1=- (CI (2*M)) X=R* (E'C (?"X1)) X=X*COS(OMEGA*T-DELTA) D1X=-OMEGA*X*SIN (OMEGA"TDELTA)+K1*X*COS(OMEGA*T-DELTA) ELSE IF (C==CKRIT) THEN A=XO B=D1XO+(C/(2*M) )~XO X=(A+B*T)*E**(-T*C/(2*M) ) D1X=(B-(C/(2*M) )*(A+B*T) )*E**(-T*CI (2*M)) ELSE R1=-(C/(2*M))+SQRT«C/(2*M))**2-(K/M) ) R2=-(C/(2*M))-SQRT«C/(2*M))**2-(K/M) ) B=(D1XO-R1*XO)/(R2-R1) A=XO-B
*20Hpocetnu poziciju XO=,F4.2,lX,20Hpocetnu brzinu DIXO=,F4.2,//, *10X,12HREZULTATI SU,/) 1010 FORJVLA.T(lX,F5.2,3X,F5.2,3X,F6.2) 1020 FORMAT (4X, 1H'I' , 7X, IHX, 7X, 3HD1X, /) ****************************************************** ***** ***********
* Zatvaranje datoteka i CLOSE (1) CLOSE (2) STOP END
zavrsetak programa
IF(
Primjer:
Masa od 20 gr objesena je 0 dpiralnu oprugu i isteze je za 10 em. Masa je povucena nanize za dodatnih 4 em, zadrZana neko vrijeme, a zatim pustena. Pronaci pomjeranja i brzinu masenog utega u ntervalima od 0,1 do 1 sek za c=0,05 Nsec/m. Uiazna datoteka: 0.02 0.05 0.10 0.04 0.00
lzlazna datoteka:
X=A*E~*(R1*T)+B*E**(R2*T)
D1X=A*R1*E**(R1*T)+B*R2*E**(R2*T) END IF PRINT 1010, T,X,D1X WRITE (2,1010) T,X,D1X END DO ***********************************************************
***********
* Forrnati 100 FORMAT (lX,10HZa masu M=,F4.2,lX,13Hprigusenje C=,F4.2,/,lX, *20Hpocetnu poziciju XO=,F4.2,lX,20Hpocetnu brzinu D1XO=,F4.2) 102 FORMAT (lX,10HZa masu M=,F4.2,lX,13Hprigusenje C=,F4.2,lX, 120
121
FORTRAN programski jezik za windowse
FORTRAN programiranje za windowse
-------------
10.3 MJESOVITI PRIMJERI:
Newtonova metoda Ovo je vjerovatno najjednostavnija numericka metoda koja se primjenjuje u rjesavanju jednacina, i vee je ranije spominjana. To je iterativna metoda, sto znaci da ona ponavlja korake radi poboljsanja procijenjenog rjesenja. Ako je Xk aproksimacija korijena jednacine, onda je slijedeea aproksimacija Xk+! data sa
gdjeje
f
DF(X) COMPLEX X,DF DF=2*X+l END FUNCTION DF
. df (x)=-. dx
END PROGRAM ComplexNewton
Stmkturni plan za primjenu Newtonove metode je: 1.
Ucitaj pocetnu vrijednost
2.
Sve dok je x k +!
stampaj Xk+! i 3. Stop
Xo
i zahtijevanu tacnost
Ova verzija programa moze se koristiti za nalazenje realnih nula s tim da moraju biti zadata realna pocetna rjesenja. e
If ct:k)1 ponavljaj korake do k=20, prema
_ -
N=l DO WHILE ABS (F(X»)>=IE-6 .AND. N<20) X=X-F(X)IDF(X) PRINT "(2FI0.4)",X N=N+l END DO CONT/\lNS FUNCTION F(X) COMPLEX X.F F=X**2+X+! El~D FUNCTION F
X
f
k
POCETHTJ VRIJEDHOST U OBLIKU (I<, B)'
f(x,) j (x k )
"ITit(:..:)"
--.,--
(X k + l )
Neophodno je ograniciti korak 2 jer proces mozda nije konvergentan.
Kompleksni korijeni
FUNCTIOn DF(X) COHPLEX X, DF DF"'2*X+l END FUNCTIon DF PROGRAM ComplexHewtonJ
Newtonova metoda se moze koristiti za pronalazenje kompleksnih korijena, ali samo ako je pretpostavljeno pocetno rjesenje kompleksno. Slijedeei program pronalazi kompleksna rjesenja jednacine X2 + x + 1 = 0 .
Rezultati izvrsenja programa za ulazne podatke (0,2) dati su na slijedeeoj slici: NESHE POCEfNll URI JEDNGSI U OBLll{u --
~0.Z1
lle<,,):
J",
PROGRAM ComplexNewton
-.29;11 -.'1S:E2; .'1'11)3
t.t?fiS .R2'''S
COMPLEX ::X READ *,X PRINT "(2AIO)", "Re(x)", "Im(x)" PRINT *
-:SOOi!
.8660 .1l6G0
Listing:
122
-.silua
~A~B?
.IllS53
.
123
FORTRAN prograrniranje za windowse
Listing:
Program TRIANG (Trougao)
PROGRl\jVj PTROUG ! RACUNANJE POVRSINE TROUGLA CIJI SU VRHOVI DATI SA KOORDINATAMA
PF:OGRAH TRIAHG LOGICAL FLAG ,I Zas tc:~nca PRINT *, 'UllESITE STRAlfICE ,", b Ie' READ *,iLB,C PRIlIT *, . DUZHiE STRAHICA
FLAG=(A+B) GT.C
AND.
TROUGH, SU' . ,A, B, C
(B+C) GT.ll
AND.
(C+A) .GT.B
IF (FLAG) THEN P=O.5*(A+B+C) POVRS·SQRT(P*(P-A)*(P-B)*(P-C» UGAOA=UGAO(B,C,A)
Ko:r1.sti:se ko"si11lJSn.:;t teoreJita
UGfi.OR=d]GAO(C, A, B)
P:reko F!JNCTI')H lJGAO
UGAOC·18 O-(UGAOA+UGAOB)
PRIHT ~~i~+,
:*,
FORTRAN programski jezik za windowse
----------------------~
REAL }\, ( 3 , 3 ) DO J=1,3 A(l,J)=l. SND DO DO J=1,3 PRIN'J'* 'UNESI KOORDINATE X I Y TACKE' ,J READ * (A(I,J) 1.1=2,3) END DO
'POVRSINk TROUI.:;LA JE'. POVRS 'UGI.OVI TROUGLA Sf' " lJGAOA, UGAOB, UGAOC
ELSE
PRINT *. 'HEISPRAVUI-POGRESNI PODACI ZA STRAHICE' PRIHT * EliD IF END
PT=DET(A)/2. PRIN'r *, 'POVRSINA TROUGLA JE PT=', PT
REAL FunCTIon UGAO(X, TL Z)
PARAHETER (PI=3.141592&5) TEMP= (X*X+Y*Y-Z-x-Z) /( 2*X*Y)
END
UGAO=(180/PI)*ACOS(TEHP) ElID
!
Rezultat izvrsavanja ovog programa za slucaj daje a=l 0, b=20 i c=] 3 dat je na slUedecoj slici:
rzracunavanje povrs1l1e trougla, koj i je dat sa koordinatama vrhova tacaka AI(xI,YI), A 2(X2,Y2) i A 3(x"Y3) moze se izvrsiti koristenjem izraza iz vektorske algebre: !
P=~l 2
X3
Y2 Yo.,
Za rjesavanje determinante koristit ce vee postojeci FUNCTION DET za Cramerov postupak. Kao test-primjer moze pos!uziti pravougli trougao duzine stranica 3, 4 i
5: A,(I,l), A 2 (4,1), A3(1,5):
124
FUNCTION DET(A) REAr., A(3,3) DET=A(1,1)*(A(2,2)*A(3,3)-A(2,3)*A(3,2))-& A (1, 2) * (A (2,1) * }\, (3,3) -A (2,3) * A (3,1) ) +& A (1,3) * (A (2,1) xA (3,2) -A (2,2) *A (3,1) ) RETURN END
Primjer listinga programa za fJesavanje kvadratne jednacine sa mogucnosti nalazenja realnih korijena i kompleksnih korijena, Listing:
Xl X2
FUNCTION - KORISTENO CRAMEROVO PRAVILO
PROGRAM KVADR_JEDNACINA PRINT *,' UNESI KOEFICIJENTE JEDNACINE: a,b,e' READ *, a, b , e PRINT * 'KOEFICIJENTI JEDNACINE SU: a=' ,a, 'b=' ,b, 'e=' ,e
CALL QUAD (a,b,e,R1,R2,*10,*20,*30) 10 CONTINUE PRINT *,' JEDNACINA NIJE KVADRATNA' STOP CONTINUE 20 125
FORTRAN programiranje za windowse
PRINT *,' KORIJENI SU KOJVIPLEKSNI: REAL X + / - 1* IJVIAG . = ' PRINT *, ' , ,R1,' + / - i * ',R2 STOP 30 CONTINUE PRINT *, 'KORIJENI SU: X1=', R1, 'X2=' ,R2
END
SUBROUTINE QUAD(A,B,C,R1,R2,*,*,*) IF(A==O.O) THEN R1=0. R2=0. RETURN 1 ELSE AKO NIJE A=O. TADA JE DISKRIMINANTA: PART1=-B/ (2"11.) ;JISK=B**2-4*A*C PART2= SQRT(ABS(DISK) )/(2*A) IF (DISK
Pl JiJlJi .. l.l.'.'.·.' .l!.•."
II II
I, \...../
R1=PART1 R2=PART2 RETURN 2 ELSE
PART2=SIGN(PART2,PART1) R1=PART1+PART2 IF (R1 /=0) THEN R2=C/ (A*R1) ELSE R2=PART1-PART2 END IF RETURN 3 END IF END IF END
126
!.
I
II ~
1. UVOD Kad tehnicar zal11isli neki objekt, on ga ne oplsuje rljeCllna, vec ga prikazuje crteZillla. Tehnieari se P0l110CLl tih crteza l110gu lako sporazullljeti i onda bda jedan ne razlll11ije jezik drugoga. Nauka, koja je dala tehniearil11a sredstvo za meollsobno sporazumjevanje, zove se nacrtna geometrija. Ona je iznikla u tehnickom svijetu i dugo je sluiila tehnickim potrebama, a da nije bila ni zapazena. Tek je pri kraju 18. vijeka Gaspard Monge /Gaspar MonZi uspio izlueiti eiste geometrijske elemente iz njihovih razllolikih aplikatornih podrueja i stopiti ih Ll novu nauku. U svojelll prvom udzbeniku nacrtne geollletrije iz 1789. godine Monge je postavio ove zadatke nacrtne geollletrije: ~"Prvo; ol7a treba dati me/ode po kojima se na crlacem papini, koji ima scimo clvije climcnzije, duiinu i ,iJirinu, mogu prikazati ,I've prostorne tvorevine, ko/e ima/[i' tri dimenzije, duiinu, ihrinu i visinu, a liZ pretpostavku da se Ie tvorevine l110gu tacno de/in irati.
Drugo, ona treba dati postupak, po ko/emu se iz tacnog crleia neke prostome tvorevine moie upoznati njezin oblik, Ie mogu izvesti svi zakoni, koji i:daze iz oblika i mec1usobnog poloiaja n/ezinih dUe/ova. " Ima vise metoda, po kojima se prostorni objekti mogu tacno prikazati crteZima, a od tih metoda bice obraaene samo neke, koje se Ll tehnici cesto primjenJuJu. Pojavom racul1ara stvorila se i nova disciplina: raeunarska grafika. U racunarskoj graj~ci postoj i problem predstavljanja objekta koj i analiziramo sa aspekta projekta u cjelini, detaija projekta pod raznim dejst-viflrnq;ct±-'----~ (temperatura, pritisak, dinamicke sile itd.). Rezultati proraeuna nislI samo jednocifreni brojevi i velicine LI Ijesavanju, nego postoje c!vije iii vise proraeunatih vrijec!nosti. Razmatranje (analiza) nj ihovih vrijednosti na bazi numerickih podataka prec!stavlj a c!osta mukotrpan i tezak zac!atak za inzenjere i istrazivaee. Kod nas su do 1990. godine analize i preglec! podataka na osnovu proraeuna, vrseni prvenstveno manuelanim crtanjem, a samo pojedini racunski centri imali su graficku podrsku u obradi i analizi podataka. Pored FORTRAN kompajlera bila je neophodna i obuka za oc!govarajuce softvere za izabrani pioter, a zahtjevi koji su se lllogii nametati u obrac!i bili su ograniceni i ranjivi faktorima: memorija (periferna i centralna), hardver i softver. Izrada takvih analiza bila je povezana i sa materijalnilll faktorom, odnosno cijenom vrelllena CPU-a i potrosnog lllaterijala. Demas, odnosno pojavom PC-a, mnogo toga je jednostavnije. Pred korisnikom stoji cijeli niz grafiekih programa (prograllli za grafieku obradu podataka tipa ACAD i sl.), iii je graficka podrska data u obliku pre i post procesom. Na cijenu CPU-a ne obraca se paznja (odnosi se na visekorisnicke
__________________R_a~c~ll~n~a~r.\:.:.k:.::a__'grajlka sa FO RTRA N-om
FORTRAN programiranje za windowse
racunare), a cijena hardverskih dijelova i perifernih urectaja je za grafiku, bez obzira na format i kvantitet, prihvatljiva ne samo institucijama nego i pojedincima. Ali moramo reci da su osnovni elementi u grafici jos uvUek ostali nepromijenjeni.
2. OSNOVNI ELEMENT! RACDNARSKE GRAFIKE
2.! RA V ANSKE TRANSFORMACIJE Predstavljanje tJcke Svaka tacka je definisana svojim koorclinatama x i y. Ako je tacka u ravni, oncla je ona jeclnoznacno odreoena koordinatama x i y, koje su, u stvari, projekcije vektora polozaja tacke. Kratko napisano: za tacku u ravni A(x,y) i za tacku u prostoru A(x,y,z). y",y
A=AT
gdje je :
A matriea transformisanih koordinata A matrica koordinata tacaka T matrica transformacije U praksi je najcesci slucaj da su matrice A i T poznate i da se trazi matrica transformisanih koordinata A. Jasno je da matrica transformisanih koordinata A u ravni mora da bude istih climenzij;1 kao matrica koordinata A. Da bi se matriea koordinata mogla mnoziti sa lllatricolll transfonnacije mora biti dilllenzija 2 x 2. Ako lllatrie~l transformacije prikazemo U opstem obliku sa:
onda se ll1atriea transformisanih koordinata A dobija:
II
ravni
IZ
prethodne jednacine
y=y ,,~------------~~
y
y
A
a
z
x
odakle slijedi
~a
su transformisane koordinate
X=X
S13.1 U ll1atricnom obliku, koordinate tacaka se mogu pisati u obliku vektora reda: [x y] za tacku u ravliii [x y z] za tacku u prostoru, iIi u obliku vektora kolone [x,yf za tackll u ni~j;i iii [x,y,zf za tackll u prostoru.
Za razlicite vrijeclnosti elemenata matrice transformacije imamo i razlicite transformacije tacaka. Sve sto je navecleno za transformaciju u ravni vazi i za transformaciju tacaka u prostoru, ali je u tom slucaju matrica transformacije T dimenzija 3 x 3.
Transformacija koordinata tacaka Svaka tack a moze cla se transforll1ise u ravni, oclnosno u prostoru, Il1nozenjell1 matrice koordinata tacaka sa odgovarajucom matricoll1 transforll1acije koju cell10 kratko obiljeziti sa T.
130
Linije Dvije tacke definisu pravu. Posto je tacka jednoznacno definisana svojim vektorom polozaja, to znaci da je prava definisana parom vektora polozaja (pod uslovom da su ta dva vektora razlicita barem po modulu, iii praveu iIi sp1jeru, tj. da se tacke ne poklapaj u). 131
FORTRAN progral7liranje za windowse
Racunarska grafika sa FORTRAN-om
Ako su date dvije tacke u ravni, tacka A sa svojil11 koordinatal11a XI,Y I tacka B sa koordinatal11a X 2,Y 2 onda matrica koordinata il11a oblik:
Za elemente matrice transformacije Til = T 22 = i TI2 = T21 = 0, matrica transformacije je jedinicna matrica i dobija se x I = X I itd., tj. osnovna linija se poklapa sa transformisanom.
Rotacija lz osnovne jednacine slijedi da se matrice transformisanih koordinata dobijaju kad se matrice koordinata pomnoze sa matricom transformacije T, dimenzija 2 x 2.
Posmatrajmo jedan pravougaonik u ravni definisan tackama A, B, C i D svojim odgovaraju6im koordinatama (slika 3.3). Kao sto se iz slike vidi, koorclinate tacaka A, B, C i D su se transformisale u tacke A, 13, C i 15 rotiranjem pravougaonika oko tacke A za ugao a. Dakle, trebalo bi da se odrede elementi matrice transformacije, i to takvi elementi da claju rotaciju pravougaonika za ugao a.
Tacka A sa koordinatama XI.Y\, transformisala se u tacku koordinatama XI i )II pri cemuje:
A
sa
XI = TIIX I +T2I YI 311 =Tlix i +T 22 YI
y = r\sin(a + (3)
T B
-Slikn 3.3
Slika 3.4
x = x . cos a - y . sin a 31 = x . sin a + y . cos a
Jeclnacina u matricnom obliku moze se napisati:
-A
=
[x 31J= [x
J[ cosa .
Y
- sm a
a]
sin cosa
Gclje je matrica Slika 3.2 Za razlicite vrijednosti elel11enata matrice transformasije dobijaju se i razliCite transformacije linije (slika 3.2). Elementi matrice mogu biti tako izabrani da se dobije transformisana linija koja je paralelna osnovnoj liniji, da se osnovna i transfonnisana Iinija sijeku i sl. 132
cosa [ -sina
sinal cosa
matrica transformacije.
133
FORTRAN programiranje za windowse
Racunarska grajika sa FORTRAN-om
Homogene koordinate Da bi se mogle uvesti konstante translaeije, konstante matriee moraju se povecati na dimenzije matriee koordinata na 3 x I za tacku u ravni, pa ce matriee A i A imati oblik:
A=
[x
Y 1];
[x y
[x
TI2 TI3 TI4 T22 T 13 T24 , , y z 1]. T21 = [x' y z v'] = [x y T31 T32 T3} T34 ~T41 T42 T43 T44
iT"
Z
1]
1] Matriee transformaeije za likove u ravni
Najmanji format matriee transformaeije T koji bi se mogao pomnoziti sa matrieom Aje 3 x 2 i ima oblik:
Ovakav pravougaoni oblik matriee transformaeije nije pogodan jer matriea nije kvadratna i ne moze se dobiti inverzija matriee T, Zato se matriea transformaeije prosiruje na format 3 x 3.
Posmatrajmo matrieu transformaeije za likove u ravni T
Treba uociti grupe elemenata matriee transformaeije koje su razdvojene isprekidanom linijom. Prema ranijem izlaganju, sa clanovima Til, T 12 , T21 i T22 se moze dobiti rotacija deformacije lika, uvecanje, odnosno smanjenje lika u X iIi Y pravcu. Clanovima T31 i Tn dobijaju se translacije u Xi Y pravcu. Clan TJ3 daje generalno uvecanje odnosno smanjenje lika L1 ravni. Da bismo objasnili znacenje elemenata TI3 i T 23 treba posmatrati transformaciju tacaka koje se dobijaju slijedecom transformacijom:
Mnozenjem matriee An i Tn dobije se rnalrica lIclllsfotmacionih koordinata A formata 3 xl, koja ima ob!ik za tacku u ravni.
o [x y
[x
[T"
Til TI3
y I]. Tl1 T22 T 13
=
[x'
y'
v'J= [:: ~:
T31 T32 To} Na ovakav Je nacin trodimenzionalnim vektorom predstavljen dvodimenzionalni vektor polozaja. Analogno ovome, cetverodimenzionalnim vektorom predstavljamo trodimenzionalni vektor polozaja.
134
y
v = TI3 . X + T 23 . Y + 1
lednacina predstavlja jednacinu ravni u prostoru gdje Je V treca koordinata (slika 3.5).
135
Racunarska grajika sa FORTRAN-O/11
FORTRAN programiranje za windowse
y
j---3>-X
>X x
Slika 3.5 Slika 3.6 Translacija u ravni Rotacija Elementi matrice transformacije, koji definisu translaciju, su T31 i T32 pa matrica transformacije ima oblik:
Koriste6i ranije jednacine dobija se matrica transformacije za rotaciju raVl1l.
T=[~
o
cos ex
T = -sinex
rL
Til
Ako matriClI koordinata transformacije, dobicemo:
pomnozimo
sa
ovakvom
cos ex
o
0
matricom
x= X +T31 Y=
sin ex
y +T32
~l
Da bi se neki lik u ravni rotimo za ugao ex, potrebno je taj lik prethodno trans I irati Ll koorc1inatni pocetak. Potom ga na tom mjestu rotirati i napokon ponovo translirati u njegov orginalan polozaj (slika 3.7). U matricnom obliku to se moze prikazati sa: y
Kombinacijom ranijih jednacina i slike 3.6 se vidi da element Tol daje transformaciju u X-pravcu, a Tn transformaciju u Y-pravcu.
(;;;;;
\ \
\
\
\
\
\
\
\
\
).
\ \ ;;
\
\ \
x
\
\
Slika 3.7 136
137
FORTRAN programiranje
ZCl
windowse
Raczmarska grafika sa FORTRAN-om.
----------------------~
Uvecallje - smanjenje Matrica transformacije koja claje lIvecanje, odnosno smanjenje, Ilna oblik: ITII
a
T=l~
T22
a a
a
T33
I
Ako je element rnatrice transforrnacije T33 A
=
I, matrica T irna slijedeei
oblik:
a
(X
X
a
Slika 3.8
A = A TT; ·TR ·Tn IIi u razvijenom obliku:
[x
y
a
I{ ~
1
-Tli
oro,"
~ -S~l a
sin a -cosa
0
-Tn
T ~J T~I
a T32
~I ~ ~
y
I]
T=
Kada se matrIce TTl, T R, i T T2 pomnoze dobija se konacna matrica transformacije.
T=
[
cosa
sin a
-sin a
cosa
- To2 (cos a -1)+ T32 sin a
-T3J sina- T32 (cosa-I)
Preilla polozaju koji zallzimaju u matrici transforlllacije, eleillenti Til Tn claju uveeanje oclnosno smanjenje u X j Y pravclI. Element T]3, kao sto je vee receno, daje generaillo uve6anje, oclnosno srnanjenje. Posrnatrajlllo lllatricu transformacije koja claje gelleralno L1veeanje, odnosno srnanjenje:
I:
a
La a
a a T13
Ako lllatricLl koorclinata tacaka pOlllnozimo sa ovakvom matricom transfofmacije, clobieemo:
:1]
Iz slike 3.8 se vidi sta bi se desilo sa Iikom da nije transliran u koordinatni pocetak prije nego sto je rotiran za ugao a. Jz jednacine je lako uociti da se smanjenje lika dobija ako je T33 > I, odnosno uveeanje ako je T33< I.
138
139
Racunarska grafika sa FORTRAN-om
FORTRAN programiranje w windowse
2.2 PROSTORNE TRANSFORMACIJE
y
y
TJ~
lo
r
0
0.5 0
°l ~J :>
Analogno homogenim koordinatama u ravni imamo da se za prostorne homogene koordinate tacaka cetvorodimenzionalnim vektorom predstavlja trodimenzionalni vektor polozaja:
2
A =
0.5
[x
Y
z
I]
X
X
Slika 3.9
Odgovarajuca matrica transformacije mora da. bude dimenzija 4 x 4 ima oblik:
Deformaeija lib u ravni Pod pojmom deformaeije lib ovdje podrazumijevamo deformaeiju koja deformise lik tako da sve strane koje su bile paralelne u orginalnom obliku ostaju paralelne i prilikom deformaeije (slika 3.10). Matriea transformaeije za deformaeiju lika u ravni ima oblik:
1
o Uglovi tgcxx i tgcxy su nagibi za Xi Y pravae. y
Kao sto je uradeno kod transformaeije u ravni, tako i ovdje treba uociti gmpe elemenata trodimenzionalne matriee transformaeije koji su izdvojeni isprekidanom linijom. Sa elementima Til, T 12 , T 13 , T 21 , T 22 , T 23 , T.1I, T.12, T.13 mogu se dobiti rotacije oko X-ose, Y-ose, Z-ose, iii oko bilo koje ose koja prolazi kroz koordinatni pocetak, uvecanje, odnosno smanjenje, i to u X, Y i Z praveu i deformacija lika. Elementima T 41 , T 42 , T43 se definise translaeija tijela u-prostoru , a =r:~4 daj e generalno Llvecanje, odnosno smanjenje tijela u svim praveima. EJementi T 14 , T24, T34 daju perspektivnu transformaeiju.
Trodimenzionalna translaeija Matriea transformaeije za trodimenzionalnu translaeiju ima oblik:
pri cemu je Til translacija u X praveu, TI2 translaeija u Y praveu i TJ3 translaeija u Z pravcu (slika 3.11).
140
141
Racunarska grafika sa FORTRAN-om
FORTRAN programiranje za windowse
x=
--------------------------~
reos~
X +T41
Y = y + T42 Z=
Ty =
Z+T43
I
0
-sin~
0
0 sin~
L 0
0
eos~
0
0
-----------------------------------
~j
y
Elementi matriee transformaeije su izvedeni za usvojene pozitivne srnjerove rotaeije prikazane na sliei 3.12. y
f3
A
x
x y
A"
z Slika 3.12
z Slika 3.11
Rotaeija Analogno matriei transformaeije, koja predstavlja rotaeiju u ravni X i Y, a moze se nazvati i rotaeija oko Z ose, dobice se prostorna matriea rotaeije oko Z ose.
l
sin y
0
co'YY eosy 0
- Sill
Tz= .
0
0
I
0
0
0
~l ~J
Lako je izvesti prostornu matrieu transformaeije za rotaeiju oko Xi Y-ose: 0
0
eosU
sin U
- sin U eos U 0
142
0
~1
Sada, kada je poznata transformaeiona matriea rotacije oko X, Y i Z ose, moze se zakljuciti da se tacka iIi neko tijelo sa dvije rotaeije moze dovesti u zeljeni polozaj u prostofu, npr. rotaeijom oko X i Y-ose, ne vodeci racuna 0 tome koja se rotaeija prvo izvodi. Meautim, matematicki to nije tako zato 15to I11nozenje matriea nije komutativno.
Ovo mozel11o pokazati ako jeclnostavno pOl11nozimo matriee T x x Ty i T y x T x i njihove proizvocle uporedimo. Uvecanje - smanjenje Matriea transformaeije
o
o
o
T~j
claje uvecanje, odnosno smanjenje u praveima X i Y -ose. Kocl transforrnaeije u ravni Til claje uvecanje (smanjenje) u pravcLl X-ose, a T22 uvecanje (smanjenje) 143
RaCzll1w:l'ka graflka sa FORTRAN-om
FORTRAN programiranje za winciowse
u pravcu Y -ose. Elelllenti Til i T 22 kod prostorne Illatrice transforlllacije llllaju isto znacenje, a analogno tome element Tl3 daje L1vecanje (smanjenje) u pravcu Z-ose.
Sada, nekom od elemenata na dijagonali (Til, vrijednost -1.
Tll
iIi T11) pridruzimo
a a a a = a a -I La a o 11
y Txy
f2
T=lo I() LO
0 0 01 0.5
0
0
0
0.5
0
()
()
I
I
J
:>
x
x
Mnozenjem matrice koordinata sa prostornom matricom transfonnacije dobija se:
z
[x y
Slika 3.13 T44 je element prostorne matrice transformacije koji daje general no uvecanjesmanjenje jednako u svim pravcima.
,I
0
0
1 0 a = [x' a 1 a La a a T44
A = [x Y z I] 0 a
A = [x y
To znaci da se transformacijom dobijaj LI sve transformisane koordinate po apsolutnoj vrijednosti, a proizvod je jednak originalnim koordinatama samo sto su transformisane Z koordinate dobile suprotni znak u odnosu na originalne Z koordinate. Ovakva transformacija prouzrokuje dobijanje tijela istog oblika kod koga su sve tacke jednako udaljene od ravni XV, ali sa suprotnim znakom Z koorclinate (slika 3.14). To je slika u ogledalu, tzv. refleksija.
0 y
z
, T44 ]
F ]:)-_ _ _ _ _~"'"
y
Z 1]
A
Ako je T44 > 1 dobit ce se smanjenje tijela, odnosno ako je TH < tijela u pravcu X, Y i Z-ose.
uvecanje
.. /,,/
A
Tijelo u ogledalu
//
'///
c
~//
,///
//:"/
F~__¥=~=/=/~'_/_"--~'-/7/~/------~-
Ako se matrica koordinata A pomnozi sa jedinicnom matricom dobit ce se matrica A:
z
~---=:/::>
E
x
D
Slika 3.14 Da je stavljeno da je Til = -I dobila bi se ret1eksija u odnosu na ravan YZ, a za Tiz = -I ret1eksiju U oclnosu na ravan XZ. 144
145
RaclInarska grajika sa FORTRAN-om
FORTRAN pror;ramiranje za windowse
Projekcija
1 0 Tyz =
0
0
1 0
0
0
1
0
0
0
°l
~I
11 I
0
0
0
-1
0
Tvz = " 0
0
1
lo
0
0
1
~I
1...1
Deformacija tijela AnaJogno deformaciji lib u ravni, pod pojmom deformacije tijela podrazumijevamo transformaciju koja deformise tijelo tako da sve ivice koje Sll bile paralelne u pocetnol1l obliku tijela ostaju paralelne i poslije transfonnacije (slika 3.15).
Projekcijc SLI veoma vazne za crtanje na raCllllaru. Naime, sve sto se crta na ekranu racunara, jli nekoj drugoj grafickoj jedinici, u stvari je dvodimcnzionalna predstava tijela (tacke) Ll prostoru. U praksi se koriste tri vrste projekcija: ortogonalna, kosa i perspektivna projekcija. Ortogonalna projekcija je, ujedno, i najjednostavnija projekcija koja se dobiva pomocu paralelnih zraka projekcije upravnih na ravan projiciranja. Kod ortogonalne projekcije su XY koordinate u prostoru (originalne koordinate) jednake Xi Y koordinamma u ravni projektovanja (slika 3.16). Lako cemo zakljuciti da se projekcija na XY ravan dobija kada matricu koordinata tacaka pomnozimo sa takvo!11 matricom transformacije koja ce dati matricu transformisanih koordinata u kojoj su koordinate X i Y jednake koordinatama X i Y, a Z koordinata ce biti jednaka O. Takva matrica transformacije ima oblik:
Matrica transformacije za defonnaciju tijela ima oblik: ,.
I
tgav T= I "
ltg~z
tga x
Ol
tga y
0
tga z
0
T"
ri !
lo
0
l
H 0
1j
o
gdje su: tgax, tgay , tgaz - nagib u odnosu na X,Y i Z osu koordinatnog sistema.
y",y
x=x f
,\ '" Eli --- - ------- --------~\ [~C~G D",H
C
..... , '
D
G
H
z
x Slika3.16
z
146
Slika 3.15
Ortogonalna projekcija moze da bude i na ravni YZ i XZ. U tom slucaju za ravan YZ, X koordinata jednaka je 0, a matrica transformacije:
147
FORTRAN programiranje za wil/dowse
Racunarska grafika sa FORTRAN-om
-----------------------
o1 0 0 0OJ 010
izometrija
001 perspektiva
paje
A za ravan XZ, Y koordinata jednaka je 0 i matrica transformacije:
T"J~lo ~0 ~0 ~1IJ
Slika 3.18
paje
Ako tijelo projektujemo na ravan pomocu zraka projekcije koji nisu upravni na ravan projektovanja, dobit cemo kosu projekciju (slika 3.17). U sustini, ovaj problem mozemo shvatiti tako da se tijelo u prostoru rotira oko Y ose za ugao ~, a oko X-ose za ugao a. Onda se trazi ortogonalna projekcija tijela na ravan projektovanja. Dakle, prvo se matrica koordinata tacaka pomnozi sa matricom transformacije za rotaciju oko Y:ose j DJstricQm transformacije za rotaciju oko X-ose, pa se onda trazi 0110gonalna projekcija.
o
o
cosa
sin a
-sina
cosa
o
o
~ Jl
U kosoj projekcij i je moguce uvesti proizvoljno skracenje Ll pravcLl X, Y i Z-ose. Ako nema skracenja, iIi ako su skracenja u pravcu osa X, Y i Z jednaka, elobija se izometrijska projekcija. Zajednaka skracenja Ll pravcu dvije ose dobija se kosa dimetrijska projekcija. a za razlicita skracenja u pravcu X, Y i Z-ose kosa trimetrijska projekcija. Ortogonalnom i k050m projekcijom se ne moze dobiti perspektivna deformacija (slika 3.18), te kada se zeli ovo postici, primjenjuje se perspektivna projekcija. Kod perspektivne se projekcije svi zraci projektuju iz jedne tacke, tacke oka (slika 3.17). Velicina X i Y koordinata ovisi 0 udaljenosti zaslona (ravni projektovanja) od tacke gledanja. Ovo uelaljenje oznaceno je sa ell' (slike 3.19 i 3.20).
Iz slike 3.19 se vidi da se velicina transformisanjem koordinate usljed perspektivl1e transformacije moze dobiti iz proporcija:
-x = -d---x d p; -y = ----Y dP
+z
I'
Slika 3.17
x
dp
-
+Z
y
x=----· y = - -
z ' 1+-dl'
148
1+~ dp
149
Racunarska grafika sa FORTRAN-om
FORTRAN programiranje za windowse
--------------------------~
y
z cavan projektovanja (ekran)
dp
Matrica perspektivne transformacije u sfernom koordinatnom sistemll
x Stika 3.19
ravan projektovnnja
x
Polozaj taeke u prostoru je definisan uglovima cp i '!f i odstojanjem taeke od koordinatnog pocetka p (slika 3.20). Kod perspektivne se transformacije koordinatni sistem XYZ transformise u "oeni" koorc!inatni sistem X, Y i Z. Ako je tatka M tacka oka, onda koordinatni sistem X, Y, Z mora imati koorc!inatni pocetak u tacki M, a OSLl Z poklopljenu sa pravcem p j Llsmjerenom prem;1 [dcki 0 (slika 3.20). Da bi se koordinatni sistem XYZ doveo u poIozaj X, Y, Z potrebno je da se izvrsi nekoliko transformacija. Posto se tacka M ne poklapa sa tackom 0, potrebno je, kao prvo, translatorno pomjeriti tacku M Ll koordinatni poeetak. Parametri translacije su: -Tx, -T y , -Tz:
Tx = p. sin '!f' cos cp Ty = P . sin '!f' sin cp
z
T z = P . cos '!f y
+---
ravan projektovanja
Nakon ove translacije koordinatni sistem se rotira oko Z-ose za ugao y=90-cp (51 ika 3.20), oko X-ose za ugao ~= 180-\jf (slika 3.20). S obzirom na to da je koorclinatni sistem XYZ lijeve orijentacije, potrebno je mnozenje sa matricom transfonnacije: -I
z ~~z__+-_______d~P~______+
Slika 3.20 Posto se i u ovom slueaju, kao kod ortogonalne projekcije, za ravan projektovanja usvaja XY ravan, onda matrica transformacije ima oblik:
150
o
o 1 o o o o Koordinatni sistem se vraca u polozaj taeke M translacijom sa parametrima translacije T x , T y , Tz (slika 3.20). Na ovaj naeinje transformisan koordinatni sistem XYZ u XYZ sa koordinatnim poeetkom u taeki M. I konaeno, da bismo imali perspektivni prikaz tijeJa potrebno je jos primijeniti perspektivnu transformaciju. Za perspektivnu transformaciju preko sfernog koordinatnog sistema potrebno je pomnoziti matrice transformacije. Kada se ove matrice pomnoze clobit ce se konaena matrica transformacije za perspektivnu transformaciju u sfernom koorclinatnom sistemu.
lSI
FORTRAN programiranje za windowse
Racunarska r;rafika sa FORTRAN-om
3. GRAFIKA SA FORTRAN-om (VISUAL FORTRAN) Tabela ') ') Naredbe u co-rafickom modu -
Svaki Fortran kompaj ler ima svoju specificnu biblioteku grafickih programa i funkcija. Microsoft FORTRAN 4, DIGITAL FORTRAN-VISUAL FORTRAN 6 imaju dosta zajednickih naredbi. U ovom dijelu bice dat pregled osnovnih grafickih rutina za VISUAL FORTRAN.
IME - NAREDBA
.,,<...,
Opis naredbe fokusiranje speci fici ranog prozora (windows) vracanje odrec1enog broja u aktivni mod konvetiuje jedinicni broj unutar Windowsa za funkcije daje karakteristike windowsa
I Tabela 3.1 ()
Column
o
ib:3 Bits b7 b6
3
0
o ()
+-____
~~__~B.~5__
.1
()
o
o
o
1 ~O+-____~____~04-__~+-
4
o
IGETHWNDQQ GETWINDOWCONFTNG
0
0 ~O~____~____~(~)+-_. ____ ~
__
104 b3 b2 b 1
o ()
NUL
0
DLE
o I
0 0
0
1 SOH
DC1 XON
1
o
0
1
0
STX
o
0
1
1
ETX
o
4
DCZ
I
1
0
o
0
1
I
EOT
II
ENQ
()
I
1 0
ACK
~
0
1
1
0 0
100
101
tIEL
DC4
12
I
I;~
NAK
1
0
BS
0
I
1
0
I
0
1
0
1
HT
9
LF
9 [2 10
VF
11
FF
B 14 12
CR
13
I
14
0
SO
15
1 1 1
I
SI
F
152
49
100 64 40 101
@
A
65
31
4
5
II
B !
C
~3
4_~
104 68 44 105 69 I 45 106 70 46 107 71 47
D
E
.,5
166 . 54 36 67 55
F
EM
25 19
'1C)
52
72
112
SUB
.12 26
42 2A
58 3A
4A
53
73 59 .1S 74 60 .10 75 61 3D
CAN
24
18 31
1;\
ESC
F5
33 27 1B 34 28 IC
35 GS
US
56 45
ID
2D
30
56 46
[E
?E
3i
57 47 2F
IF
70
9
<
71 57 39
74
K
L
62 3E
N
77
63 3F
113 75 48 114 76 4C 115
M
122
142
82 51 12J
98 62 143 99 63
124
144
T
U
V
W
84 54
141
97 61
d
'1
163 i !5 73 164 116 74 165 117 75
126 86 56
146
102
66
lfi6 118 76
1,27
t47
[67
103 67 ISO
119
65
87 1 57
58 131 89 59 1.12
68 151 105 69 152 106
90 SA 133 91
6A k
153 107
5B
6B
134 92
154 108 6C 155 109 6D 156
SC 135
77
93 50 136
78 4E
94 5E 137 95 SF
79 1 -I-r:
72
64 101
110
6E o
157 111 6F
u
INQFOCUSQQ SETACTIVEQQ SETWINDOWCON'FfNC
113
71 162 114
100
104
Z
q
145
130'
Y
160 112 70 161
P
125 85 55
4D 116
117
0
140 96 60
7,")
48 111 73 49
76
>
R
110
H
3~
43
?8 54 44 2C
29 36
RS
+
G
37
56
Q
120 80 50 121 81 51
67
64 52 34 65
~3
P
41
102 66 42 103
39 27 50 40 28 51 41
E
15
, 60 48 30 61
62 2 50 32 I 6.' '51
47
17 30
16 1 I
45 37 25 46
o
16
I
D 14
%
~ I ETD ~; 8 , X 11
43 35 23 44 36 24
~ ISYN ;~ 1 &
15 I
22
#
15
:')
C
13
,.
20
5
13 1
i7
11 22 18 12
14
A
I
20 41 33 21 42 34
24
10 0
1
1l
20 21
4
6 I
10
.)2
DC3 1') XOFF 13
1
i
40
1'6 51'
23
o
7
20
77 17°1 120
n
171 121 79 172 [22
SETWSIZEQQ ABOUTBOXQQ APPENDMENUQQ CLiCKMENUQQ DELETEMENUQQ GETEXITQQ INCHARQQ ilNITIALSETTTNGS INSERTMENUQQ I MESSACEBOXQQ T\;IODIFYMENUFLAGSQQ MODIFYMENUROUTINEQQ MODIFYMENUSTRINGQQ REGlSTERMOUSEEVENT
7A 173 123 7B
SETEXITQQ
174 124
SETMESSAGEQQ
7C t75
125
SETWINDOWMEl'JUQQ
7D t76 126
7E 177 DEL 127 7F
daje velicinu i poziciju windowsa (prozora)
GETWSIZEQQ
UNREGISTERMOUSEEVENT W AITONMOUSEEVENT
! definise koji window ima fokus
i
aklivira windows setuje karakteristike windowsa (prozora) setuje velicinu i poziciju windowsa (prozora) dodavanje boksa za teks! ..fJfidruzivanje meniu simuliranje efekata u meniu brisanje menia selovanje za QuickWin aplikaciju citanje karaktera sa tastature i vracanje Ll ASCII vrijednost kontrola pocetnog setovanja menia i okvira (windows) prozora insert za meni prikazivanje boksa slanje menia modifikovanje menia "callback" rutine modifikovanje menia za tekst registrovanje za primjenu rutina mouse (mUia) setovanje QuickWin apIikacije za izlaz izmjena QuickWin ukljucujuci status bar, status i dialog boks setovanje menia na kojem se listaju odgovarajuca imena i njihovo pridruzivanje vracanje rutine definisane sa REGISTERMOUSEEVENT blokovi za vracanje misa (mouse) u pocetnu jJoziciju
IS3
Racunarska grajika sa FORTRAN-om
FORTRAN programimnje z.a windowse
IN'fEGERTORGB RGBTOINTEGER FLOODFILL FLOOIJFILL W ~LOODFILLRGB
FLOODFILLRGB - IV OETBKCOLOR GETBKCOLORROB GETCOLOR I
(~ETCULORRUB
CETPIXEL GETPIXEL W GETPrXELRGB GETPTXELRGB 'vV GETPIXELS OETPIXELSRGB GETTEXTCOLOR GETTEXTCOLORRGB REMAPALLP ALETTERO B SETBKCOLOR SETBKCOLORRGB SbTCOLOR SFoTCOLORRGB SETPIXEL SETPLXEL \;V SETPIXELRe;B SETPfXELRGB W SETPIXELS SETPIXELSRCB SETTEXTCOLOR SETTEXTCOLORRCB GETFILLMASK GETUNESTYLE GETWRlTEMODE SETCLIPRGN SETFILLMASK SETWRITEMODE GETPHYSCOORD CETVIEWCORD GETVIEWCOORD - W
154
I
konvertuje RGB boje u komponente red, green, blue (crveno, zeleno, pI avo) konvertuje integer definisan sa red, crreen i blue boje ispuna povrsine iIi maske ispuna prozora ispuna sa RGB povrsine ispuna sa RGB povrsine za prozor (windows) vracanje erne boje za tekst I grafiku vracanje RGB boje za tekst i grafiku __ vracanje indeksa boje vracanje indeksa RGB boje uzimanje piksela uzimanje piksela za prozor uzimanje RGB piksela uzimanje RGB piksela za prozor visestruko uzimanje piksela visestruko uzimanje RGB piksela davanje boje za tekst davanje boje za lekst RGB davanje palete RGB setovanje crne boje za tekst i grafiku setovanje ROB boje za tekst i grafiku setovanje boje setovanje ROB boje setovanje piksela setovanje piksela za prozor setovanje ROB piksela setovanje RGB piksela za prozor visestruko setovanje piksela visestruko setovanje RGB piksela setovanje boje teksta setovanje boje teksta - RGB grafika definisanje podrucja ispune (fill) definisanje stila Iinije definisanje moda za ispis definisanje maske na prozoru setovanje podrucja ispune setovanje nacina ispisa prelazak na "fIzicke" koordinate setovanje pregleda za "fizicke" koordinate setovanje pregleda prozora "windowsa" za "fizicke" koordinate
(jETW INDU\VCORD ~:ET\j[r~VY'PORT SE~l'VIEVvY(JP_C
:;E'1'WINDOV/ ;\RC ,3" He C _\'I\l CLEARSCRFEN [eLUPSE
I ELLIPSE- W I
C ETCU RRENTPOS rn 0 N GETCURRENTPOSITJON - W CRSTATUS UNETO LINETO - W MOVETO MOVETO -- W PIE PIE - W POLYGON POLYGON - W RECTANGLE RECTANGLE \(\T DlSPLA YCURSOR CETTEXTPOSITION GETTbXl'''NTNDOW OUTTEXT SETTEXTPOSITTON SETTEXTWINDOW SETFONT SETGTEXTROTATION GETIMAGE GETIMAGE W IMAGESIZE IMAGESIZE- W PUTIMAGE PUTIMAGE- W
setovanje prozora ltwindowsa" za "fizicke" koordinate setovanje izlaza sctovanje organizaeije izlaza (windows-a) setovanje prozonl - window definisanjekruznog Iuka definisanje kruznog luka u prozoru brisanie zasiona - skrina detinisanje elipse iii kruznog luka definisanje elipse iii kruznog luka u prozoru definisanje trenutne pozicije kursora ucfinisanje lrenutne pozicije kursora za prozor definisanje statusa definisanje linije definisanje Iinije u prozoru povlacenje linije povlacenje linUe u windows kooruinatama definisanje kruga definisanje kruga u prozoru clefinisanje poligona definisanje poligona u prozoru definisanje pravougaonika definisanje pravougaonika u prozoru prikazi poIozaj kursora sctovanje pozicije teksta setovanje pozicije teksta u prozoru prikaz leksta na skrinu setovanjc pozicije starta teksta sctovanje pozicije starta teksta u prozoru definisanje fonta za tekst definisanje ugla ispisa leksta ocitavanje slike (image) ocitavanje slike (image) u prozor definisanje velicine slike (image) detlnisanje velicine slike (image) u bajtovima vracanje view-port koordinata slike (image) u bajtovima na displej - skrin vracanje view-port koordinata slike (image) u bajtovima na displej - skrin u definisani prozor
155
RacZlnarska grafika sa FORTRAN-om
FORTRAN programiranje za windU\lse
ocitavanje slike sa diska u memorUu iIi na skrin ocitavanje slike sa diska u memoriju ili na skrin u prozoru cuvanje slike na periferni dio rac. (windows bilmapa - .BMP) cuvanje slike sa prozora skrina na periferni dio rac. (windows bitmapa.BMF)
LOADTMAGE LOADIMAC,E- W SAVEIMAGE SAVElMAGE- W
New ~.~ FUes
Protects
I' Wort~PdCel,
~.
.
f
Other DocuUlen!s
!
.
DEI
LOGICAL modestatus INTEGER (2) maxx,maxy TYPE (windowconfig) myscreen COMMON maxx,maxy setovanje grafickog moda myscreen.numxpixels=-l myscreen.numypixels=-l myscreen.numtextcols=-l myscreen.numtextrows=-l myscreen.numcolors=-l myscreen.fontsize=-l myscreen.title=""C modestatus=SETWINDOWCONFIG(myscreen) I
modestatus=GETltJINDOI'I!CONFIG (myscreen) maxx=myscreen.numxpixels-l maxy=myscreen.numypixels-l END
crtanje boxa
l
linija
SUBROUTINE drawlines
()
TTSE nFTTB INTEGER (2) status,maxx,maxy,fontnum,numfonts,color,oldcolor TYPE (xycoord) xy
Re.;dy
Ir;;-DiG~~~L Vi;:;-r;;a;-
)~Startl (:!)[11102:5Z'COP!aJel
slika 3.20 program f_3.1 y(x)=x**3-9*x-7 USE DFLIB CALL graphicsmode () CALL drawlines () END
SUBROUTINE graphicsmode () . USE DFLIB 156
COMMON maxx,maxy REAL x(lOl) ,y(lOl) PARAMETER (Nfonts=6) INTEGER*4 ifont CHARACTER*ll face (Nfonts) CHARACTER*lO options (Nfonts) character*20 list CHARACTER*64 fontpath CHARACTER*3 podio(40) RECORD/fontinfo/ fi
DATA face / "Courier", "Hevletica", "Times Roman", "Modern", II
Script!:
f
11
Roman n
&
/
157
FORTRAN programiranje za windowse
Racunarska grajika sa FORTRAN-om
----------------------~
DATA options jllt1courierl II, J't'helvllT
f
11t 1 tmsrmn'!l ( IItlmodernl
If
,&
"t' script' " , "t' roman' "I DATA podio 1"1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ,& "10", "20", "30", "40", "50", "60", "70", "80", "90", "100",& "50", "100", "150", "200", "250", "300","350","400", "450", "500",
CALL MOVE TO (INT2(ixl) ,INT2(iyl) ,xy) status=LINETO(INT2(ix2) ,INT2(iy2» END DO 'print*, 'xiy(34)' ,x(34) ,y(34) ! crtanje osa
&
"100", "200", "300", "400", "500", "600", "700", "800", "900", "999" / crtanje boxa
minx=40 !miny=maxy+ABS(yymin*yskala) 19-20 miny=maxy-20 CALL MOVETO(minx,miny,xy) status=LINETO (INT2 (minx) ,INT2 (miny) ) status=LINETO(INT2( (xduz+40)*xskala) ,INT2(miny»
status=REC'I'ANGLE ($GBORDER, INT2 (0) ,INT2 (0) ,maxx, maxy) podjela po x osi numfonts=INITIALIZEFONTS() ! izbor fonta i velicine slova !FONTNUM=SETFONT('t' 'arial' 'f5w2i') racunanje koordinata za funkciju f(x)
I
I
DO i=1,101 x(i)=float(i-l)/10. y(i)=x(i)**3-9*x(i)-7. END DO xxmax=MAXVl,L (x) yyrnax=M~XVAL (y) xxmin=MIl\ivAL (x) yymin=MINVAL(y) xduz=xxmax-xxmin yduz=yymax+ABS(yymin) xskala=maxx/(1.2*~duz)
yskala=maxy / (1.2 *yduz) racunanje graf. koordinata xmin i ymin su u gornjem lijevom uglu DO j=2,101 ixl=x(j-l)*xskala + 40 ix2=x(j)*xskala+40 iyl=maxy-y(j-l)*yskala-20 iy2=maxy-y(j)*yskala-20 'crtanje linije 158
IF(xxmax.LE.IO.) THEN dx=l. npocp=O end if IF(xxmax.LE.IOO .. AND.xxmax.gt.10.) THEN dx=lO. npocp=10 end if IF(xxmax.LE.500 .. AND.xxmax.gt.100.) THEN dx=50. npocp=20 end if IF(xxmax.gt.500.) THEN dx=lOO. npocp=30 end if npodj =INT (xxrnax/ dx) if(npodj.gt.10) npodj=10 dxx=xxmax/float(npodj)*xskala idxxl=dxx CALL MOVETO (minx,miny,xy) status=LINETO(INT2(minx) ,INT2(miny» status=LINETO(INT2((xxmax+20)*xskala) ,INT2(miny» maksy=maxy-(yymax+10)*yskala-20 CALL MOVETO (minx,miny,xy) status=LINETO(INT2(minx) ,INT2(miny» status=LINETO(INT2(minx) ,INT2(maksy»
idxx=O iddy=maxy-14 DO ih=l,+O idxx=idxx+idxxl
159
Racunarska grat/ka sa FORTRAN-om
FORTRAN programiranje za windowse C2\LL MOVETO(idxx+40,miny,xy) status=LINETO (INT2 (idxx+40) , INT2 (iddy) ) END DO CALL MOVE TO (20,maxy-14,xy) CALL OUTGTEXT ('0') idxx=O dx=xmax/10. podj=O. DO isp=2,npodj+l ipodio=npocp+(isp-1) idxx=idxx+idxxl CALL MOVETO (( 20+idxx) , maxy-14, xy) CALL OUTGTEXT (podio(ipodio)) END DO
idyy=idyy+idyyl i yy =maxy-(isp-l)*idY'Jl-40 CALL MOVETO (O,iyy,xy) CALL OUTGTEXT (podio(ipodio)) END DO
CALL CALL CALL CALL
MOVETO(INT2(70) ,INT2(150) ,xy) OUTGTEXT (' KRIVA') MOVETO(INT2 (70), INT2 (180) ,xy) OUTGTEXT(' jednacina Y=X**3-9*X-7')
END
podjela po y-osi IF(YYmax.LE.100.) THEN dy=10. npocp=O END IF IF (yymax. LE. 500 .. AND . yymax. gt .100.) THEN dy=50. npocp=10 END IF IF(yymax.gt.500.) THEN dy=100. npocp=30 END IF npodj=INT( (yymax+4.9)/dy) IF(npodj.gt.10) npodj=10 dYY=YYTIlax/FLOAT(npodj)*yskala ! !
lidyy1=dyy idyy1=(yymax/npodj)*yskala idyy=O iddy=12 do iv=l,npodj idyy=maxy-iv*idyyl CALL MOVETO (minx, (idyy-20) ,xy) status=LINETO (INT2(iddx) , INT2 (idyy-20)) END DO CALL MOVETO(10,maxy-30,xy) CALL OUTGTEXT ('0') idyy=O dy=ymax/l0. podj=O. DO isp=2,npodj+1 ipodio=npocp+(isp-1) 160
slika 3.21 4. GRAFIKA SA PAKETOM ARRAY VISUALIZER
Digital Array Visualizer je softver koji omogu6ava graficki pregled i analizu podataka. Prednost paketa je Ll vizualizaciji koja omogu6ava otkrivanje "skrivenih" detalja u visedimenzionalnom prostoru (3D). Prosiren broj uobicajenih opcija, U odnosu na druge graficke pakete, daje znacajne karakteristike u analizi dobijenih iIi datih podataka.
161
FORTRAN programiranje za windowse
.. Array Visualizer koristi OPEN GL koji omogucava interaktivne pokrete, rotaclJu i zumiranje grafike, kao i mogllcnost pretvaranja Ll razlicite oblike: vektorsku grafiku na primjer. Paket, u daljem tekstu program, llkljucuje nekoliko razlicitih komponenti: Array Viewer aplikacija Array Viewer biblioteka Avis2D OCX (aktivna XTM) kontrola Rad u okviru Microsft development studija . . Digital Array Visualizer graficki paket program a je Windows aplikacija kOJa pnkazuJe podatke u dva dijela "prozora": . gornji koji prikazuje numericke vrUednosti U obliku "odmotavajuce stranice" donji okvir prikazuje grafikti u 3D, iii zavisno od izbora moda, ta grafika moze biti 2D (sliim), vektorska grafika iii dijagram. Avi,,~; programska biblioteka sadrZi set programa koji omogucavaju Visual FORTRA.N-u ill \iisua; C++ apliLcij~ [la prikazuje podatke koje koristi Array Viewer (via OLE Automation). Koristenjem ove bibiioteke moze se kreirati vizualizacija sa nekoliko linija koda. Programska biblioteka moze sacuvati podatke kao fajl za kasnUe preglede i interpretacijll sa Array Viewerom Avsi2D Active XTM COCX). Kontrola moze biti razvijena za podrsku ActiveX kontrole (Visual C++, Visual Basic) za prikaz rezultata u grafickom modu. Avis2D kontrola omogucava vise od 100 karakteristika i metodakoje se mogu razviti za upotrebu u radu.
Upotreba FOTRTANA i C API-ja Dva seta funkcija su dostupne za Fortran programaera: API za za Fortran programere: fagl Rutine Ovo je mali set rutina sa kojima startuje Array Viewer, prikaz nizova za glavne funkcije. Rutina ima prefixfi:lgl, kao na primjer faglStartWatch. API za Fortran programere : fay rutine Ovo je odreaeni set rutina koji dopusta programu da kontrolise akcije Array Viewera unutar "prozora" i izvodi odreaene akcije upotrebom interakcije. Rutine imaju prefiksjclv, kao na pr. favStartViewer. Ako se Array Viewer startuje sa favStartViewer, upotreba rutina sa prefiksom fagl se ignorise. Dva seta instrukcija su na raspolaganju programerima u C++: API za programere u C-u: agl rutine Ovo je mali set rutina sa kojima startuje Array Viewer, prikaz nizoya za glavne funkcije. Rutina ima prefix agl, kao na primjer aglStartWatch. API za programere u C++ : CA Viewer rutine 162
__________R_a_c_u.... n .... CII...:"s.... ·k:....:a grafika sa FORTRAN-om
?vo je odrec1eni set rutina koji dopusta programu da kontrolise akcije Array Vlewera ullutar "prozora" i izvodi odreaene akcije upotrebom interakcije. Uobicajena imena naredbi upotrebljavaju C}\. Viewer klasu i uobicaieno se pozivaju iz C++ programa. U ovom dijelll bit ce dat kratak opis navedenih rutina za FORTRAN .. Poziv API-ja iz FORTRANA: fagI rutine Spisak funkcija sa sintaksom za ovaj tip rutine je: fag/Close (array,status) faglEndWatch (array,status) faglHide (array, status) faglLBouncl (array,lbnd,status) raglName (array,title,status) faglSaveAsFi Ie (array,fi lename,status) fagiShow (arraY,status) faglStartWatch (array,status) faglUpDate (arraY,status) gdje je : array ime niza status izlazna veijednist - integer(4) lbnd - ulazna vrijednost ranga I title - ime - string koji pokazuje naslov filename - naziv pod koji se pohranjuje raj] na disk (bez ekstenzije) Na samom pocetku programa (poglavlje ll) neophodno je defisati interfejse: Use Avdef Use DFLib
Poziy API-ja iz FORTRANA: fay rutine Fay rutine ukljucuju slijedece grupe instrukcija: ,/ ,/ ,/ ,/
Array Viewer Instance Data Access Region of Interest (ROn Data Filter 163
Racunarska grafika so FORTRAN-om
FORTRAN programiranje za windowse ../ ../ ../ ../ ../ ../ ../ ../ ../ ../ ../
Palette Graph Axis Selection Graph View (common to all graph types) Height Plot Image Map Vector Graph Data View Camera Marker Miscellaneous
Setuje gornju i donju granicu za Y koordinatu u Graph View Daje gornju i donju granicu za Y koordinatu u Graph View Setuje gornju i donju granicu za Z koordinatu u Graph View Setuje gornjll i donju granicu za Z koordinatu II Graph View Setovanje za osvjeZenje menija (da iii ne) Davanje naredbe za osvjezenje menija (da iIi ne) Redraw - za rel1ekciju izmjene vrijednosti podataka Palette ,. -:.Kreiranje aktuel ne 'pakte Setovanje boje palete Davanje idenlifikacije za boju palete Setovanje podrllcja u kojem se paleta llpotrebljava Davanje podrucja vrijednosti u kojem je paleta zahtijevana Automatsko pridruzivanje palete Upotreba palete (da iii ne) Pridruzivanje definisane boje paleti i Prikazivanje palete (da iii ne) Davanje prikaza setovanih paleta -~
Pregled funkcija u navedenim rutinama sa sintaksom daUe u tabeli 3.3. Napomena: pog1edati uputstvo: Array Visualizer Home Page (str. 1-181). Tabela 3.3
Array Viewer instance Kreiranje podrucja za Array Viewer Ogranicava - zavrsetak podrucja za Array Viewer
l'avStarlVicwer favendviewer
I Data Acces Pridruzuje i prikazuje specificirani fajl la Array Viewer Prikazuje specificirani niz u ''\ornry Viewer Region of Interest (R01) Definise poziciju bv,ja prvog i posljednjeg elementa u ROI Daie pozicii'''l~rvog broja u ROI za date dimenzije [Daje po~'iciju posljednjeg broja u ROI za date dicenzije Setuie dimenzije kolona i redova Daje podatke za kolone i redove Setuje ROI sa aktuelnom "D" slikom
favSetFileName favSetArray f~lVSetRoi
favGetRoiLh favGetRoiUb ravSetRowColDim favGetRowColDim favSetRoi2D
Data Filter Seluje povezivanje Graph View sa vrijednostima koje su van podrucja Daje povezivanje Graph View sa vrijednostima koje su van podrucja Setuje gornju i donju granicu za X koordinatu u Graph View Daje gornju i donju granicu za X koordinatu u Graph View ..
164
favSetDataClamp favGetDataClamp favSetXClamp favGetXClamp
favSctYClamp t~1VGetYClamp
favSetZClamp favGetZClamp favSelDataRefrcshEnahle favGetDataRefreshEnable favU.l2.date favS'ttCustomPalelte favSetPaletteld favGetPal~tte[d favSetPaletteRange favGetPaletteRange favSclPaletleAutoAd just favSetUseColorPalette ravGetUseColorPalelte favSctShowPalette favGetShowPalette
Graficke ose
I Auto skaliranje osa (da iii ne) Davanje auto skaIiranja osa Pridruzivanje dimenzija osa sa podjelom I Prikaz grafickih osa Davanje naredbe zaJ2rikaz setovanih osa Izabrana selekcija (da in ne) Prihvatanje izabrane selekcije sa podacima
favSetAxisAutoScale CavGelAxisAlltoScalc fa'i£@tgim£~alc
I favSetShowAxis favGetShowAxis favSetDataSelectEnable favGetDataSelectEnable
Graph View Setovanje tipa grafike (visina crteza, image map, vektorski prikaz iii prikaz u ravni) Izbor aktuelnnog tiJ.l.a grafike Setovanje stila grafike (mreza, povrsina, bar, linije ili tacke) Izbor,.g:afickog stila Setovanje vrijednosti definisanih granica crteZa za -.Il.rikaz graficke povrsine Izbor gustine linija za pravougaonik Setovanje pocetnog stanja za prikaz i Prihvatanje rJocetnog stanja za prikaz
favSetGraphType fa vGetGri!:£h Type favSetGraphStyle l'avGetGr
165
FORTRAN programiranje za windowse Setovanje vrijednosti za linije paralelograma koje ce hiti prikazane u grafici Izbor za setovanje pri ShowGrid - prikazu gntfike na displcju Krivc linije (da iji ne) Izbor za iskrivljene linije
l'avSctShovvGrjd
I
Setovanje pozicije kamere u fiksiranu poziciju (home position)
CavToHomcPositiol1
favGctSho'vvGrid l'avSetLineSI110()th
fa vGctLi neS m(lOlh
Height Plot Setovanje ve!icine Z-ose relativno od X i Y osc Prihvatanje Z skaliranih vrijednosli ]ednodimcnzjonalnjJekst i boja (d~~Jli ne) u mapi Davanje tekuceg stanja (texture) Setovanje aktuelnog osjencenog stanja Izbor za osjencavanje " Setovanje osvjetljavanja Izbor za setovanu vrijcdnost osvjetljavanja Setovanje sakrivenih linija Izbor za definisane sakrivenih linije
Racunarska grafika sa FORTRAN-om
fa vSctZScale fa vGetZScale i"avSclTextureMode i"avGelTcxtureModc CavSe~~ading
CavGelShaciing favSetHighLighl CavGetHighLight favSetHiddenLight favGcLHiddcnLighl
Marker Setovanje pozicije kolone/rec!a Prihvatanje setovane pozicije Prikaz markera Prihvatanjc aklulne prikazane pozicije nnrkera
j"avSetRowCol i"avGctRowCoj i"u",SetShowMarkcr favGctShowMarker
M iscei laneous Setovanje stringova koj i ce biti prikazani kucistu Array Viewera Davanje broja gresaka Prikaz Array Viewer prozora (Window) Setovanje stringa
l!
nasiovnom
-
-----
I favSetArrayName .... _ - - i"avGetErrorNo favShowWindow favSclAnl1otaliol1
Primjena paketa Array Visualizer sa upotrebom nastavku.
rutina prikazana Je u
image Map Setovanje orijentacije (IDENTITY, XFLIP, YFLIP, I XYFLIP) i Prihvatanje aktuelne setovane orijentacije I Setovanje !,f8lhodno definisanog odnosa (Aspect [ ratio) i Prihvatanje ranije definisanog odnosa Setovanje jinearnog filtera za Image Prihvatanje aktuelnog setovanja Veciol' Graph Sctovanje komponenata indeksa vrijednosti Prihvatanje izabrane opcije setovanja
I
favSetImageOrientation favGellmagcOrientaliol1
PROGRAM main
CavSctFixcdAspect favGetFixcc!Aspcct favSetImageFiller fa vGctlmugeFi jter favSetComplndex favGetComplnc!cx
USE AVDef DFLib integer status
---------.u~s~~
REAL VDATA ( 2 ,
°:10 )
VDATA (1,1) vrijednosti za x VDATA (2,1) vrujednosti za y
Data View Setovanje preciznosti sa kojom ce biti prikazan broj u crtdu (View) Prihvatanje selovanih podataka za preciznost
Program za graficki paket Array Visualiser
favSetPrecision favGetPrecision
do i=O,10 vdata(l,i)=i vdata(2,i)=vdata(1,I)**3-9.*vdata(1.i)-7. end do
Camera Setovanje pozicije kamere Prihvatanje izabrane pozicije kamere Setovanje centra kamere u zoni od interesa (COL) Prihvatanje setovanih podataka za COL Setovanje pozicije kamere kao fiksirane pozicije (home position) 166
favSetCameraPosition favGetCameraPosition favSetCamer;lCoi favGetCameraCoi favSetHoll1ePosi tion
GRAFIKA - ARRAY VISUALISER CALL FAGLSTARTWATCH (VDATA,STATUS)
print * ',startuje se array visualiser' call faglshow (vdata,status) 167
Racunarska grafika sa FORTRAN-om FORTRAN programiranje za windowse I naslov call faglName (vdata, , Jednacina je y=x*x*x-9*x-7' ,status) print *,' u Array Viewer setuj vektorski mod'
call faglUpdate
(vdata,status)
do while (.true.) print *,' Jednacina
y=x**3 -
9*x -7'
read *, key: .. i f ( - ·key . eq ~o-l )
then call faglEndwatch (vdata,status)
print *
, done!
5. GRAFIKA SA PAKETOM PLOT8S PLOT88 je biblioteka grafickih programa za rad na IBM-PC, IBM-XT, IBM PS2 iIi 100% kompatibilnim sistemima unutar PC-DOS operativnog sistema. Potprogrami PLOT88 mogu biti pozivani sa programima napisanim u slijedecim jezicima: ../ MicroSoft FORTRAN 4.01,4.1,5.0 i 5.1 ../ Ryan Mc Farland FORTRAN 2.xx ./ Lahey F77L FORTRAN 4.0 iIi 5.0 ../ MicroSoft C 5·. I ill 6.0 ../ Lahey F77L - EM/32 4.xx ili S.xx ../ MicroSoft PowerStlltlon FORTRAN 1.0 ili 4.0
I
PLOT 88 biblioteka ukljucuje slijedece opcije:
stop end if end do end
../ ../ ../ ../ ../ ../ ../ ../ ../
Emulaciju pera za ploter Linije zavisno od debljine iIi boje, puna iii isprekidana linija, Upotrebljava definisani "prozor" - "window" Podriava razlicite stampace iii plotere Upotrebljava razlicite varijante ispune (fill paterns) Mogucnost izbora razlicitog simbol-set fontova Dvo i tro-dimenzionalnu grafiku i tekst Dvo i tro-dimenzonalnu grafiku i mapiranje i prikaz povrsina Razlicite opcije za output fajlove Osnovni sadriaj potprograma u PLOT88 je slijedeci:
slika 3.22
168
../ PLOTS - inicijalizacija PLOT88 paketa ../ PLOT - generise segmente linija za odgovarajucu "pen" poziciju zavisno od toga cIa Ii je pero dignuto iii spusteno ../ PLOTD - generise tip linije odgovarajuce pozicije do zadate opcije ../ STDASH - definisanje karakteristika linija ../ OFFSET - definisanje X&Y podrucja i skaliranje vrijednosti ../ FACTOR - definisanje povecanja iIi smanjenja crteza ../ WINDOW - definisanje lokacije prozora (window) za crtanje ../ WINORG - definisanje vise prozora (windowsa) ../ ROTTRN - rotacija i translacija crteza za izlaz ../ NEWPEN - definisanje debljine linije ../ WHERE - vracanje (x,y) pozicije i crtanje sa faktorom skaliranja ../ SYMBOL - crtanje karakteraspecijalnih i centriranih simbola u cIvije iIi tri dimenzije 169
FORTRAN programiranje za windowse if'
./ ./ ./ if' if'
./ if'
./ if'
./ ./ ./ ./ .(
./ ./ if'
./ ./ ./ ./ ./ ./ ./ ./ ./ ./
./
170
ASPECT ~ definisanje sirine i vi sine odnosa karaktera crtanih sa SYBOL i NUMBER CHP ATH ~ elefinisanje simbol karaktera ~ horizontal no iii vertikalno GETWID ~ vracanje u karakter string FONT izbor karakter seta sa ineleks brojem IBMPLX ~ izbor IBM karakter seta STMPLX ~ izbor SIMPLEX jeelnostavnog karakter seta DUPLX ~ izbor elupliranog karakter seta COMPLX ~ izbor kompleks karakter seta TRIPLX ~ izbor tripleks karakter seta SCRPLX ~ izbor skript karakter seta GRKPLX ~ izbor gript karakter seta NUMBER ,"-, konvertuje realne brojeve sa elecimalnom tackom u odgovarajuci karakter string'i erta stringove u dvije iii tri dimenzije GETNUM konvertuje realne brojeve sa deeimalnom tackom odgovarajucim karakter stringom SCALE ~ skalira vrijednosti definisane u nizu sa max, i min. vrijeelnosti za upotrebu sa LLl\JE, CURVE, AX1S i LBLINE LINE ~ niz tacaka sa (X,y) koordinatama i erta se u dvije dimenzije sa definisanom linijom izmectu tih tacaka i definisanim simbolima za svaku tacku STLL'\[E ~ definisanje tipa linije i eentriranje simbola upotrijebljenih sa LIt"'\[E i LGLINE CURVE~ erta krivLJ liniju izmectu niza tacaka sa (X,y) koorelinatama i".XIS ~ ertanje linearnih osa sa skaliranim duzinama, deblj inom i oznakama u dvije elimenzije . AXIS3D - ertanje linearnih osa sa skaliranim, duzinama elebljinom i oznakama u tri dimenzije STAXIS ~ definisanje formata ose i debljine oznaka SCALG ~ definisanje logaritamskog faktora skaliranja za upotrebu LGAXS \ LGLIN LGLIN ~ ertanje log-log iii polulogaritamske linije u dvije dimenzije sa nizom (x,y) tacaka LGAXS ~ ertanje! logaritamskih osa u dvije dimenzije sa naslovom, poeljelom i vrijednostima COLOR ~ elefinisanje kolora koji ce biti upotrijebljeni za linije i tekst PALETE~ definisanje boje sa kolor indeksom FILL~ uzima u obzir odgovarajuci poligon koji treba da bude "ispunjen" STFILL~ izbor odgovarajuce srafure uporijebljene za FILL DFFILL~ definisanje srafure upotrijebljene za FILL
Racunarska grajika sa FORTRAN-om
----------------------~
./
DGRID - izvoaenje dvodimenzionalne interpolaeije za konstrukciju unutar programa za date Tacke upotrebom interpolacije lI(udaljellost na stepen) ./ ZSMTH ~ crtanje interpoliranih linija (smooths) za podrucje pravougaonika Slijedeci potprogrami su za ertanje elvo i tro-dimenzionalnih kontura ./ ZSlDE ~ definisanje tacke ulllltar poligona. Upotrebljava se za naslove unutar konture na mape ./ ZLEVEL ~ determinise sve konturne nivoe prezentovane na mapi ./ ZPOST ~ markin'i i oznacava date tacke 1I dvodimenzionalnoj mapi ./ ZCNTUR ~ erta dvodimenzionalnu povrsinu konture bazirane na konturnim tackama paralelograma ./ ZCSEG - erta-d~odimenzionalnu povrsinu konture bazirane na konturnim tackama paralelogxama. Dijeli paralelogram na manje povrsine za vecu preeiznost okonturivanja
./ ./ ./ ./ ./ ./ /
./ ./
./ ./ ./ ./
Slijedeci potprogrami su potrebni za kontrolu trodimenzionalnog teksta, osa i kontura DISP3D ~ definisanje broja climenzija (elvije iIi tri) SCAL3D definisanje elimenzija paralelograma U odgovarajucim jeclinieama SYORNT ~ definisanje ugla za tekst i ose P3D2D ~ konvertuje tacku u tri dimenzije za izlaz (output) 1I dvije dimenzije (x,y) FIT3D ~ elefinisanje troelimenzionalnog prostora za ispllnu (srafuru) UNE3D ~ ertanje iinija u tri elimenzije VTSP3D ~ inieira ako je tacka viclljiva poslije isertavanja mreze Potprogrami za crtanje trodimenzionalnih povrsina upotrijebljeni su sa kontrolnim tackama datih sa subroutinama ZGRID iii DGRID i ZSMTH: MESH ~ definisanje troclimenzionalne za dvodimenzionalnu transformaeiju i erta trodimenzionalnu mrezu povrsine MESHS - clefinisanje trodimenzionalne za elvodimenzionalnu transformaciju i erta trodimenzionalnu mrezu povrsine. Vrsi se podjela na manje paralelograme MSQUAL ~ elefinisanje kvaliteta linija za stanje povrsine MESHCI ~ definisanje dva kolor indeksa za ertanje mreze na vrhu i unutar podrucja MSHCOL ~ clefinisanje intervala za boje MESH4 ~ ertanje cetverodimellzionalne povrsine. Cetvrta climenzUa je prikazana preko boje
Potprogrami dvodimenzionalnih kontura ZGRID ~ izvoctenje dvodimenzionalne interpolacije za konstrukciju unutar programa za date tacke upotrebom Laplacian i splajn interpolaeije. 171
Racunarska graflka sa FORTRAN-om
FORTRAN prograliliranje za windowse
Primjer: CALL PLOT(I.,I.,-3) juli 1999. godine
crtanje linija
PROGRAH pl88
XSKALA=9./(1.2*X~~II)
YSKALA=8./(1.2*YMAXll) REAL X(ll) ,Y(ll) X I Y KOORDINATE !CHARACTER *1 ITEXT I
definisanje gornje desne tacke
DATA
XHAX/9./,Y~~X/8./
duzina X i y ose
CALL CURVE (X,Y,-10,1.) ! GOTO 900
;U=l1
DO 1=1,11 X(I)=I-1 Y(I) =X(I) **3 9*X(I) END DO XHAXl=HAXVAL(X) YHAX1=HAXVAL(Y) XHINl=HINVAL(X) YllIN1=HINVAL (Y)
YPOC= 0.223+ABS(Y(I) )/2.2 - 7
! inicijalizacija za plot !
CALL PLOTS(3,91,91) ! setovanje
~a
DO 1=1,11 X(I)=X(I)*XSKALA*O.9+1. Y(I)=Y(I)*YSKALA*O.9+1.6 END DO xpmin=minval(x) ypmax=maxval(y) ypmin=minval(y)
boju
I
CALL COLOR (15, 0) CALL NEWPEN(4) ! setovanje za factor !
FACT=I. CALL FACTOR (FACT)
XHAXll=ABS (XHINl) +ABS(XMAXl)
CALL STAXIS (.119, .26, .112, .15,2) DD=X~~I*(XSKALA/l.2)
CALL AXI S ( 1 . , 1 . 6, 'X
, ,-5,DD,0.0,0.0,1.5)
CALL STAXIS (.1, .2, .1, .12,0) DZ=YMAXl*YSKALA/l.2 if(yminl.lt.O.O) then ypoc=I.6 -abs( yminl*yskala/l.2) else ypoc=1.6 end if CALL AXIS(I. ,ypoc, 'Y-OSA' ,5,DZ,90.,0.,100.) CALL NEWPEN(2) CALL SYMBOL (3.,4.6, .223,' Y=X**3 - 9*X - 7' ,0. ,18)
CALL NEWPEN(l)
YHAXll=ABS(YMINl)+ABS(Y~~I)
CALL WINDOW(O.,O.,XMAX,YMAX)
172
KRAJ CRTANJA
173
· 'J',e '-"(/. windowse FORTRAN programlran
CALL PLOT(O., O ., 999) I
END
174
1.
DVOD
Mjesovito programiranje je proces povezivanja (building) programa koji su napisani u izvornom kodu sa dva iIi vise programskih jezika. Pri tome se programer mora pridriavati slijedecih karakteristika: .,/ Pozivanje postojeceg koda koj i je napisan u drugom jeziku, ../ Upotreba procedura koje mogu biti razlicite zavisno od pojedinih jezika, .,/ Davanje prednosti u procesnoj brzini.
';
Mjesovito programiranje je moguce sa 32-bitnim jezicima Visual Fortran, Visual ClC++, Visual Basic i MASM. Mjesovito programiranje u Win32 je za 32-clvobitne racunare U oclnosu na 16-bitne za koje je u mnogim slucajevima to ,tesko ostvarljivo. Karakteristike kreiranja mjesovitih programa su 1.1 davanju imena iyarijabli i procedure za upotrebe rutina napisanih Ll razlicitimjezicima. U cjelini se mora voditi racuna 0 konvencij i prozivanja koja ukljucuje koje su rutine ukljucene, koje se rutine ponistavaju poslije poziva, u kojima futinama je striktan iii fiksni broj argumenata, imena promjenljivih ili konstanti, da Ii su imena clekorisana (kao u Visual C++) i koji su odgovarajuci tipovi i data strukture zajednicke iii odgovarajuce u jezicima. U ovom clijelu opisan je tok primjene mjesovitog programiranja sa: .,/ Visual FortranlVisual C/C++ i .,/ Fortran/Visual Basic ,;1 Elle ,g:d,t
;I:~
Io.;,I$
~lnd0W
!;i<.>lp
:aj~~t1£J"i2t
:5
: ~jtH_
Raady
:!ijilstartIUA·O~~ ~.'~"'~.
t ®Kn~Q.3~d-
rl1!crosoft word
1!.~~~~~~.TAl. ~~sua.1 ~~~.~ra?
Slika 4.1
..
.'~'-;~~'
FORTRAN i drugi programskije:::.ici
FORTRAN programiranje za windowse
2. PROGRAMSKI JEZIK C/C++ Nastanak C jezika Osnovna ideja u razvoju bila je napraviti jezik koji je: ../ jednostavan za kompaj lirati ../ efikasan ../ portabilan ../ fleksibilan ../ modularan Od samog pocetka jezik je raZVIJen sa idejom da se jednostavno kompaj lira: ../ C++ koristi samo 32 kljucne rijeci: neke izvedbe BASICA koriste vise od ISO. ../ C++ definira samo jedan pojam za potprograme (funkcije u C-u); veeina jezika koristi dvojnu sintaksu: funkcije i subroutine. ../ Kod prenosa parametara (argumenata) u funkciju, C uvijek prenosi kopije originalnih parametara; mnogi jezici mogu prenositi iii kopije iii originale . ../ Funkcije u C-u su osnovni elementi za izgradnju programa . ../ C koristi samo tri osnovna tipa podataka (char, int, double) koji se mogu modificirati; mnogi jezici koriste znatno vise. Kao primjer spomenimo da C nema logicki (Boolean) tip podataka, vee koristi integer u tll svrhu. Svaki izraz koji daje kao rezultat 0 tretira se kao iogicka neistina, a sve drugo je logicka istina. ../ enema nareclbe za citanje i pisanje vee za citanje i pisanje koristi funkcije. To ne samo cia pojeclnostavljuje jezik. nego ga cini znatno moclularnijim. Ako zelimo citati ili pisati na nestanclarclnom ureaaju jednostavno koristimo drugu funkciju.
---.,.--~~.
Sa pojednostavljenjem kompajlera C je prebacio odgovornost na programera. To znaci da C programer ima vise "sloboda" u programiranju, sto rezultira u stvaranju efikasnijeg programa. Znaci, treba vise vremena da se postane iskusan C programer nego npr. iskusan BASIC programer. C kompajler je jednostavan i efikasan. To znaci da se C program izvodi bde, a koristi manje memorije nego isti takav program napisan u nekom drugom jeziku. Bogata podrska za rad s pointerima (varijable koje sadde memorijske adrese clrugih varijabli) omogucuje direktan pristup u memoriju i tako znatno doprinosi brzini izvodenja. Specijalni operatori za racl sa bitovima omogueuju bolje iskoristenje memorije. Mogucnost dinamickog alociranja.i osiobaaanja memorije i intenzivno koristenje sloga (C je s!ogovno orijentiran jezik) doprinosi njenom boljem iskoristenju. Zahvaljujiei svojoj efikasnosti C je u rnnogim primjenama zamijenio Asambler. 178
Programski jezik je fleksibilan ako se moze koristiti za programiranje razlicitih zadataka. Njegova struktura, s jedne strane, oillogueuje direktan kontakt s memorijom, sto ga cini pogoclnim za razvoj onih programa kod kojih je brzina izvodenja i iskoristenost memorije kriticna. Tu spadaju razliciti dijelovi operacionog sistema, kompajleri, clrajveri i s1. S druge strane, bogate kontrolne strukture omogucuju efikasno programiranje aplikacija. C je najpogodniji i najvise se koristi za sistemske programe . Programski jezik je moclularan ako se programi napisani u tom jeziku mogll jeclnostavno clogradivati i povezivati sa ostalim programima. Koncept funkcije, kao osnovnog elementa programiranja, omogueuje jednostavno povezivanje sa ostalim programima, a i jeclnostavnu nadgradnju postojeeih programa. Aplikacija koristi funkcije za interno povezivanje pojedinih dijelova. Zelimo Ii promijeniti fllnkcionalnost, treba samo pozvati clrugu funkciju. S clruge strane, aplikacija preko funkcija komunicira sa vanjskim svijetom (npr. perifernim uredajima). Ako zelimo kOlllunicirati sa novim hardverom, treba samo napisati (iii koristiti vee postojeell) funkciju i pozvati je iz programa .
2.1 OSNOVNA STRUKTURA C JEZIKA C je strukturni jezik, koji proklamira dekompoziciju problema na samostalne i neovisne cjeline koje zovemo fUllkcije (cest je naziv i potprogrami). Funkcije su osnovni dijelovi za izgradnju programa. Vaznost funkcija vicll se i po tome sto standard C jezika saclrzi i biblioteku funkcija. Funkcije l11ozemo pisati sami iii koristiti vee postojece (npr. iz standarclne biblioteke). ~----Najjednostavniji primjer programa pisanog u C-u: main() {} Svaka funkcija u C-u ima ime, npr. main, dvije obicne i dvije viticaste zagrade. Funkcijamain () moze imati odreoeni set parametara, kao npr.: main ( int argc, char *argv[ ] ) { } Prvi parametar definise intidzer varijablu za argument iii promjenljivu c. Argumentchar*argv moze biti kompleksan kao niz karakter stringova. Dobro clizajniran program izclvojit ce funkcionalne cjeline u zasebne funkcije. Te se funkcije mogu kasnije zamijeniti novim (boljim) ako treba. Tako npr. mozemo za ispis rezultata koristiti funkciju IspisRezultata. Ako kasnije 179
FORTRAN programiranje za windowse
FORTRAN i drugi programski jezici
zelirno drugaciji opis, iii ispis u nekom boljem obliku (npr. grafickom) zamijenit cerna postojecu funkciju novom, bez potrebe da mijenjamo tok programa. .lednako tako dekompozicija na funkcije omogucuje brzi i Iaksi razvoj programa unutar grupe. Posto su funkcije zasebne i samostalne jedinice, pojedinac moze kodirati i testirati svoje funkcije, neovisno 0 drugima. Jednom napisane i testirane funkcije mogu se kasnije koristiti i u drugim programima.
znakom # su pretprocesorske naredbe (obraauje ih pretprocesor). Naredba #include moze se staviti bilo gdje u program, ali je obicaj cla se stavlja na sam pocetak. C programi reclovito imaju po nekoiiko #include naredbi na pocetku . Slijedeca linijaje prazna, i ona se ostavlja da bi citljivost programa bila bolja. Iza ove nareclbe slijedi funkcija maine ). Buduci da program pocinje od funkcije main, ona se obicno stavlja na pocetku koda, iako to nije neophodno. Funkcije u C-u prepoznajemo po tome 8tO iza imena slijede zagrade, unutar kojih se opcionalno mogu staviti argumenti. Ako i nema argumenata, zagrade se moraju staviti. Otvorena viticasta zagrada, { , koja slijecli nakon funkcije, oznacava njezin pocetak, dok zatvorena viticasta zagrada, }, na kraju oznacava njezin kraj. Sve unutar toga su naredbe koje pripadaju toj funkciji. Funkcija main ima sarno jednu naredbu: printf ("zdravo svima\n"). Svaka naredba u C-u mora zavrsiti tacka-zarezom. Kombinacija \11 (dva znaka) na kraju znaGi skok u novi red. Funkcija printf je mnogo kompleksnija i njezin opsti oblik izglecla ovako:
Kao !ito smo rekli, C je koncentrisan oko funkcija. Sam pocetak programa je funkcija koja se zove main. Naglasavanjem potereba za funkcijama C povezuje kodiranje programa sa njegovim dizajniranjem. Programske cjeline (funkcije) mogu se nalaziti u jednoj jlj vise datoteka. Cesta je praksa da se funkcionitln0 cjeline izdvoje u zasebne datoteke. Kako se svi ti dijelovi na kraju povezuju u jedinstveni sistem? Da bismo to shvatili morflmo objasniti postupak nastajanja programa od njegovog izvornog do izvedivog oblika. C program se obicno sastoji od nekoliko izvornih datoteka koje imaju ekstenziju "c". U jednoj od tih datoteka nalazi se i funkcija main od koje program pocinje. Proces stvaranja programa sastoji se iz dva dijela: -./ kompiliranja (prevoaenja) ,/ linkovanja (povezivanja) Svaka izvorna datoteka mora se kompajlirati i kao rezultat se dobije tzv. ".obj" datoteka koja predstavija prevedeni kod (cesto se zove relokatibilni kod). Ovaj kod sadrzi relativne adrese i nije povezan sa onim dijelovima program a koji su izvan te datoteke (npr. funkcije u drugim datotekama iii sistemske funkcije).
2.2 PROCES STY ARAi'TlA PROGRAMA Svaki program u C-u mora imati harem jeclnu, glavnu, funkciju koja se zove mainTradicionalno najmanji i najjednostavniji C program ispisuje poruku, npc "zdravo svima". Taj program izgleda ovako:
# include
printf (Format, arg 1, ... , argn) Naredba printf je funkcija sa varijabilnim brojem argumenata (takve su funkcije moguce u C-u). Broj argumenata implicitno je zapisan II prvom argumentu, Format. Format sacldi tekst za ispis i proizvoljan broj "%" kombinacija, gdje n preclstavlja specifikator. Za sada je bitno uociti cIa svaka %n kombinacija zahtijeva dodatni argument iza FOlmata. Prema tome, koliko ima %n kombinacija u Formatu, to!iko mora biti i dodatnih argumenata, argl .. argn.
PrintY ("%d je cijeli broj, a %f realni broj \11", 11, m). Buduci da ima dvije %n kombinacije (%ci i %F), treba imati i elva doclatna argumenta, U ovom slucaju n i m. Ako je n=1 0, a 111=12.34 onda ce se ispisati: 10 je cijeli broj, a 12.34 real an broj Funkcije Opsti oblik funkcije izgleda ovako: Povratni podatak ImeFunkcije (deklaracija argumenta) { deklaracije naredbe
Prva linija # include
i81
FORTRAN programiranje
ZCl
windowse
Povratni podatak je ono sto funkcija vraca kao rezultat. Deklaracija argumenta je opcionalna i stavlja se jedino ako funkcija prima argumente. U tom mora se navesti tip podataka i ime varijable. Deklaracije ul1utar funkcije sluze za clekiarisanje !okalnih varijabli. One su viclljive same unutar funkcije. Proizvoljan bro] naredbi, racli citkosti cijeiog programa, treba ograniciti. Ukoliko je previse naredbi, mOie111o funkciju podijeliti na dvije ili vise. Primjer:
int potencija (int baza, int exponent) { int i, p; p=l for (i=l; i<=exponent; i++) p=p*baza return p };
_ _ _ _ _ _ _ _ _ _....:F:....-:::O:..R:.::T..:.R~A~N i drugi programskijezici
Tipovi podataka c koristi slijedece tipove varijabli: ./ ./ ./ ./ ./ ./ ./
char-karakter, eluzine I bajt na PC -u int-cjelobrojna varijabla, duzine 4 bajta na PC-u short-kratka cjelobrojna varijabia. duzine 2 bajta na PC-u !ong-eluga cjelobrojna varijabla, eluzine 4 bajta na PC-u float-kratka realna varijabla, eluzine 4 bajta na PC-u double-duga realna varijabla, eluzine 8 bajta na PC-u cjelobrojne varijable mogu imati moclifikator unsigned, sto znaci da su bez predznaka, oelnosno cia saclrze same pozitivne brojeve.
Nekoliko primjera: intn; unsigned long uI;
char polje[ I 0]; Ova funkcija vraca cijeli broj, pa je Povratni podatak int (int je u C-u oznaka za cjelobrojnu vrijednost). Funkcija prima dva argllmenta, baza i exponent, oba cjelobrojna. U deklaraciji se najprije navodi tip podatka (u nasem slucaju int), a zatim ime argumenta. Argumenti su meausobno oclvojeni zarezom. Funkcija nadalje koristi lokalne varijable i, p. Slijede naredbe za racunanje i na kraju vracanje rezultata nareclbom return p.
Varijabla n je cjelobrojna, a ul je eluga cjelobrojna varijabla bez predznaka. Polje varijabli predstavlja polje karaktera (znakova) oel 10 elemenata. P?lja u C-u se deklarisu tako cia se iza imena varijable stave uglaste zagrade i u npma broj koj i predstavlja dimenziju polja. Operatori
Funkcija se pozi va ovako: illt rezultat; Rezultat=potencija (2,3); Ovaj primjer izracunava 2 na potenciju 3 i daje rezultat 8. Opcenito gleclano, argumenti se u neku funkciju mogu poredati po vrijednosti ili po referenci. Ako se neki argument predaje po vrijednosti, onda se pri svakom pozivu funkcije kopiraju originalne vrijeclnosti. Funkcija, dakle, radi sa svojim kopijama, i nema bojazni cia ce promijaniti originalne vrijeclnosti. Ovakvi se argumenti cesto zovu i ulazni argumenti. Ako sa argument predaje po referenci, oncla se predaje referenca na originalni argument i sve promjene koje funkcija eventual no nacini na tom argumentu reflektiraju se na originalu. Drugim rijecima, funkcija ima direktan pristup na argument. Ovakvi se argumenti cesto zovu i izlazni argumenti. C jezik uvijek predaje argumente po vrijednosti. Predaja po referenci moze se ostvariti koristenjem pointera. 182
Operatori se u C-u mogu podijeliti u slijedece skupine: ./ aritmeticki operatori ./ logicki operatori ./ operatori nad bitovima Aritmeticki operatori A. ritmeticki operato.ri sluze za aritmeticke operacije, a mogu biti binarni iii unarnL Pored standardnlh operatora: mnozenje (*), elijeljenje (I), sabiranje .oduzlman]e (-), C koristi i modulo operator (%). Ovaj operator daje ostatak u dlJeljenJu cJelobrojnih vrijeclnosti. Tako npr. 10% 3 je I. Specificnosti C-a su i inkrement (++), te dekrement (-) operatori. Ovi operatori javljaju se U dva oblika, npr. ++a i a++ (isto vrijedi i za dekrement operatore). Razlika izmeau ova dva moda vidi se II slijedecem primjeru: X=a++ Stavlja vrijednost od a u X i zatim povecava za 1 183
FORTRAN i drugi programskijezici FORTRAN pmgramimnje za windowse
float shurt continue for default £oto sizeof static do Rezervisane rijeci vezano za komp01jler (decI fort rail near far const
X=++a Najprije poveca zajedan i zatim stavlja tu vrijednost u X Ako je a bio 4, onda ce slucaju biti X=5, a=5.
Ll
prvom siucaju biti X=4, 01=5, dok ce u drugom
void
volatile vvhl1e
Logicki operatori Logicki oDeratori sluze u logickim izrazima. C sadrzi relacijske operatore: ~ece (», vece iii jednako (>=), manje «), manje iii jednako «=). Znak za usporedbu je = = (dva znaka =). Treba biti pazij iv i razlikovati (~=) oei (=). Jedan znak jednako zna6i pridruzivanje, kao npr. a=b. Ovdje se vrijednost varijable b pridruzuje varijabl i o1. Dvostruki znak jednako usporeduje dvije varijable i daje logi6ku istinu akOSll jedn01ke, odnosno neistinu ako SLl razli6ite: Ako je 01=5 i b=4 onda ce:
2.3 VISUALFORTRAN/vISUALC++
U prethodnom dijelu date Sll osnovne karakteristikr C!C++ programskog jezika iz kojih se moze u06iti razlika u konvenciji izmedu FORTRAN-a i (:-a. Prilikom upotrebe VISUAL C/C++ mozemo editirati, kompajlirati i povezivati kod sa Microsoft Visual developmentom. Prilikom startovanja programskog jezika C bira se FilelNew i Visaul C omogueava aktiviranje editora sa izborom odgovarajucih opcija (slika 4.2).
O1=b staviti 4 u a a==b ce dati 0 (nula je logi6ka neistina u C-u, sve ostalo je logi6ka istina). Logicki I operator je &&, logicki ILl je II i logi6ki NE je !. Logicki NE se llloze kombinovati sa znakom jednakosti i onda zn01ci nejednakost (1=). Operatori nad bitovima Operatori nad bitovima su specificnost C jezika. Oni omogucujll logi6ke operacije nacl bitovima unutar cjelobrojnih varijabli. Najveca prednost je bolje iskoristenje memorije i uglavnom se primjenjuje u sistemskom programiranju (npr. kod pisanja drajvera). C ima logicki r (&), logicki ILl (I), 10gi6ki ekskluzivni ILl (J\), pOlTI£lk u lijevo «<), pomak u desno (») i jednostruki komplement (-). Tako npr. x=x& - 077 postavlja zadnjih 6 bita u nule. U tabeli 4.1 dat je pregled rezervisanih rijeci u CIC++ programskom jeziku. auto break case char
double else enum extern
int long register return
Tabela 4.1 strllct switch typeclef union
R'.!ady
;~Startl.ti ~~'~;~:n ~ j ~Y.nJiga4d-_MI~rc:;oftWord 11.~-.r:i~~~~_~.~~~~U:3.1. ~:::.~.
Slika 4.2 Prozor C++ Fortran kompajler omogucava kombinaciju sa C++, kako je prikazano na slici 4. I prilikom izbora opcije (Worksapace). Prilikom linkovanja na glavnoj liniji, ako je glavni C program CMAIN.C, tada cemo pozivati fOliranski potprogram normalno sa nazivom FORSUBS.~90. Kreacija CMAIN je sa sljiedeeim komandama: 185
184
FORTRAN i drugi programskijez.ici
FORTRAN programiranje za windowse
c I Ic camin.c DF cmain.obj forsubs.f90 Fortran DF kompajler 6e pridruziti objektni fajl za glavni program napisan u C-u i kompajIirati sa C kompajlerom, a kao rezultat toga je CMAIN.EXE sa dva objektna fajla. Prilikom fada sa FORTRAN-om i C++-om moramo voditi racuna 0 slijedecem: .,/ upotreba fortranske Run-time biblioteke (tipovi i projekti), .,/ upotreba visekorisnickih biblioteka i .,/ upotreba C Debug biblioteke. Slijedi primjer primjene·pozivanja FORTRAN-a programa pisanog u C++ iz FORTRAN-a.
IZ
C++
pozivanja
Primjer:
Pozivanje potprograma pisanog u C-u iz program a pisanog u FORTRAN-u Za dati primjer pozivanja potprograma pisanih u C programskom jeziku iz programa pisanog u FORTRAN-u potrebno je u projekat "Workspace" ukljuciti datoteke u Kojima se nalaze potprogrami C programskog jezika (u C programskom jeziku potprogrami se nazivaju funkcije). Za primjer koji slijedi, izgled ekrana nakon otvaranja projekta (Workspace "piramida") i ukljucivanja datoteka, koje se koriste u projektu, datje na slijedecoj slici.
Slika 4.3 U navedenom primJeru "poziv_pirnmide.for" je llne datoteke FORTRAN-skog programa koji poziva, a "piramida.c" je Ilne datoteke potprogtama pisanog u C-u koji se poziva. Primier ::,:t pozi'lanje
If
Ir.. te::rf,:5,ce zo.
~./e2U
potp.ro'~:.rrEUila
pis.::tW:J9
izm:edi1.l FORTRAlT·-5. i
C-a
(-··n iz Fi)RTRA.lf···a
!.1.
Z~{
poziva.nje patp:rcgralftB.
INTERFACE TO SUBROUTINE piramida [C,AI.IAS: '_piramida'J (a,b)
I
:HARACTER*l a [VAlUE] CHARACTER*l b [VALUE] END
! GLAVNI PROGRA}f
I
! Deklaracija p:ro~ftjehlj:;.v-ih ICHARACTER*l as,bs [ Unos PQcii3.taka.
I
PRIHT '( l]L A, 120) , , 'UlIESITE PRVI ZHAK' READ' (A, I1)' ,as PRINT' (lX,A,I20)', 'UNESITE DRUGI ZHAK' READ' (A, II)' ,bs
j
Pozi.1ra.nje
I
l?<:,t.py-ci~:r;ama
ICALL pira.m.i~~ C~s, bs)
! Rrai programs STOP END
I
186
187
___________F~O~R~T:..:R:..:A~N i drugi I_Jr_o--,-g'-.'_·(!_n_1s_·k_ic:.-j_ez_i_c_i___________
FORTRAN programiranje ZCl windowse
Radi illlstracije komllnikacije FORTRAN-skog programa i potprograma pisanog u C-u, u FORTRAN-skom programu "poziv_piramide.for" vrsi se unos granica intervaLl, a ispis piramide slova se vrsi iz potprograma "piramida.c" pisanog u C-u. Iz prikazanog se vidi da se u FORTRAN-skom programu moraju na pocetku nalaziti naredbe za II (za svaki pozivani potprogram poseban" Pri pozivanju potprograma mora se postovati standardna procedura za pozivanje potprograma u smislu adekvatnosti i broja koristenih varijabli. Ispis koda funkcije pisane u C-u ("piramida.c"):
m,.,~ ", " b
/"*
Primje/: Pozivanje potprograma pisanog u FORTRAN-u iz programa pisanog u C-u Za dati primjer pozivanja potprograma pisanih u FORTRAN-u iz program a pisanog u C-u potrebno je u projekat "Workspace" ukljuciti datoteke u kojima se nalaze potprogrami pisani u FORTRAN-u. Na slijedecoj je slici prikazan ekran nakon otvaranja projekta (Workspace "fakt_pit") i ukljucivanja datoteka, koje se koriste u projektu.
a funkcije (cha.r- a ~
cick.l.':JrE\ci.l;:) \T'::J.ri·iz:ll"J.ll char Jfl, n: POJll, -
k.GJf:"; :~.8 kCJrl:~,t,e U
I1.l.rJ.::.ciji.
(potp.rog:t'.::l.J1l1..l.)
,*,'
iOlt ij.k. IfI.=a ..
n=b;
pOJfL=n._
I
JIl=POJil"
}
:r-e:zul to. t,3-, ·x·/
("Piramida za interval [%c. %cJ'n",m.n); i=J[t,
D1-
for
i-c=n; i++) (Jr.=!), k<1'l-i (j=m.; j<-=i-l~
k++) putchar-(' '). j++) putchar(j)~ putchar(j--),
I·:rhile (j pu tchar ( --,n I
),
}
Slika 4.5 Za unijeta dva znaka min na intervalu ['a','z'] pravi se piramida slova. Npr. ukoliko je 'm'=b i 'n'=1 piramida slova ima siijede6i izg}ed:
Slika 4.4 188
U navedenom primjeru "fakt_pit.c" je ime datoteke C programa koji pozlva, a "F AKTORIEL.for" 1 "PIT AGORA.for" su imena datoteka potprograma pisanih u FORTRAN-u koje se pozivaju. Ispis koda glavnog programau C-u ("fakcpit.c"):
I
programe uradio mr H. Bukvic 189
FORTRAN programiranje za windowse
_ _ _ _ _ _ _ _ _ _-=-F.::O:..::R~T:..:R'.':A~N i drugi programskijezici
#inclll.de
f lOE!.t b,
float *c),
flo.::tt c' printf (" . . ,.n.Faktoriel ad PITAGORA :' '::0 40
printf(WZ~~s~ran~ce
l
40 hipotenuz.3. je.
%£'-...n'·-".n"
r
Slika 4.6 Ispis koda FORTRAN-skog potprograma "FAKTORIEL.for":
3. PROGRAMSKI JEZIK VISUAL BASIC
,'-
FUnCTIOn FAKTORIEL [VALUE]
(n)
n
i,
I
a.J(lt
'" i amt
Ispis koda FORTRAN-skog potprograma "PITAGORA.for": ~ SUBROUTIHE potprCf':JrdJlt PITAGORA fer
I
SUBROUTINE PIT A,GORA (a, b" REAL a [VALUE] F:EAL b [VALUE] REAL c [REFERENCE] [, c - SQRT (a * a + b ~b) END
c)
Radi ilustracije komunikacije C programa i potprograma pisanih u FORTRAN-u, u navedenom primjeru se u C programu "fakt_pit.c" zadaju vrijednosti ito, za trazenje faktoriela vrijednost 7 i za izracunavanje cluzine hipotenuze pra\iouglog trougla po Pitagorinoj teoremi duzine stranica trougla 30 i 40. Ispis rezuitata se isto tako vrsi iz C programa "fakcpit.c". Iz prikazanog se vidi da se u C programu, na pocetku programa moraju nalaziti "extern" instrukcije (za svaki pozivani potprogram posebna "extern" instrukcija). Pri pozivanju potprograma mora se postovati standarclna procedura za pozivanje potprograma u smislu adekvatnosti i broja koristenih varijabli. Za zadate vrijednosti npr. n=7 i a=30 i b=40 rezultati su slij~de6i:
190
Visual Basic je sigurno najjeclnostavniji, ikacla napravljen, profesionalni programskijezik. Njegova sintaksa temelji se na gotovo 50 godina starom Basic-u iz cijeg naziva mozemo zakljuciti kome je namijenjen. Za samo nekoliko mjeseci mozete ovlaclati Visual Basicom i poceti praviti svoje prve Windows programe Zasto programirati u VB-u? Visual Basic ima nekoliko preclnosti nacl ostalimprogramskimjezicima i alatima. On omogucava cia nacrtate svoj program prije nego i pocnete pisati kocl i tako sebi oiaksate posao. Druga velika preclnost jeste lako ucenje programskog jezika. Naredbe su slicne engleskomjeziku. Visual Basic se koristi kao skript jezik u MS Office-u 97, pa njegovim ucenjem dobijate mogu6nost programiranja II Office-u. Visual Basic ima mogu6nost nadgradnje pomocu -1\ctiveX kontroia. To su vanjske kontrole koje mozete ubacivati u svoje programe i poboljsati njihovu funkcionalnost i fleksibilnost. Vaznaje i mogu6nost vanjskih poziva operativnom sistemu pom06u tzv. API funkcija. Od verzije 5 imate mogucnost koristenja carobnjaka pom06u kojeg mozete, samo odgovaraju6i na pitanja i izabiru6i prave opcije, kreirati izglecl vaseg programa. Visual Basic je potpuno objektni programski jezik, sto znaci da se sve radnje izvode manipulacijom i promjenom svojstava raznih objekata. Pored promjene svojstava objekata, postoje i ugraaene funkcije koje sluze za 'nevidljive' operacije poput rada sa datotekama, racunskih operacija i sl. Mozete pisati funkcije racli poboljsanja mogucnosti VB-a iii prilagoaavanja potrebama. Zato je potrebno nesto bolje poznavanje programskog jezika i naredbi. Osim putem kocla, svojstva objekta mijenjaju se i prilikom dizajniranja programa putem Properties prozora. Ovaj naCin mogu6e je koristiti samo pri izradi programa, a ne tokom njegovog izvoaenja. Za promjenu svojstava pri izvoaenju programa morate koristiti naredbe tj. kod. 191
FORTRAN i drugi programski jezici
FORTRAN programiranje za windowse
Sve naredbe za promjenu svojstava objekata su u obliku: Ime_ objekta. Svojstvo
= vrijednost
Na primjer, da bisl110 promijenili tekst koji je ispisan na objektu Labell, upisat cemo slijedeci kod: Labell. Caption
= "Ovo je tekst ispisan u OVOI11 objektu"
Nazivi objekata i njihova svojstva su, u stvari, rijeci koje se koriste u engleskOI11 jeziku. U tome se i ogleda jednostavnost VB-a. Label je naljepnica, natpis, a Captionnaslov.
,/ Properties - je prozor u kojem se nalaze popisana svojstva trenutno oznacenog objekta. Sva ta svojstva moguce je promijeniti pomocu ovog prozora, ali i pomocu koda . ./ Toolbox - je prozor u kojem se nalazi popis objekata koje mozete unijeti u svoj projekt. Svi objekti su prikazani graficki, kao ikona, ali imaju i tooltip. ./ Code Window - je prozor gdje se upisuje kod. Upisivanje koda je lagano. Sarno dvokliknete na neki objekt i pojavljuje se ovaj prozor za unos koda. Izaberete objekat, potom akciju pri kojoj 6e se izvrsiti i sve.ie gotovo . ./ Project Explorer - je prozor koji nudi hijerarijski prikaz svih formi, modula itd. Tipovi podataka u Visual BasiCH Podaci koji u Visual Basicu se dobijaju i koriste tokom lZvrsavanja programa nalaze se u varijablama. Postoji mnogo tipova podataka pa tako i mnogo tipova varijabli koje ih mogu cuvati. Jedna varijabla moze da sadrzi samo jedan tip podataka, ito onaj za koji se odlucimo. ,/ Boolean - moze saddavati samo vrijednosti True i False. Koristi se kao spremnik rezultata logickih operacija . ./ Byte - ovo je jednoznakovna, jednobajtna numericka vrljednost u raspol1u od 0 do 255. i nema predznaka. ,/ Currency - saddi vrijednosti koje se odnose na val ute. ,/ Date - sadrzava datume. ,/ Integer - sadrzi numericke vrijednosti, negativne i pozitivne. ,/ String - saddi tekst. Nema ogranicenja II kolicini teksta koju varijable c1eklarisane za ovaj tip podataka mogu sadrzavati.
-!I~ ~
GO :::J~
it9"-. -
~.~ ill
3.] VISUAL FORTRAN /VISUAL BASIC
9:36
Slika 4.7 Prozori Visual Basica U VB-u, pored glavnog prozora, postoje i dmgi prozori koje pozivamo po potrebi. Svaki od njih ima svoju upotrebu i sluzi za odredene radnje. ./ Main Window - je onaj na kojem se nalaze toolbar i meniji kojima pozival11o sve osnovne funkcije koje kontrolisu rad programa. Te su funkcije New Project, Open project, Save, Save As, Compile, Run itd .. Ako zatvorite ovaj prozor izlazite iz Visual Basica. .
192
Visual Basic su upotrebljava obicno kao "Front-End Generator" u kombinaciji sa FORTRAN-om. Prilikom pozivanja FORTRAN DLL iz Visual Basic-a mora se voditi sledeca kontrola nad podacima i tipovima podataka: ,/ Visual Basic upotrebljava STDCALL standard sa nekim izmjenama. On ne pridruzuje "@n" dato u imenima na x86 sistemima. ,/ Sa Visual Basic-om mora se voditi racuna 0 rutinama koje ce pozivati (called) i odgovarajuce argumente. Skalarne vrijednosti argumenata mogu biti direktno pridruzene iz Basic-a u FORTRAN, ali stringovi, nizovi i drugi tipovi moraju biti opisani. Osnovni principi mjesovitog programiranja sastoje se u: ,/ Deklarisanje FORTRAN-ske mtine u Visual Basic ,/ Eksport rutine sa FORTRAN DLL-om ,/ Definisanje tip a podataka 193
FORTRAN programiranje za windowse
FORTRAN i drug! programskijezici
---------------------
U tabeli 4.2 datje pregled usklaaenosti tipova podataka u VB-u i FORTRANU: Tabela 4.2 I
Problem pozivanja-Cal
)I
i
i Visual
Basic i Visual Fortran inteaer varijable imaju usklac1ene. , Kao osnova (default) intidzer (integer) velicina u Basicuje sa 2 najta i od,govara INTEGER (2) u Fortranu Kao default Visual Basic i Visual Fortran imaju single i double Real precision sa istim brojem bajtova (4-single, odnosno 8 za double I "recision). . I Kao default u Basicll U s(ruKtilI'j poziva-caiieci Ciefiniite<~~'~k-a-o-----i BSTR. U ovom slucajll treba voditi raClll1a 0 llsaglasenosti,S:l String Fortranom. Kad se pridruzuje string iz Basica za Fortran d~klarise ! se:-:a ByVal. I ~~;'o clefault u Basicu je 0 , au Fortranu je J. Kad se 1..1 Basicu deklari;;::- !liz velicine "n" to znaci cia ima n+ I elemenata u i, Fortranu jer Ba~;C startuje sa nultim elementom. ! Tipovi koji su deklarisani u 3~1'lCH mogu biti priclruzeni iz Basica Types
I I
I I I
Logical
SUBROUTINE FortranCall 'DECS ATTRIBUTES DLLEXPORT :: FortranCall ime FortranCalll1 !DECS ATTRIBUTES ALIAS ovim je setovano
I u Fortran. Kao osnova Visual Basic i Visual Fortran imaju single i double I precision sa istim brojem bajtova to jest sa 2 bajta.
'OVO je eksport FortranCall
! Sa
Primjer: . . Potrebno je vrsiti racunanje povrsine trougla ako su date stral11ce a, b J C i uglova trougla primjenom kosinusne t e o r e m e . . v Ulazni poclaci, izlazni podaci,kao i komentar u. slucaJu ~da s.u pogr<,;snov.clate . stranice trougla, vrsi se sa VB-om. RacunanJe povrsIl1e trougla. vrSI se primjenom SUBROUTn
I
Deklarisanje FORTRAN-ske nltine u Visual Basic Koristenje Visual Basic-a mozemo opisati na primjeru Fortranskog potprograma sa nazivom FortranCali sa dva argumenta koji su single-precision: Declare Sub FortranCall as Single, A2 as Single)
lib
"d: \MyProjects\Fcall. dll"
Attribute VB~Name = "Modulel" Declare Sub trougao Lib "d:\Prograrn Files\trio\Debug\trio.dll" (a As Single, b As Single. c As Single, p As Single) Declare~Function ugao2 Lib ·'d:\Program Files\ugao2\Debug\ugao2.dll" (X As Single, Y As Single. Z As Single) As Single
(AI
Deklarisanje Fortranske funkcije sa imenom FortranFunc koja takoae ima dvije cjelobrojne vrijednosti a kao povratnu ima single-precision vrijednost: Declare Function FortranFunc Lib (AI as Long, A2 as Long) As Single
"d:\MyProjects\FFun.dll"
Eksport rutine sa FORTRAN DLL-om Prilikom kreiranja Fortran DLL-a mora se VOditI racuna 0 tome da funkcija iIi subroutine bude deklarisano sa ekstenziom .DLL. Primjer deklarisanja za DLL koja se eksportuje dataje na primjeru subroutine:
194
195
FORTRAN i drugi programskijezici
FORTRAN programiranje za windowse
D"irr. b
As S1.ngle
Dim r::: As :5l11cJ102 Dl~(l
P
}L3 Slngle
Dun ugaoa As Sin'Jle DDj ugaob .0.3 Sin.gle Din1 ugaoc.: As :5ingle Inpt~tBo;.: ("unes). stranu a") ..illl
;
0
8
.:..Jllil r6l"-
b
=
InputBox ("unes1. stranu b
rt
)
'c """ Inputiox ('unesi str::ann cit") 3:f ((3 + h) > c And (b + c) ;- a And CalL t::ougao(a, 0, C, p) ugaoa '" l.lgaoZ (l:"'>C, a) ugaob"" ugao2(c, a, bj ugaoc '" 180 (ugaoa + ugaob) Labe~l_Caption '" "pavrslna=" & p
(c
+
a)
;- bl
The
L8be12.Cap1:10n '" "alfa"''' .~ ugaoa Labe 13. Capt lon '" "beta=" .;; ugaob
"game="
&
ugaoc
"NETACNI PODACI"
;~-
~-Ln--i:'(i;T 1"
Freody ;;f:!Start
iU. ~ i!:~ .;:n.. 'J? i ~prOJedl' r':icrOSDft Visu<), ·1 ~KflliQa4c, r4icrosoft w'xd Il~DI.GIT~~.Vi.~.U~lc~.or~r~·.."; Slika 4.10
:-, ,,1;1 '
"';;c;~:-,-
1·=<,3~--;;;2i-
Slika 4.8
DUll
lJ
Sl:c:. Ccmlmandl ·::-llc;,\:(' ).s Single As 31.n9le
DHII ugaoa ."_S 31ngle Diu, ugaob P.3 Sl.ngle Dul'! ugaoc ).s Sl.ngle a '" Inpu::.30x ("unesl. stranu an) b '" Inpu-r.Box ("unesl. stranu b") c Inpu-r.Bc:{ ("unesi str:anu c") I f ((a + b) > c J'.lld (b + c) ). a _tl..nd (c Call trougao (a, b, c, pJ ugaoa '" uga02 (b, c, a) ugaob : 1.1ga02 (c, a, b) ugaoc '" lao - (ugaoa + ugaob) Labell.Caption = "povrs1.na=" & p Label2.Caption : "alIa:" & ugaoa Label3.Captl.on;o "beta=" ~ ugaob Label4.Ca.ptl.on '" "garna.=" .s; ugaoc Else ;0
Slika 4.9 196
+
a)
). b)
Then
~~ti~lifffi~"'~"IIII"lIlIlIillIlIlG]§~1
,J"'•. : 13;30
.: :::L~:.......
197
INDEX A abacus, 2 ADA Byron, 2 prograIllski
:2 aigorilam, 22-3 i ;\LGOL, 16 ALLOCATABLE,74 ARREA VISUALISER, ! 6 j l\Pl, 163 argument, 44, 47 :"'_S·C II 36; '152 assembler, 9, 16 analogni racLinari, 4, 9 auton1atsko gencrlranje progralna, 23 1
B BACKSPl\CE, 99 baiL 10,76, 193 bihlioteka funkcija, 152, 164 binarni sislem, J 2 bit. 10 BLOCK DATA, 38,77 blok naredbi, 24
C character, 40 C jezik) 162: 17E interfeis, 178 I FORTRAN, 177 c++ jcz.ik, i 77 -190 interi'ejs, 177, j 88 / FORTRAN, i77 Ckompajlcr, 177 case - viol SELECT CASE CALL ciklus, 32 brojcani, 32 us]ovni,32 CLOSE,99 COBOL,5 COMPILER, 17 COMPLEX, 40 COMMON,73-75
CONTINUE, 8 I CYCLE,72
o DATA, 37, 77 datotcka, 98 sekveflcljalna,98 direklna, 98 DEALLOCATE,74 DIM ENS rON, 73 DLL,36, 129,176 ciouble 53
E edilor,51 ckspertni si;;lcm, 2 i END,129 END 00,67 END DO lime], 69 END FILE, j 00 ENTRY, 87 EQUIV ALENCE, 78 exit, 72 F floal, form, lOI formal slobodni, 38 riksirani,3E FORMAT narcdba, 49 sinwksa,50 /,a realne brojeve, SQ, 52 La cijeIc brojcve, 49, 52 za double precision, 53 cbaractcr,54 FORTRAN programski jezik, 5, 8, 129 konzoina aplikacija, 35 standardna aplikacija, 35 QWIN aplikacija, 36, 156 graficke aplikacije, 36, 152 DLL aplikacija, 36, 177 FUNCTION programska jedinica, 84, 87 primjer,87
,0
'-0 "generator compileri, 20 GOTO, 26, 57 tormal, 52 grafika sa Fortranom, 152 :;rafika sa ARREA VISUALIZER, 161 ,grafika sa PLOT 88, 169 ,graficke rutine, 152
:n -
H hardver, 7 heksadecimalne vrijednosti, l3
IF naredba,61 struktura, 62 THEN ELSE, 63 THEN ELSE IF, 65 IMPLICIT, 37 INCLUDE, INCLUDE,37 indeksirane varijable, 72 INPUT,49 INQUIRE, 100 INTEGER, 39, 4l INTERFACE Visual Basic, 165, 191 C/C++, 178 interpreter, 17 izvorni program, 8
J jednodimenzionalni niz, 72 jezici assembler, 16 deklarativni, 18 funkcionalni, 19 masinski, 16 objektno orijentisani, 19 paralelni i vektorski, 19 prirodni, 21 proceduralni, 17 K
kompajler, 17
L
LOGICAL 40 iogicke naredbe,43 izrazi,43
logicki operatori, 43, 66 M main, 9 memorija RAM, 74 ROM, 74 MODULE,84 programska jedinica, 95 primjer, 95 sintaksa, 95 N nacrLna geometrija, 129 naredbe,37 kontroie taka, 32 grananje, 56 llsiovne,59 neuralne mreze, 21 nizovi,72
o objektl1o orijentirani jezici, 19 operativlli sistern, 8,9, 11 oktalni sistem, [3 OPEl luI operator, 42 opisivaci,49-56 OUTPUT,49
PLOT 88 pakel program, 168 spisak naredbi, 168 pozivanjc (llnkcija, 87 PRINT, 49, 97 PRIVATE. 129 PROGRAM progrmnska jedinica, 84 prirnjeri, 108-126, 156-161, 167168,172-174,182-187,194-197
Q QUICKWIN, 36, 156 R
READ,49 REAL,41 RETURN,77 REWIND, [01 rotacija, 133, 137, 142 S
SAVE,77 sekundarna rnernorij a, 10 sekvencijalna (vidi datoleka) sislemske funkcije, 44 slrukture, 22 SELECT CASE, 30, 65 sintaksa, 65 primjer, 30, 66 SUBROUTINE, 85 sintaksa, 91 primjer,91 T
P
PASCAL, 1,5 PARAMETER,37 parametri,37 petlje, 32, 67 brojcane, 32, 67 uslovne, 32, 67, 71 DO, 67, 71,81 DO WHILE, 67, 71 imenovane, 69 ugnijeZdene, 29, 70
lransformacije, 130, 141 translacija, 136, 141,161 U
ugnijezdene (vidi petlje), USE,37 uslovni prelazak, 61 V
VISUAL FORTRAN, 152, 193 VISUAL C++, 162, 178-190 VISUAL BASIC, 162,191-197
W
WHrLE, 67,71
LITERATURA
J.
IS. I.Endzel: "Praticeskoe uvedenie v maijinnuo grafiku", Izdateljstvo "Radio i svrzi", 1982.
L. J. Ribar, "Fortran Programming For Windows", Osborne McGraw-
Hill,1993. 2.
R. C. Desai: "Fortran Programming And Numerical Methods", Tata McGraw-Hill Publishing Company Limited New Delhi, 1995.
16. "IYJ1KROSOFT WINDOWS NT WORKSTll.TION", Mikrosoft Corporation, 1997. ] 7. "/vlikrosof't Visual C++ Professional Edition", Mikrosoft Corporation,
]997. 3.
W. E. Mayo, M. Cwiakala: "Programming With Fortran 90", Schaums Theory and problems-A Mc Graw-Hiil Publication, 1995.
4.
DluITAL Array Visu
5.
DIGITAL Visual Fortran, Prof",.ssional Edition, Digital Equipment Corporation, 1997.
6.
T. L. Young, M. L. Van Woert-Ph. D.: "PLOT 88", Plotworks, Inc., 1993.
18. B. Mesetovi6: "Visual Basic (1-4)", Skala programiranja, INFO (15-18), 1999. 19. J. Dvornik: "Ra:.:vo;' rnatemCltickih mode/a ", Grao.:yinar 42 (12, 507516), ]990. 20. E. Salihovi6: "Programiranje - Programskijez.ik C", INFO 13, 1999.
7.
B. Babet: "Borland C++", Mikrosoft Corporation, 1993.
8.
VISUAL BASIC, Mikrosoft Corporation, 1997.
9.
Z. Lagumdzija: "Kol11pjuteri i njihova primjena", Fabulas ABC, 1995.
10. D. K. Grozdanic: "Basic Compileri Fortran 77-lro", Gracievinska
knjiga, 1990. 11. N. M. Prljaca, M. 1. Glavic: "Programiranje uC programskomjez.iku", Fakultet elektrotehnike u Tuzli, 1999.
12. D. Majkic: "Kompjuterska grajlka", Narodna tehnika Vojvodine, 1987. 13. B. Z. Sergeevna: "Fortran 77 £S", Izdateljstvo "Finansije i statistika", 1989,
14. V. Vuietic, 1984.
C. Ljubovic:
"Programiranje 'Fortran' ", Svjet10st Sarajevo,
21. Hewlett-Packard: "/1,1echanical Engineering", Users' Library Solutions HP-41C, 1980. 22. A. Jezernik, B. Golob," FORTRAN 90 in racunalniki pri inzenirskem delu", 1998.
23. L. Second Edition, Macmillan
and Scientist", 1988.
Na osnovu misljenja Federalnog Ministarstva obrazovanja, nauke, kulture i sporta broj: 04-15-1494/01 udzbenik «FORTRAN PROGRAMlRANJE ZA WINDOWS-e» autora doc. dr. Mevludina Avditaje proizvod iz clana 19. tacka 10. Zakona 0 porezu na promet proizvoda i usluga na ciji se pcomet ne plata porez na promet proizvoda.