متغیرهای اندیس دار یا زیرنویس دار

49
رق ب و ب آ ت ع ن صاه گ ش ن دآ1 س ن د رهای آن ی غ ن م س ن و ن ر ب ا ز دآز ن دآز ی ن ش دو وی ن س و م هاز ب ت ش رآ ب و91

Upload: hosea

Post on 12-Feb-2016

87 views

Category:

Documents


1 download

DESCRIPTION

متغیرهای اندیس ‌ دار یا زیرنویس ‌ دار. موسوی ندوشنی ویراست بهار91. آرایه ( Array ). آرایه گروهی از متغیرها یا ثابت ‌ ها هستند که نوع آن‌ها یکی است و با اسم واحدی نامیده می‌شوند. . a(1). a(2). حافظه رایانه. a(3). Array a. a(4). a(5). . نمایش متغیر به صورت آرایه. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 1

دار یا متغیرهای اندیسدار زیرنویس

موسوی ندوشنی91ویراست بهار

Page 2: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 2

(Arrayآرایه )ها هستند که آرایه گروهی از متغیرها یا ثابت

نوع آن ها یکی است و با اسم واحدی نامیده می شوند.

a(1)a(2)a(3)a(4)a(5)

Array a حافظهرایانه

Page 3: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 3

نمایش متغیر به صورت آرایه Do i = 1, 100

a(i) = SQRT(a(i))

End do

:جزییات حلقه فوق به صورت زیر است

a(1) = SQRT(a(1))

a(2) = SQRT(a(2))

a(100) = SQRT(a(100))

Page 4: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 4

دار دستور اعالم متغیر اندیس Real, Dimension(10) :: X Character(len = 20), Dimension(50) :: & last_name

آرایه می تواند با یک یا چند بعد معرفی شود. تعداد ابعاد( نامند. در مثال فوق رتبه rankیک آرایه را رتبه )

برابر یک است.last_name و Xمتغیرهای تعداد عناصر یک بعد راextent آن گویند. در متغیر X

است.50 برابر last_name و در متغیر 10برابر ترکیبی ازrank و extent( هر آرایه را شکل shape آن )

آرایه نامند. بنابراین دو آرایه دارای یک شکل هستند، اگر رتبه و تعداد عناصر هر بعد آرایه با هم یکسان باشد.

به تعداد کل درایه ( های یک آرایه اندازهsize آن آرایه )گویند.

Page 5: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 5

دار، یک بعد و مثال اعالم متغیر اندیسبیش از یک بعد

R e a l, D i m e n s i o n(100) :: R R e a l, D i m e n s i o n(10,10) :: S R e a l :: T(10,10) Integer, Dimension :: L(2,3) Integer, Dimension(5) :: A, B(2,3) R e a l, D i m e n s i o n(15) :: X R e a l, D i m e n s i o n(3,5) :: Y, Z

به دو مثال اخیر توجه کنید. متغیرX دارای رتبه یک و دارای رتبه دو هستند.Y,Zمتغیرهای

اندازه متغیرهایX و Y,Z.با هم برابرند متغیرهایX و Y,Z.دارای شکل یکسان نیستند extent بع<د دوم متغیرهای Y,Z است.5 برابر

Page 6: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 6

ها انواع اندیسها به صورت زیر است. فرم کلی اندیس

Real,Dimension(lower_bound:upper_bound) :: array به شرط آن که

lower_bound <= upper_bound.به مثال های زیر توجه کنید

Real, Dimension(5) :: a1 Real, Dimension(-2:2) :: b1 Real, Dimension(5:9) :: c1

( هر سه آرایه دارای شکلshape یکسان هستند. زیرا دارای ابعاد و )extent.برابرند

در حالت کلی تعداد درایه در هر بعد را، می توان با استفاده از رابطهساده زیر بدست آورد.

Extent = upper_bound – lower_bound+1 Real, Dimension(-2:2, 0:3)

