امروز ...

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

 

- فصل دوم : متغير ها

در تمام زبانهاي برنامه نويسي به ذخيره موقت اطلاعات نياز داريم تا در زمان نياز از آنها بهره مند شويم . اين امکان توسط ذخيره اطلاعات در يک شي برنامه نويسي به نام متغير فراهم شده است . حال براي دسترسي به اين متغيرها لازم است که يک سري ويژگي  براي آنها تعريف شود . که اولين آن همان نام متعغير است . در انتخاب نام متغير نکاتي وجود دارد که بايد به آنها توجه کرد .

1 – نام متغير نبايد با عدد شروع شود .

2 – نام متغير نبايد نام توابع آماده فرترن باشد .

3 – در انتخاب نام تنها بايد از کاراکترهاي مجاز استفاده شود .

کاراکترهاي مجاز حروف لاتين از a تا z ، A  تا Z ، 0 تا 9 و _ ( که underscore خوانده مي شود ) مي باشند . البته بايد توجه کرد که متغيرهايي با نام 7up ( بدليل نقض مورد 1 ) و Sin ( به دليل نقض مورد 3 ) مجاز نمي باشند اگرچه از کاراکترهاي مجاز در نام آنها استفاده شده است .

حال اسامي با نام Sinx  و Flor و A-B را بررسي مي کنيم . نام Sinx نه تنها با عدد شروع نمي شود بلکه از کاراکترهاي مجاز تشکيل شده است . حال براي بررسي شرط دوم به اين نکته توجه کنيد که در تابع Sin(x) قسمت اول يعني Sin نام تابع است و متغير Sinx بدليل نا همنامي با آن مي تواند يک متغير به حساب آيد .

Flor هر سه شرط بالا را دارد ( تابع جزء صحيح Floor مي باشد ) اما A-B از کاراکتر غير مجاز – ( dash) تشکيل شده است پس نمي تواند يک متغير باشد .

در انتخاب نام متغير سعي کنيد از اسامي تک حرفي استفاده نکنيد زيرا تعداد اين متغيرها به دليل محدود بودن تعداد حر.ف زبان انگليسي محدود مي باشد . همچنين سعي کنيد نام متغيرها را مناسب اطلاعات داخل آن انتخاب کنيد . به عنوان مثال اگر متغيري را براي ذخيره نام دانشجو تعريف مي کنيد بهتر است از متغيرهايي با نام StudentName و Name  استفده کنيد . در تعريف نام متغير حروف کوچک و بزرگ تفاوتي ندارند بنابراين متغيرهاي NAME و name  يکي مي باشند . مي توان متغير StudentName  را براي خوانايي بيشتر به صورت Student_Name  تعريف کرد ( البته مي توان با کوچک و بزرگ نوشتن حروف اين کار را انجام داد ) .

پس از انتخاب نام متغير لازم است تعيين کنيم که چه نوع داده اي بايد در متغير ذخيره شود . تمام انواع داده هايي که مي توانند در متغيرها ذخيره شوند در زير آمده است :

 

 

 

 

با توجه به دياگرام بالا عدد صحيح Integer فاقد هرگونه نشانه اي است . حال آنکه عدد حقيقي Real  داراي مميز ( . ) مي باشد . عدد مختلط Complex نيز در داخل پرانتز نگاشته مي شود که عدد اول قسمت حقيقي و عدد دوم قسمت موهومي عدد است . اين دو قسمت خود از نوع داده اعشاري مي باشند . براي امتحان اين مطلب برنامه زير را مي نويسيم :

Complex CN

CN=(1,2)

Print *,CN

End

اما خروجي عدد (1.00000,2.00000)  مي باشد که اين نشان مي دهد بطور پيش فرض قسمتهاي حقيقي و موهومي عدد مختلط خود Real مي باشند .

