بخشی از پاورپوینت
--- پاورپوینت شامل تصاویر میباشد ----
اسلاید 1 :
آرایه (Array)
- آرایه گروهی از متغیرها یا ثابتها هستند که نوع آنها یکی است و با اسم واحدی نامیده میشوند.
اسلاید 2 :
نمایش متغیر به صورت آرایه
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))
اسلاید 3 :
دستور اعلام متغیر اندیسدار
- Real, Dimension(10) :: X
- Character(len = 20), Dimension(50) :: & last_name
- آرایه میتواند با یک یا چند بعد معرفی شود. تعداد ابعاد یک آرایه را رتبه (rank) نامند. در مثال فوق رتبه متغیرهای X و last_name برابر یک است.
- تعداد عناصر یک بعد را extent آن گویند. در متغیر X برابر 10 و در متغیر last_name برابر 50 است.
- ترکیبی از rank و extent هر آرایه را شکل (shape) آن آرایه نامند. بنابراین دو آرایه دارای یک شکل هستند، اگر رتبه و تعداد عناصر هر بعد آرایه با هم یکسان باشد.
- به تعداد کل درایههای یک آرایه اندازه (size) آن آرایه گویند.
اسلاید 4 :
مثال اعلام متغیر اندیسدار، یک بعد و بیش از یک بعد
- Real, Dimension(100) :: R
- Real, Dimension(10,10) :: S
- Real :: T(10,10)
- Integer, Dimension :: L(2,3)
- Integer, Dimension(5) :: A, B(2,3)
- Real, Dimension(15) :: X
- Real, Dimension(3,5) :: Y, Z
- به دو مثال اخیر توجه کنید. متغیر X دارای رتبه یک و متغیرهای Y,Z دارای رتبه دو هستند.
- اندازه متغیرهای X و Y,Z با هم برابرند.
- متغیرهای X و Y,Z دارای شکل یکسان نیستند.
- extent بعد دوم متغیرهای Y,Z برابر 5 است.
اسلاید 5 :
انواع اندیسها
- فرم کلی اندیسها به صورت زیر است.
- 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)
- همانطور که ملاحظه میشود هر بعد گستره مربوط به خود را دارد. گستره بعد اول 5 و گستره بعد دوم 4 است.
اسلاید 6 :
استفاده از عناصر متغیرهای اندیسدار مانند متغیرهای عادی
- هر درایه از آرایهای را میتوان به صورت یک متغیر معمولی به کار برد. به مثال زیر توجه کنید.
Integer, Dimension(10) :: index
Real, Dimension(3) :: temp
- دستورات کاملا درست هستند.
Index(10) = 5
Temp(3) = Real(index(1)) / 4.
Write(*,*) 'index(1) =', index(1)
اسلاید 7 :
مقداردهی اولیه درایههای یک آرایه یک بعد
- همانطور که قبلا هم ذکر شد، خیلی از زمانها لازم است که متغیرها را مقداردهی شوند. به مثال زیر توجه کنید.
- 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/)
اسلاید 8 :
ادامه مقداردهی اولیه درایههای یک آرایه یک بعد
- می توان بهصورت عبارت هم مقداردهی نمود. به مثال زیر توجه کنید.
- 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 :
خطای مازاد اندیسهای آرایه
- هر درایه یک آرایه به یک اندیس که عدد صحیح است نسبت داده میشود. محدوده را دستور اعلام مشخص میکند.
- Real, Dimension(5) :: a
- در این مثال اندیسها، اعداد از 1 تا 5 میباشند. اگر در محاسبات درایه a(6) رخ دهد. شما خطای out of bound را دریافت میکنید.
- این خطای را میتوان جزء خطاهای رایج کار با آرایهها محسوب نمود. یافتن این خطا در پارهای از موارد کار سادهای نیست.
اسلاید 10 :
استفاده از مقدار ثابت در اعلام آرایه
- همانطور که ملاحظه شد در ابعاد آرایه میتوان اعداد صحیح مختلف را بهکار برد.
- همچنین میتوان از یک پارامتر و یا عبارت ثابت نیز استفاده نمود.
- مثال 1:
Integer, Parameter :: max_size = 100
Real, Dimension(max_size) :: array1
Real, Dimension(max_size) :: array2
Real, Dimension(max_size) :: array3
- مثال 2:
Integer, Parameter :: max_size = 100
Integer, Dimension(max_size/4) :: array1
Real, Dimension(int(log(Real(max_size)))) :: & array2