.همانطور که مالحظه می شود هر بعد گستره مربوط به خود را دارد است. 4 و گستره بعد دوم 5گستره بعد اول

Page 7: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 7

دار مانند استفاده از عناصر متغیرهای اندیسمتغیرهای عادی

ای را می توان به صورت یک هر درایه از آرایهمتغیر معمولی به کار برد. به مثال زیر توجه

کنید.Integer, Dimension(10) :: indexReal, Dimension(3) :: temp

.دستورات کامال درست هستندIndex(10) = 5Temp(3) = Real(index(1)) / 4.Write(*,*) 'index(1) =', index(1)

Page 8: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 8

های یک آرایه مقداردهی اولیه درایهیک بعد

همان طور که قبال هم ذکر شد، خیلی از زمان ها الزم است که متغیرها رامقداردهی شوند. به مثال زیر توجه کنید.

Real, Dimension(10) :: array1 Do i = 1, 10

• array1(i) = real(i) End do

.دستورات زیر معادل کدهای فوق است Real, Dimension(10) :: array1 array1 = (/1.,2.,3.,4.,5.,6.,7.,8.,9.,10./)

.و باالخره می توان عمل مقداردهی را به صورت زیر انجام داد Real, Dimension(10) :: array1 array1 = 0.

.می توان عمل مقداردهی را حتی در دستور اعالم نیز گنجاند Integer, Dimension(5) :: array2 = (/1,2,3,4,5/)

Page 9: متغیرهای اندیس  دار یا زیرنویس  دار

های یک ادامه مقداردهی اولیه درایهآرایه یک بعد

می توان به صورت عبارت هم مقداردهینمود. به مثال زیر توجه کنید.

Integer, parameter :: N = 3, M = 6, P = 12 Integer :: arr(1:3) = (/ N, M/N, P/N /)