نوع داده اي Real قابليت ذخيره تمامي ارقام اعشار را ندارد . که اين عامل بستگي به سيستم عامل دارد . براي رفع اين اشکال از نوع متغيري Double Precision  استفاده مي کنيم .

بر روي اين نوع داده ها (Integer , Real , Comlex ) محاسبات رياضي را مي توان انجام داد .

نوع رشته اي که همان متن يا text  مي باشد داراي نشانه هاي " يا است . اگر متن حاوي يکي از علايم گفته شده باشد براي مشخص کردن نوع رشته اي از علامت دوم استفاده مي شود به عنوان مثال چنانچه بخواهيم عبارت Ali :”Hello” را در يک متغير رشته اي قرار دهيم بايد از علامت استفاده کنيم زيرا علامت در خود متن استفاده شده است . پس نتيجه عمل ‘Ali :”Hello”’ خواهد بود .

 بر روي اين نوع داده  کارهايي از قبيل حذف قسمتي از متن ، برش قسمتي از متن ، کاراکتريزه کردن و ... را مي توان انجام داد . اما اعمال زياضي از قبيل سينوس و کسينوس ، ضرب و ... را نمي توان انجام داد .

نوع منطقي Logical نتيجه صحيح يا غلط بودن يک سري پردازش را در خود نگه مي دارد که تنها شامل دو مقدار .True. يا .False. مي باشد . اين نوع متغير معادل گزاره هاي منطقي رياضي مي باشد . به عنوان مثال به شخص گفته مي شود که جزوه فرترن در دست اوست ، او پس از نگاه کردن به جزوه تشخيص مي دهد که آيا اين گزاره درست است يا نه و نتيجه اين پردازش ها در قالب يک کلمه بله يا نه نمود پيدا ميکند که معادل .True. يا .False. در فرترن مي باشد . زبان برنامه نويسي فرترن هم چنين کاري را درقبال متغيرهاي منطقي انجام ميدهد .

نوع متغيري Type متشکل از تمام موارد بالاست که در ادامه مطلب به آن اشاره خواهد شد .

 پس تعيين تمام موارد بالا نوبت به نحوه تعريف متغير ها مي رسد . براي اينکار از دستور Implicit استفاده مي شود . تعريف کلي اين دستور به صورت زير است :

... ، نام متغير 2 ، نام متغير 1 ، نوع متغير Implicit

اين دستور علاوه بر تعريف متغير جهت معرفي کلي متغيرها نيز استفاده مي شود . به اينصورت که بجاي نام متغير ها از يک حرف استفاده مي شود و اين بدان معني است که متغيرهايي که با اين حرف شروع مي شوند از نوع نوشته شده اند .

براي معرفي راحتتر متغيرها از دستور خلاصه شده زير استفاده مي کنيم :

... ، نام متغير 2 ، نام متغير 1  نوع متغير

به عنوان مثال براي معرفي متغيري به نام text1 از نوع رشته اي از دستور زير استفاده مي شود :

Character text1

از آنجا که فرترن جهت انجام محاسبات رياضي طراحي شده است لذا از انواع داده هاي ياد شده ، بيشتر از اعداد استفاده مي شود و دربين اعداد از اعداد اعشاري و صحيح بيشتر از اعداد مختلط استفاده مي شود به اين دليل به  طور پيش فرض متغيرهايي که بدون تعريف استفاده شوند در صورتي که با حروف I تا N شروع شوند بطور پيش فرض بصورت صحيح تعريف مي شوند و چنانچه با غير از اين حروف آغاز شوند بصورت حقيقي تعريف مي شوند . يعني در حالت دقيقتر معادل دستور زير است

Implicit integer ( I-N)

Implicit Real (A-H) , ( O-Z)

در رياضيات عباراتي مانند xn ، ، 2x ، 1x يعني n متغير  x داريم که براي سهولت کار از انديس استفاده کرديم از آنجا که فرترن بيشتر جنبه هاي رياضيات را دارد مي توان متغير با انديس تعريف کرد براي تعريف n متغير با انديس از دستور زير استفاده مي کنيم :