توجه کنید که در مثال باال، گذاشتنparameter )/…/(اجباری است. ضمناً نمی توان در مقداردهی

استفاده نمود. اکنون مثال باال را کمی تغییر توابعاز می دهیم.

Integer, Dimension(3) :: arr Integer :: N = 3, M = 6, P = 12 arr = (/ N, M/N, P/N /)

دانشگاه صنعت آب و برق 9

Page 10: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 10

های آرایه خطای مازاد اندیس هر درایه یک آرایه به< یک اندیس که عدد صحیح

است نسبت داده میشود. محدوده را دستور اعالم مشخص می کند.

Real, Dimension(5) :: aباشند. می5 تا 1ها، اعداد از در این مثال اندیس

رخ دهد. شما خطای a(6)اگر در محاسبات درایه< out of bound.را دریافت می کنید

این خطای را می توان جزء خطاهای رایج کار باای ها محسوب نمود. یافتن این خطا در پاره آرایه

ای نیست. از موارد کار ساده

Page 11: متغیرهای اندیس  دار یا زیرنویس  دار

استفاده از مقدار ثابت در اعالم آرایه

همان طور که مالحظه شد در ابعاد آرایه می توان اعدادصحیح مختلف را به کار برد.

همچنین می توان از یک پارامتر و یا عبارت ثابت نیزاستفاده نمود.

1مثال:Integer, Parameter :: max_size = 100Real, Dimension(max_size) :: array1Real, Dimension(max_size) :: array2Real, Dimension(max_size) :: array3

2مثال:Integer, Parameter :: max_size = 100Integer, Dimension(max_size/4) :: array1Real, Dimension(int(log(Real(max_size)))) :: &

array2

دانشگاه صنعت آب و برق 11

Page 12: متغیرهای اندیس  دار یا زیرنویس  دار

برای تخصیص حداکثر1مثال Program REVERSE Integer :: i, n Real, Dimension(1000) :: X Read*, n, (X(i), i=1, n) Do i = n, 1, -1•Print *, X(i)

End do End program REVERSE

دانشگاه صنعت آب و برق 12

Page 13: متغیرهای اندیس  دار یا زیرنویس  دار

برای تخصیص حداکثر2مثال .اعالن های زیر مفروض است

Integer, parameter :: L_BOUND = 3, U_BOUND = 10 Integer, Dinemsion(L_BOUND:U_BOUND) :: x

دانشگاه صنعت آب و برق 13

Do i = L_BOUND, U_BOUNDx(i) = i

End do

array x() has 3,4,5,…, 10

Do i = L_BOUND, U_BOUNDif (MOD(i,2) == 0) Then

x(i) = 0Else

x(i) = 1End if

End do

array x() 1 0 1 0 1 0 1 0

Page 14: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 14

(1ای ) عملیات آرایهImplicit none

Integer :: I

Real, Dimension(4) :: a = (/1.,2.,3.,4./)

Real, Dimension(4) :: b = (/5.,6.,7.,8./)

Real, Dimension(4) :: c, d

! Element by Element addition

Do i = 1, 4

c(i) = a(i) + b(i)

End do

Page 15: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 15

(2ای ) عملیات آرایه! Whole array additiond = a + b! Write out resultsWrite(*,100) 'c', cWrite(*,100) 'd', d100 format(' ', A, '=', 4(F6.1,1X))End

( shapeها حتما باید دارای شکل ) در این مثال آرایهیکسان باشند.

Page 16: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 16

(3ای ) عملیات آرایه به مثال زیر توجه کنید که یک ضرب عدد در آرایه

است. Real, Dimension(4) :: a = & (/1.,2.,3.,4./), c, d

Real :: b = 10 c = a*b d = b*a

ای نیز به صورت زیر حتی می توان از توابع کتابخانهاستفاده نمود.

Real,Dimension(4) :: a=(/-1.,2.,-3.,4./) write(*,*) ABS(a)

یکسان

Page 17: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 17

(2ها ) ورودی و خروجی در آرایه Write(*,1000) (i, 2*i, 3*i, i = 1, 3) 1000 format(1X, 9I6)

.پاسخ در یک سطر به صورت زیر چاپ می شود 1 2 3 2 4 6 3 6 9

حلقهdo.ضمنی می تواند تودرتو باشد. به مثال زیر توجه کنید Write(*,100) ((i, j, j = 1, 3), i = 1, 2) 100 format(1X, I5, 1X, I5)

.پاسخ به صورت زیر است 1 1 1 2 1 3 2 1 2 2 2 3

Page 18: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 18

عادی و doتفاوت بین حلقه ضمنیdoحلقه

همان طور که مالحظه می شود، دو نوع حلقهdo وجود دارد که اکنون با مثال زیر می توان تفاوت بین

آن ها را مشاهده نمود. Integer, Dimension(5) :: arr = (/1,2,3,4,5/) Do i=1,5

• Write(*,1000) arr(i), 2*arr(i), 3*arr(i)• 1000 format(1X, 6I6)

End do

.اکنون به همین مثال به شکل دیگر توجه کنید Write(*,1000) (arr(i), 2*arr(i), 3*arr(i), i =

1,5) 1000 format(1X,6I6)

Page 19: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 19

عادی و doتفاوت بین حلقه ضمنیdoحلقه

پاسخdoعادی 1 2 3 2 4 6 3 6 9 4 8 12 5 10 15

پاسخdoضمنی 1 2 3 2 4 6 3 6 9 4 8 12 5 10 15

Page 20: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 20

نحوه تخصیص حافظه در آرایه دو بعدی

.به ماتریس زیر توجه کنید

A(1,1) A(1,2)

A(2,1) A(2,2)

A(3,1) A(3,2)

A(1,1)

A(2,1)

A(3,1)

A(1,2)

A(2,2)

A(3,2) آرایه دوبعدی

نحوه قرار گرفتن در حافظه

Page 21: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 21

نحوه تخصیص حافظه در آرایه سه بعدی

2آرایه سه بعدی2 2

1,1,1 2,1,1 1,2,1 2,2,1 1,1,2 2,1,2 1,2,2 2,2,2

1,1,1

2,1,1

1,2,1

2,2,1

1,1,2

2,1,2

1,2,2

2,2,2

Page onePage tw

o

1

2 3

Do i=1,2Do j=1,2

Do k=1,2………..

…………End do

End doEnd do

Page 22: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 22

های دو بعدی مقداردهی آرایه(1)

مقداردهی با استفاده از نسبت دادن.به مثال زیر توجه کنید

Integer, Dimension(4,3) :: istat Do i = 1, 4

• Do j = 1, 3 istat(i, j) = j

• End do End do

1 2 31 2 31 2 31 2 3

Page 23: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 23

های دو بعدی مقداردهی آرایه(2)

مقداردهی با استفاده از دستورread به مثال ،زیر توجه کنید.

فرض کنید که داده ها از روی فایلی به نامinitial.dat خوانده شود که دارای ساختار زیر

است. 1 1 1 1 2 2 2 2 3 3 3 3

.کدهای برنامه به صورت زیر است Integer, Dimension(4,3) :: istat Open(7, file = 'initial.dat') Read(7,*) istat

Page 24: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 24

های دو بعدی مقداردهی آرایه(4)

.اما اگر ساختار فایل ورودی به شکل زیر بود 1 2 3 1 2 3 1 2 3 1 2 3

.کدهای برنامه به صورت زیر است Integer :: i, j Integer, Dimension(4,3) :: istat Open(7, file = 'initial.dat') Read(7,*) ((istat(i,j), j = 1, 3), i = 1, 4)

Page 25: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 25

ها زیر آرایهها یک آرایه انجام تاکنون عملیات روی کل درایه

ای شد. اما می توان عملیات را روی زیرمجموعههای یک آرایه متمرکز نمود. فرم کلی آن از درایه

به صورت زیر است. subscript_1 : subscript_2 [: stride]

subscript_1دهنده اولین اندیس است. نشانsubscript_2دهنده آخرین اندیس است. نشانstrideهای افزایش است. دهنده گام نشان در واقع این رویه مانند یک حلقهdo.عمل می کند

Page 26: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 26

مثال زیر آرایه در یک بعدInteger :: i = 3, j = 7Real, Dimension(10) :: a = (/1.,-2.,3.,-4.,5.,-6.,7.,-

8.,9.,-10./) های زیر توجه کنید. اکنون به پاسخ زیر ارایه

a(:) 1.,-2.,3.,-4.,5.,-6.,7.,-8.,9.,-10.a(i:j) 3.,-4.,5.,-6.,7.a(i:j:i) 3.,-6.a(i:j:j) 3.a(i:) 3.,-4.,5.,-6.,7.,-8.,9.,-10.a(:j) 1.,-2.,3.,-4.,5.,-6.,7.a(::i) 1.,-4.,7.,-10.

Page 27: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 27

مثال زیر آرایه در یک بعدInteger :: i = 3, j = 7Real, Dimension(10) :: a = (/1.,-2.,3.,-4.,5.,-6.,7.,-

8.,9.,-10./) های زیر توجه کنید. اکنون به پاسخ زیر ارایه

a(:) 1.,-2.,3.,-4.,5.,-6.,7.,-8.,9.,-10.a(i:j) 3.,-4.,5.,-6.,7.a(i:j:i) 3.,-6.a(i:j:j) 3.a(i:) 3.,-4.,5.,-6.,7.,-8.,9.,-10.a(:j) 1.,-2.,3.,-4.,5.,-6.,7.a(::i) 1.,-4.,7.,-10.

Page 28: متغیرهای اندیس  دار یا زیرنویس  دار

در دو بعد مثال زیر آرایه.به مثال زیر توجه کنید

دانشگاه صنعت آب و برق 28

1 2 3 4 56 7 8 9 1011 12 13 14 1516 17 18 19 2021 22 23 24 25

A

é ùê úê úê úê úê ú= ê úê úê úê úê úë û

1611):,1(1621

A

é ùê úê úê úê úê ú= ê úê úê úê úê úë û

Page 29: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 29

دنباله مثال قبل

)1,:( 1 2 3 4 5A é ù= ê úë û1 2 3 4 56 7 8 9 1011 12 13 14 1516 17 18 19 2021 22 23 24 25

A

é ùê úê úê úê úê ú= ê úê úê úê úê úë û

Page 30: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 30

دنباله مثال قبل

1 3 5)1:3,1:5:2( 6 8 10

11 13 15A

é ùê úê ú= ê úê úê úê úë û

1 2 3 4 56 7 8 9 1011 12 13 14 1516 17 18 19 2021 22 23 24 25

A

é ùê úê úê úê úê ú= ê úê úê úê úê úë û

Page 31: متغیرهای اندیس  دار یا زیرنویس  دار

تناظر درآیه به درآیه دو ماتریس در تساوی کلی

R e a l, D i m e n s i o n(1:3,1:2) :: m a t r i c e1 R e a l, D i m e n s i o n(-1:1,0:1) :: m a t r i c e2 m a t r i c e1 = m a t r i c e2

اکنون اگر بخواهید در عملگر انتساب تفکیک درایهبه درایه دو ماتریس باال را مالحظه کنید، به بسط

زیر توجه نمایید. m a t r i c e1(1,1) = m a t r i c e2(-1,0) m a t r i c e1(2,1) = m a t r i c e2(0,0) m a t r i c e1(3,1) = m a t r i c e2(1,0) m a t r i c e1(1,2) = m a t r i c e2(-1,1) m a t r i c e1(2,2) = m a t r i c e2(0,1) m a t r i c e1(3,2) = m a t r i c e2(1,1)

دانشگاه صنعت آب و برق 31

Page 32: متغیرهای اندیس  دار یا زیرنویس  دار

سازگاری زیرآرایه ها 1مثال:

REAL :: A(1:6, 1:8), B(0:3, -5:5), C(0:10) A(2:5, 1:7) = B(:, -3:3) ! both have shape (4, 7) A(4, 2:5) = B(:, 0) + C(7:) ! all have shape (4) C(:) = B(2, :) ! both have shape (11)

2مثال: INTEGER :: arr1(1:100), arr2(1:50), arr3(1:50) arr1(1:100:2) = arr2 ! Sets every odd element arr1(100:1:-2) = arr3 ! Even elements, reversed arr1 = arr1(100:1:-1) ! Reverses the order of arr1

دانشگاه صنعت آب و برق 32

Page 33: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 33

ها ای آرایه توابع کتابخانه شده است. که برخی از آن ها به شرح زیر است. توابع کتابخانه ای قابل مالحظه ای مربوط به بردارها تعبیه 90در فرترن

SHAPE(x) ! The shape of x RESHAPE(x, shape[, pad][, order]) SIZE(x [, Dim ]) ! The size of x LBOUND(x [, Dim]) ! The nth lower bound of x UBOUND(x [, Dim]) ! The nth upper bound of x MINVAL(x) ! The minimum of all elements of x MINLOC(x) ! The index of the minimum MAXVAL(x) ! The maximum of all elements of x MAXLOC(x) ! The index of the maximum SUM(x [, Dim]) ! The sum of all elements of x PRODUCT(x [, Dim]) ! The product of all elements of x TRANSPOSE(x) ! The transposition of x DOT_PRODUCT(x, y) ! The dot product of x and y MATMUL(x, y) ! Matrix multiplication

Page 34: متغیرهای اندیس  دار یا زیرنویس  دار

shapeتابع این تابع شکل آرایه )بعد و گستره( را نشان

می دهد. شکل عمومی به صورت زیر است. shape(source)

:مثال Integer, Dimension(-2:27,0:49) :: t print*, shape(t)

:خروجی عبارتست از 30 50

دانشگاه صنعت آب و برق 34

Page 35: متغیرهای اندیس  دار یا زیرنویس  دار

Reshapeتابع .این تابع شکل یک آرایه را عوض می کند

شکل عمومی به صورت زیر است. Reshape(source, shape[, pad][, order])

1مثال: Integer, Dimension(2,2) :: A A = Reshape((/1,2,3,4/), (/2,2/))

دانشگاه صنعت آب و برق 35

1 2 3 4 1 32 4

Page 36: متغیرهای اندیس  دار یا زیرنویس  دار

Reshapeدنباله تابع 2مثال:

Integer, Dimension(2,2) :: A A = Reshape((/ 1,2,3,4/), (/2,2/), order=(/2,1/))

3مثال: B = Reshape((/ 1,2,3,4,5,6/), (/2,4/), (/0/),(/2,1/))

دانشگاه صنعت آب و برق 36

1 2 3 4 1 23 4

1 2 3 4 5 6 1 2 3 45 6 0 0

Page 37: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 37

Sizeتابع در این تابع می توان تعداد کل عناصر یک آرایه

و یا یکی از ابعاد آن را به دست آورد. نحوه آن عبارتست از:

Size(source[, Dim]):مثال

Real A(2, 3, 5) • Size(A, 1) 2• Size(A) 30

Page 38: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 38

در یک بعدSumتابع در این تابع می توان مجموع عناصر یک آرایه

و یا یکی از ابعاد آن را به دست آورد. نحوه آن عبارتست از:

Sum(source[, dim] [, mask])• Integer :: w(1:11) = (/7,9,-2,4,8,10,2,7,10,2,1/)• Print*, sum(w)• End

7 2 2 174 8 10 109 -2+ + + + + + + + + + +

Sum(w)

=58

Page 39: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 39

در دو بعدSumتابع I n t e g e r w(2,11) w = r e s h a p e((/7, 9, -2, 4, 8, 10, 2, 7, 10, 2, 1,

10, 7, 7, 1, & 10,-2, -2, 7, 2, 9, -2/), (/2,11/), o r d e r = (/2,1/)) p r i n t*, s u m(w,d i m=1) E n d

77 7 7

2 22

1

-11

74 8

8

101017 16 5 5

1010

12 111418 0

99

-2-2 -2 -2

+

Dim

ensi

on 1 Sum(w,dim=1)

Page 40: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 40

Productتابع در این تابع می توان حاصل ضرب عناصر یک

آرایه و یا یکی از ابعاد آن را به دست آورد. نحوه آن عبارتست از:

:مثال Product(source[, dim][, mask]) P r i n t*, P r o d u c t(A, d i m=1) 2 12 30 P r i n t*, P r o d u c t(A, d i m=2) 15 481 3 5

2 4 6A

Page 41: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 41

All دو ماتریسA و B.به صورت زیر هستند

تابع کتابخانه ایAll.به صورت زیر است A l l(m a s k[, d i m])

مقایسه روی ستون P r i n t*, A l l(A/=B,d i m=1) T F F

مقایسه روی سطر P r i n t*, A l l(A/=B,d i m=2) F F

1 3 52 4 6

A

0 3 57 4 8

B

Page 42: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 42

Any دو ماتریسA و B.به صورت زیر هستند

تابع کتابخانه ایAny.به صورت زیر است A ny(m a s k[, d i m])

مقایسه روی ستون P r i n t*, A n y(A/=B, d i m=1) T F T

مقایسه روی سطر P r i n t*, A n y(A/=B, d i m=2) T T

1 3 52 4 6

A

0 3 57 4 8

B

Page 43: متغیرهای اندیس  دار یا زیرنویس  دار

ترانهاده یک ماتریس تابع ذاتیtranspose یک ماتریس را ترانهاده

می نماید. TRANSPOSE(X) means

در این تابع، آرایه دو بعدی )ماتریس( استولی لزومی ندارد که ماتریس مربع باشد.

دانشگاه صنعت آب و برق 43

ij jiX XÞ

Page 44: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 44

Dot_Product>.در این دستور ض<رب داخلی< د<و بردار انجام می شود

Dot_Product(X, Y) means آرایه یک بعدی با طول این دستور فقط در بردارها(

. عم<ل می< کند. به مثال زیر نگاه کنیدو نوع یکسان<( I n t e g e r :: A1(1:6)=[1,3,5,2,4,6] I n t e g e r :: B1(1:6)=[0,3,5,7,4,8] C=D o t_P r o d u c t(A1, B1) P r i n t*, C

i iiX Y Z× Þå

Page 45: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 45

MatMul در اینجا دستور ضرب ماتریس ها به همان روش که در

ریاضیات مرسوم است، انجام می شود. به عبارت دیگر ( ضرب شود، k,j( در یک ماتریس )i,kاگر یک ماتریس )( خواهد.i,jماتریس حاصل )

MatMul(X, Y) means .اکنون به مثال زیر توجه کنید

I n t e g e r, D i m e n s i o n(2,3) :: AI n t e g e r, D i m e n s i o n(3,2) :: BI n t e g e r, D i m e n s i o n(2,2) :: CA=R e s h a p e( (/1,2,3,4,5,6/), (/2,3/) )B=R e s h a p e( (/0,7,3,4,5,8/), (/3,2/) )C = M a t M u l(A, B)P r i n t*, C

ik kj ijkX Y Z× Þå

Page 46: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 46

Where construct فرض کنید می خواهید لگاریتم پاره ای از عناصر یک ماتریس را

بگیرید.Do and if construct

Do i = 1, mDo j = 1, n

If(value(i, j) > 0.) ThenLogval(i, j) = log(value(i, j))

ElseLogval(i, j) = -99999

End ifEnd do

End doWHERE construct

Where(value > 0.)Logval = log(value)

Elsewherelogval = -99999

End where

Page 47: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 47

Forall constructDo and if construct

Do i = 1, mDo j = 1, n

If(work(i, j) /= 0.) Thenwork(i, j) = 1./ work(i, j)

End ifEnd do

End doForall construct

Forall(i = 1:m, j = 1:n, work(i, j) /= 0.)work(i, j) = 1./ work(i, j)

End Forall

Page 48: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 48

متغیرهای اندیس دار شناور تخصیص ایستای حافظه(static memory

allocation)تاکنون اندازه متغیرهای اندیس دار برای هر متغیر در •

ابتدای برنامه معین می شد. به این نحوه تخصیص، که از ابتدا تا انتهای برنامه میزان اندازه ارایه ثابت است،

تخصیص ایستا گویند. تخصیص پویای حافظه(dynamic memory allocation)

در این رویکرد حسب نیاز، حافظه به متغیر اختصاص •داده می شود، بنابراین حافظه تخصیص یافته به هر

متغیر اندیس دار می تواند در طول برنامه تغییر کند، که به آن تخصیص پویا گویند.

Page 49: متغیرهای اندیس  دار یا زیرنویس  دار

دانشگاه صنعت آب و برق 49

نحوه اعالن تخصیص شناور یا پویا

Real, Allocatable, Dimension(:) :: arr1.در اینجا یک آرایه یک بعدی اعالن شده است که اندازه بعد آن معین نشده است

Real, Allocatable, Dimension(:,:) :: arr2.در اینجا یک آرایه دو بعدی اعالن شده است که اندازه ابعاد آن معین نشده است:مثال

I n t e g e r, A l l o c a t a b l e, D i m e n s i o n(:) :: n u m sI n t e g e r :: t e m p, i, k, n_t o_s o r tP r i n t'(A\)', 'H o w m a n y n u m b e r s t o s o r t:'R e a d*, n_t o_s o r ta l l o c a t e( n u m s(1:n_t o_s o r t) )D O i = 1, n_t o_s o r t

R e a d*, n u m s(i)E n d D OI F(A l l o c a t e d(n u m s)) D e a l l o c a t e(n u m s)