... ، (تعداد انديس ) نام متغير2 ، ( تعداد انديس ) نام متغير 1     نوع متغير

وجود نام متغير در ابتداي خط موجب مي شود عددي که در داخل پرانتز نوشته مي شود به عنوان تعداد انديس باشد . در مثال زير 100 متغير انديس دار x که از نوع صحيح مي باشد تعريف شده است :

Integer x(100)

چنانچه نوع متغير ذکر نشود منظور انديس مشخصي از آن متغير است . به عنوان مثال در نمونه زير ؛ در پنجمين x عدد 23 نوشته مي شود :

X(5)=23

در ماتريس ها و در فيزيک از انديس دو بعدي  استفاده مي شود . در فرترن نيز مي توان از انديس چند بعدي استفاده کرد براي اين منظور از دستور زير استفاده مي کنيم

... ، (... , بعد 2 , بعد 1 ) نام متغير نوع متغير

دستور زير 100 متغير با انديس دو بعدي را تعريف مي کند ( يک ماتريس 4×25 )

Real A(25,4)

در مثال بالا بعد اول داراي 25 انديس و بعد دوم داراي 4 انديس مي باشد ، چنانچه ندانيم تعداد انديس ها چند تاست از : استفاده مي کنيم حال دستور بالا را اين چنين تغيير مي دهيم :

Real A(:,4)

اين بدان معني است که متغير A داراي دو بعد که تعداد انديس اول نامشخص و تعداد انديس دوم 4 است که از شماره  1 شروع و به شماره 4 ختم مي شود . چنانچه بخواهيم کران پايين و بالاي متغيرها را تغيير دهيم از دستور زير استفاده مي کنيم :

... ، ( ... , کران بالاي بعد 1 : کران پايين بعد 1) نام متغير    نوع متغير

مثال بالا را دوباره تغيير مي دهيم :

Real A(:,-1:2)

اينک بعد دوم اين دستور داراي 4 انديس است اما شروع انديس ها از عدد 1- است .

براي مقدار دهي ابعادي که تعداد نامشخص دارند ( قبلا از : استفاده شده است ) از تابع Allocate استفاده مي کنيم . در مثال زير ابتدا يک متغير سه بعدي تعريف و سپس تعداد انديس ها را مشخص کرده ايم :

Real Allocatable :: A(:,:,3)

Allocate (A(11:12,4,3))

در اين مثال بعد از استفاده از دستور Allocate بعد اول داراي 2 انديس با شروع از11 و بعد دوم داراي 4 انديس با شروع از 1 ( به دليل عدم تعريف ) شده است .

اکنون مي توان متغيرهاي مختلف را تعريف کرد اما در برنامه نويسي گاهي اوقات لازم است ويژگي هاي مختلف را به متغيرها نسبت داد بنابراين بايد ابتدا اين ويژگي ها را شناخت و سپس از آنها استفاده کرد . اکنون به بررسي اين ويژگي ها مي پردازيم :

- Allocatable

اگر در تعريف متغير ها تعداد انديس ها را مشخص نکرديم بايد از ويژگي Allocatable براي امکان استفاده از Allocate استفاده کنيم . به عبارت ديگر در سري Visual Fortran 6.5 و غيره تابع Allocate  تنها قادر است به متغيرهايي که داراي ويزگي Allocate هستند انديس اختصاص دهد .

- Dimension

 از اين ويژگي براي دادن بعد به متغيرها استفاده مي شود  به عنوان مثال در دستور تعريف متغير زير به ترتيب به سه متغير A و B و C ابعاد (2,2) داده مي شود . :

Real ,Dimension (2,2) ::A,B,C

اين دستور معادل دستور زير است :

Real A(2,2) , B(2,2) , C(2,2)

- Parameter

از اين ويژگي براي ثابت نگه داشتن يک مقدار در متغير استفاده مي شود به عنوان مثال در برنامه زير براي جلوگيري از نوشتن عبارت 3.141592 آن را در متغير p ذخيره و براي ثابت نگه داشتن آن در کل برنامه از اين ويژگي استفاده مي کنيم :

Double Precision , Parameter :: P= 3.141592

Read *,R

Print *,”Area = “ , p*R**2

Print *, “S = “ , 2*p*R

End

حال آنکه با ويژگي ها آشنا شديم مي بايست آنها رادر دستور تعريف متغير بکار بريم . براي تعريف متغيرها همراه با ويژگي ها از دو نوع entity – oriented و attribute – oriented استفاده مي کنيم

در دستور entity – oriented داريم :

... ، نام متغير 2 ، نام متغير 1 ::    ... ، ويژگي 2 ، ويژگي 1 نوع متغير

Real Allocatable , Dimension (:) :: A,B

در دستور attribute – oriented داريم :

... ، نام متغير 2 ، نام متغير 1 نوع متغير

... ، نام متغير 2 ، نام متغير 1 ويژگي 1

... ، نام متغير 2 ، نام متغير 1 ويژگي 2

...

Real A,B

Dimension (:) A,B

Allocatable A,B

تنها تفاوت موجود بين هر دو نوع تعريف اين است که چنانچه بخواهيم تمامي ويژگي ها را به تمامي متغيرها اعمال کنيم از حالت اول و اگر بخواهيم ويژگي هاي متفاوت را به متغيرهاي متفاوت اعمال کنيم از حالت دوم استفاده مي کنيم .

علاوه بر ويژگي هاي گفته شده ويژگي هاي ديگري که با نحوه متفاوتي اعمال مي شوند نيز وجود دارند . يکي از اين ويژگي ها دستورات Kind هستند .

در مورد نوع صحيح به عنوان مثال به صورت زير تعريف مي شوند :

Integer (Selected_INT_Kind(3)) A

يعني عدد A از نوع صحيح و در بازه­3 10- تا 103 مي باشد . در مورد عدد اعشاري بايد دو مقدار را وارد کرد که عدد اول حداقل رقم اعشار و عدد دوم بازه عدد است . به عنوان مثال :

Real (Selected_Real_Kind(3,4))B

يعني عدد B  از نوع صحيح  با حداقل 3 رقم اعشار  و در بازه­4- 10 تا 104 مي باشد .

مي توان براي خلاصه تر شدن Selected_INT_Kind و Selected_Real_Kind را حذف کرد و به صورت زير نوشت :

Integer (3) A

Real (3,4) B

در مورد متغير رشته اي مي توان طول رشته را تعيين کرد براي اين منظور از يکي از سه دستور زير استفاده مي کنيم :

... ، نام متغير 1 Character (Len=n)

... ، نام متغير 1 Character (n)

... ، نام متغير 1 Character * n

که n طول رشته است . در صورتي که از اين تعريف استفاده نشود طول به طور پيش فرض 1 در نظر گرفته مي شود . چنانچه در متغيري با n حرف تعداد m حرف نوشته شود اگر m>n باشد n حرف اول در متغير ذخيره مي شود . و در غير اينصورت قسمت خالي رشته با Space پر مي شود .

Character *4 C1

C1=”Hello”

در اين مثال چهار حرف اول Hello يعني Hell ذخيره مي شود .

Character *6 C1

C1=”Hello”

ودر اين مثال مقدار “Hello “ در متغير ذخيره مي شود . توجه کنيد که يک فاصله خالي (Space) بعد از کلمه وجود دارد .

 

 

صفحه بعد

صفحه قبل

لیست مطالب فرترن

بخش آموزش

 

قوانین حقوق مولفان 2008 ، گروه نرم افزاری سی سی ،شرایط و ضوابط سایت را مطالعه نمایید