آرايه ها يا رشته ها Arrays ارايه ها برای کميتهايي مورد استفاده قرار می گيرند که قرار است بر روی انها عمليات يکسانی انجام گيرد اينگونه کميتها معمولاً به صورت متغيرهای انديس دار نشان داده می شوند در زبان های برنامه نويسی جهت انجام عمليات مختلف بر روی چنين متغيرهايي تسهيلاتی خاص در نظر گرفته شده است ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور تعريف رشته Array عبارتست از مجموعه ای از اطلاعات (Data) به صورت اسکالر که همگی از يک نوع باشند بطوريکه کليه اعضای آن با يک الگوی منظم به ترتيب چيده شده باشند هر آرايه با يک اسم مشخص می گردد يک بعدی (سطری يا ستونی) در رياضی به آن Vector می گويند دو بعدی ( دسته ای از کميتها که عناصر آن به صورت سطر و ستون مرتب می شوند و به آن ماتريس Matrix می گويند) چند بعدی (با مرتبه های بالاتر) ارايه ها در برنامه نويسی فرترن، عباسپور
مزايای استفاده از آرايه اعلان ساده تر (اعلان يک متغيير بجای ده ها و هزاران) سادگی کار با آنها ( عمليات رياضی يکسانی بر روی آنها انجام می گيرد) انعطاف پذيری بيشتر (به روشهای مختلف می توان آنها را پردازش نمود) سهولت فهم برنامه کاهش اندازه برنامه نوشته شده ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور مثال آرايه يک بعدی : نمرات درسی دانشجويان با نام Grade: 88, 84, 93, 25, 47, 62, 95, 38, 82, 58 هر عنصر با يک انديس Index مشخص می شود که نشان دهنده محل عنصر در آرايه است: Grade1=88 Grade6=62 ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور مثال آرايه دو بعدی: تعداد کالاهای فروخته شده در شرکتی در شهرهای مختلف را به صورت يک ارايه دو بعدی با نام Sold_items نشان می دهيم: نوع کالا تهران (1) تبريز (2) مشهد (3) يخچال (1) 1500 800 1000 کولر (2) 1800 1700 بخاری (3) 700 500 اجاق گاز (4) 1600 900 1300 ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور ادامه.... هر عنصر با انديسی دو رقمی نشان داده می شود Sold_itemsi,j رقم اول (i) شماره رديف و رقم دوم (j) شماره ستون محل هر عنصر است Sold_items1,2=800 Sold_items4,3=1300 اندازه ارايه حاصل ضرب ارقام حداکثر انديس است ارايه ها در برنامه نويسی فرترن، عباسپور
کاربرد آرايه ها در مهندسی جريان يک سيال نسبت به زمان مثل Flow(I) و Time(I) و يا هر فرايند مشابه ديگر رسم نمودار (گرافيک) هر مقدار (به صورت عدد و ياکاراکتر) می تواند در مختصاتی مثل i و j ذخيره گردد ايجاد پايگاه های اطلاعاتی (database Management) مثل ليست کارکنان، نتيجه ارزشيابی و غيره عمليات ماتريسی مثل جمع، تفريق و ضرب ماتريس ها بايد تعداد ستون های اولی با تعداد رديفهای دومی برابر بوده انگاه نتيجه دارای تعداد رديف اولی و تعداد ستون دومی خواهد بود ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور انواع آرايه در فرترن آرايه استاتيکی (Static Arrays) : اندازه آن در زمان اعلان و در طول برنامه ثابت است در زمان اعلان اندازه Dimension آن بايد به گونه ای تعيين شود که تمام اطلاعات در ان جا داده شود آرايه های نيمه ديناميکی (Semi- Dynamic Arrays) : اين نوع ارايه ها پس از اينکه وارد يک ساب روتين می شوند اندازه آنها متناسب با نياز آن ساب روتين است. به اين نوع ارايه، ارايه اتوماتيک در فرترن گفته می شود آرايه های ديناميکی (Dynamic Arrays) : اندازه آنها در طی اجرای برنامه ممکن است بر حسب نياز تغيير کند. سبب انعطاف پذيری برنامه می شوند سبب افزايش زمان اجرای برنامه می گردند به آنها Allocatable Arrays هم گفته می شود ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور خصوصيات آرايه ها قيود آرايه درهربعد (Bounds): حد بالا Lower و حد پايين Upper اندازه بعد ارايه ( (Extent: تعداد المان در هر بعد شکل ارايه (Shape) : مشخص کننده نوع (مرتبه) و اندازه ارايه است مثال: [8] و [2,4] به ترتيب ارايه يک بعدی با 8 عضو و ارايه دو بعدی با دو سطر و 4 ستون (8عضو) را نشان می دهند. اندازه آرايه (Size) : حاصل ضرب اندازه ابعاد ارايه مطابقت ((Conformance : به مجموعه ای از ارايه های هم شکل گفته می شود ارايه ها در برنامه نويسی فرترن، عباسپور
مشخصه های ارايه Specification هر ارايه با مشخصه های زير معلوم می گردد نام آرايه: حداکثر 31 کاراکتر با همان محدوديتهای نام برای متغير های معمولی نوع آرايه (Type): منظور Real, Integer, Character, Logical ابعاد (مرتبهRank) : حداکثر می تواند 7 باشد ارايه ها در برنامه نويسی فرترن، عباسپور
قيود ابعاد آرايه Lower & Upper bounds for each dimension لزومی ندارد شماره ابعاد ارايه ها ( حد پايين) از 1 شروع شود اگر حد پايين مشخص نشود فرترن آن را 1 در نظر می گيرد. فرم کلی اعلان آرايه: برای مواقعی که بخواهيم چندين آرايه را با قيود و نوع يکسان اعلان کنيم TYPE, DIMENSION (bound) :: name اگر آرايه ها نوع و قيود مختلف داشته باشند TYPE :: name (bound) ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور مثال حالت اول: INTEGER, DIMENSION(6) :: a دارای 6 عضو REAL, DIMENSION(0:9) :: bدارای 10 عضو LOGICAL, DIMENSION(2,2) :: yes_no حالت دوم: INTEGER :: a(6) REAL :: b(0:9) LOGICAL :: yes_no(2,2) REAL:: zero_band (0:2,0:3) ارايه ها در برنامه نويسی فرترن، عباسپور
ترکيب دو نوع اعلان در يک برنامه امکان پذير است INTEGER, DIMENSION(8) :: x,y REAL:: alpha(1:3), beta(4:9) REAL, DIMENSION(0:5,12:45,6) :: data CHARACTER(len=10) :: names(25( ارايه ها در برنامه نويسی فرترن، عباسپور
المان های مجزا در آرايه ها Individual Elements برای دسترسی به يک عنصر مشخص در يک ارايه بايد از نام آرايه و از يک يا چند عدد صحيح درداخل پرانتزکه همان انديس متناظر با محل عنصر است استفاده شود. فرم کلی: array (index) مثال: REAL, DIMENSION(8) ::a INTEGER, DIMENSION(5,4) ::b a(4)المان چهارم b(4,2) المان واقع در تقاطع رديف4 و ستون 2 ارايه ها در برنامه نويسی فرترن، عباسپور
مقاطع در ارايه ها Sections برای نشان دادن مقطع ( محدوده ای) از يک آرايه از دو عدد صحيح در داخل پرانتز که توسط “ : “ از هم جدا شده باشد استفاده می شود. فرم کلی: array ([lower]:[upper]:[step]( ِDefault حد پايين و بالا چيزی است که در مرحله اعلان مشخص می گردد ُStep گام يا نمو است که به صورت Default برابر 1 است ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور مقاطع در ارايه مثال: a(3:5)المانهای 3، 4 و 5 a(1:5:2) المانهای 1؛ 3 و 5 ! Step=2 b(1:3, 2:4) المانهای رديف 1 تا 3 و ستون 2 تا 4 Beta (3,1:7:2) المانهای1 ، 3، 5 و 7 روی سطر سوم Beta (1,2:11:2) المانهای 2، 4، 6، 8 و 10 روی رديف اول استفاده از “ : “ ما را قادر می سازد که به بخشی و يا تمامی المانها در يک ستون و يا سطر دسترسی پيدا کنيم B (:,4) تمام المانها در ستون 4 برای تعيين مقاطع می توان از عبارات محاسباتی در مود صحيح هم استفاده کرد Alpha (2*k) 2*k المان موجود در نقطه ای با موقعيت ارايه ها در برنامه نويسی فرترن، عباسپور
زير نويس های برداری Vector Subscripts روشی ساده و کوتاه جهت دسترسی به المانهايي خاص از يک ارايه زير نويس های برداری نوعی INTEGER هستند که به صورت زير بيان می شوند: /List/ مثال: REAL, DIMENSION(9) :: a INTEGER, DIMENSION(3) :: random random=(/6,3,8/) مقادير 6، 3و 8 به المان های ارايه a(random)=0.0 المانهای 6، 3 و 8 از اين ارايه به صفر تبديل می گردد a((/7,8,9/))=1.2نوعی ديگر از زيرنويس برداری که المانهای 7، 8و 9 برابر 2/1 می گردند در دستور شماره 3 مقادير جديد جايگزين مقادير قبلی ارايه random می شود random(1)=6و random(2)=3 و random(3)=8 ارايه ها در برنامه نويسی فرترن، عباسپور
نکته مهم در زيرنويس های برداری بايد دقت شود که از دوبله شدن مقادير در زير نويس ها جلوگيری شود REAL, DIMENSION(5) :: a INTEGER, DIMENSION(3) :: list list=(/2,3,2/) a(list)=(/1.1, 1.2, 1.3/) !illegal element 2 set twice ارايه ها در برنامه نويسی فرترن، عباسپور
تخصيص مقدار به ارايه ها َArray assignment تخصيص کامل آرايه Whole Array assignment موقعی که بخواهيم به تمام المان ها مقدار يکسانی اختصاص دهيم. مواقعی که بخواهيم از آرايه ديگری کپی شود REAL, DIMENSION(100) :: a, b, c REAL :: d(10,10) = 0.0 b=2*a+4 a=2.0 c=b*a c=d ! Illegal statement دستورات سوم، چهارم و پنجم قابل قبول هستند چون a ، b و c با هم مطابقت دارند. دستور آخر قابل قبول نيست چون دو آرايه هم مرتبه نيستند. ارايه ها در برنامه نويسی فرترن، عباسپور
تخصيص مقطعی آرايه ها Array Section Assignment در مواقعی که به بخشی از آرايه بخواهيم مقاديری اختصاص دهيم. REAL, DIMENSION(10) :: alpha, beta REAL :: gamma(20) alpha(1:5)=2.0 alpha(1:10:2)=beta(1:5)/6. alpha(2:10)=alpha(1:9) gamma(11:20)=beta در دستور اول مقدار2 به 5 المان اول alpha اختصاص داده شده است در دستور دوم دو بخش قابل انطباق از دو ارايه مورد نظر است لذا دستور درست است. alpha(1)=beta(1)/6; alpha(3)=beta(2)/6; alpha(5)=beta(3)/6; alpha(7)=beta(4)/6; alpha(9)=beta(5)/6 دستور شماره 3 يک عمل قدرتمند است. بدون نياز به عمليات تکرار Do به طور اتوماتيک جابجا می شوند. بطوريکه در اين مثال 9 المان از اين آرايه با شروع از دومين المان، مقادير 9 المان اول را بخود می گيرند .يعنی دو المان اول مقادير يکسانی خواهند داشت دستور 4 ويژگی مهم ديگری را نشان می دهد اگر چه دو ارايه با هم قابل انطباق نيستند ولی چون بخشهای مورد نظر انطباق دارند دستور درستی است ارايه ها در برنامه نويسی فرترن، عباسپور
مقدار دهی اوليه به آرايه ها سازند ها (Constructors) اين نوع برای ارايه های يک بعدی مفيد است که نياز است المان ها مقادير مختلف بگيرند array = (/ list /) ليست می تواند شامل موارد زير باشد: ليستی از مقادير مختلف INTEGER :: a(6)=(/1,2,3,6,7,8/) ليستی از متغير های مختلف REAL::b(2)= (/sin(x), cos(x)/) بخشی از يک آرايه INTEGER :: c(5)=(/0,a(1:3),4/) استفاده از حلقه Do ضمنی Implied DO loop REAL:: d(100) = (/REAL(i), I=1,100/) ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور تابع تغيير شکل Reshape جهت مقدار دهی اوليه به آرايه هايي با مرتبه بيشتر از يک برای مقدار دهی يک آرايه با شکل مشخص از روی المانهای يک آرايه معين فرم کلی RESHAPE (list,shape) List عبارت است از مقادير يک آرايه به صورت يک بعدی يا يک سازند Constructor که حاوی Data است Shapeعبارتست از يک آرايه يک بعدی که شامل ابعاد جديد آرايه است INTEGER, DIMENSION(2,3) :: a a=RESHAPE((/)i,i=0,5(/),(/2,3/)) با دستور آخر شکل آرايه تغيير می کند RESHAPE((/ 1, 2, 3, 4, 5, 6 /), (/ 2, 3 /)) as the value 3 5 4 6 ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور دستور Data موقعی استفاده می شود که روشهای ديگر خسته کننده باشند فرم کلی DATA variable / list / ... مثال: INTEGER :: a(4), b(2,2), c(10) DATA a/4,3,2,1/ مقدار هر يک از الما نها را مشخص می کند DATA a/4*0/ 4 بار مقدار صفر تکرار شده و هر بار به يک المان نسبت داده می شود (با ضرب اشتباه نشود) DATA b(1,:)/0,0/ ; DATA b(2,:)/1,1/ دو المان رديف اول صفر و دو رديف دوم 1 می شود DATA (c(i),i=1,10,2)/5*1/ ); DATA (c(i),i=2,10,2)/5*2/ ( استفاده از Implied DO به صورتيکه المان های فرد مقدار 1 و المانهای زوج مقدار 2 می گيرند (با ضرب اشتباه نشود) ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور دستور WHERE موقعی که بخواهيم يک المان يا تعدادی از المانها تحت برآورده شدن شرايطی مقدار خاصی بگيرند فرم کلی WHERE (condition) statement INTEGER :: a(2,3,4) WHERE(a< 0) a=0 WHERE(a*3>10) a=999 بايد Condition به صورت TRUE باشد ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور دستور WHERE(ادامه.... ) WHERE (condition) block1 [ELSEWHERE block2] ENDWHERE مثال INTEGER :: b(8,8) WHERE (b<=0) b=0 ELSEWHERE b=1/b ارايه ها در برنامه نويسی فرترن، عباسپور
توابع آماده مربوط به آرايه ها Array Intrinsic Functions ALL (condition, [DIM]) مشخص می کند که آيا تمام المان ها در امتداد يک بعد شرط ارائه شده در Condition را دارند يا خير؟ DIM شماره هر بعد است (DIM ستون 2 است) خروجی اين تابع يک اسکالر (مقدار واحد) منطقی است اگر DIM حذف شود. در اين حالت اگر اولين المان شرط ارائه شده در Condition را داشته باشد، خروجی تابع .TRUE. است اگر DIM در آرگومان باشد خروجی آرايه منطقی است LOGICAL :: test, test2(3), test3(2) REAL, DIMENSION(3,2) :: a a = (/5,9,6,10,8,12/) ... test=All(a>5) !false چون اولين المان ارايه بزرگتر از پنج نيست test2=All(a>5, DIM=1) !false, true, true بر اساس اولين المان هر رديف test3=All(a>5, DIM=2) !false, true بر اساس اولين المان هر ستون ارايه ها در برنامه نويسی فرترن، عباسپور
توابع آماده مربوط به آرايه ها Array Intrinsic Functions SIZE (array, [DIM]) تعداد کل المان های ارايه (اندازه) را می دهد اگر DIM آورده شود اندازه همان بعد را می دهد (تعداد سطر يا ستون) REAL, DIMENSION(3,2) :: a num=Size(a) !num=6 num=Size(a,DIM=1) !num=3 num=Size(a,DIM=2) !num=2 ارايه ها در برنامه نويسی فرترن، عباسپور
توابع آماده مربوط به آرايه ها Array Intrinsic Functions SPREAD (array, DIM, ncopies) بعد DIM از ارايه داخل ارگومان را به تعداد ncopies تکرار می کند. خروجی ارايه است REAL, DIMENSION(3) :: a=(/2,3,4/) REAL, DIMENSION(3,3) :: b REAL, DIMENSION(3,2) :: c b=SPREAD(a, DIM=1, NCOPIES=3) c=SPREAD(a, DIM=2, NCOPIES=2) 2 3 4 2 3 4 ارايه ها در برنامه نويسی فرترن، عباسپور
توابع آماده مربوط به آرايه ها Array Intrinsic Functions MAXLOC(array, [DIM], mask]) موقعيت بزرگترين المان از ارايه (يابعدی DIM از آرايه )داخل ارگومان را به عنوان خروجی INTEGER ارائه می کند اگر mask باشد شرط مورد نظر را نيز در نظر می گيرد REAL :: a(5); a=(/2,8,5,3,4/) num = MAXLOC( a ) !num=2 num = MAXLOC( a, MASK=a<5 ) !num=5 num = MAXLOC( a(2:4) ) !num=1 ارايه ها در برنامه نويسی فرترن، عباسپور
توابع آماده مربوط به آرايه ها Array Intrinsic Functions LBOUND (Array) UBOUND (Array) قيود پايين و بالای يک آرايه و يا زير نويسی از آرايه را به صورت يک INTEGER و يا آرايه ای INTEGER ارائه می کنند LOGICAL:: c(0:2,0:2,0:2,0:3) INTEGER:: numarray(4) REAL:: a(21:30), b(10) NUM= LBOUND (a) !num=21 NUM= UBOUND (a) !num=30 NUM= LBOUND (b) !num=1 NUM= UBOUND (b) !num=10 Numarray=LBOUND (c) !numarray=(/0,0,0,0/) Numarray=UBOUND (c) !numarray=(/2,2,2,3/) ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور آرايه ها در زبان C فرم کلی اعلان ارايه <type> <variableName> [size]; مثال Int A[10]; اندیس نشان دهنده دسترسی به المان خاص مثلاً =8; A[3] اولین اندیس از صفر شروع میشود A[0] (در فرترن پیش فرض 1 است) هر نوع عملیاتی که بر روی متغیر های معمولی قابل انجام باشد بر روی المان های ارایه قابل انجام است ارايه ها در برنامه نويسی فرترن، عباسپور
پردازش ارایه ها از طریق حلقه های تکرار مثل چاپ، خواندن، مقدار دهی و محاسبات مختلف مثال: int i; for (i=0; i<10; i++) scanf(“%d”, &a[i]); ارايه ها در برنامه نويسی فرترن، عباسپور
نکات مهم در ارتباط با آرایه ها در C اندازه ارایه ها در برنامه ثابت بوده و باید توسط یک مقدار ثابت صحیح بیان شود int n; n= 100; int A[n]; // compiler error اندیس ارایه از0 شروع می شود که گاهی سبب اشتباه می شود A[0] یعنی عنصر اول ارایه و A[3] یعنی چهارمین آرایه در C مرز آرایه ها بررسی نمی شود یعنی اگر شماره اندیسی خارج از محدوده تعیین شده باشد خطای کامپایلری بروز نمی کند ولی مسلماً برنامه را دچار خطای منطقی می کند Int A[10]; A[12]= 20; // not a syntax but a logical error ارايه ها در برنامه نويسی فرترن، عباسپور
مقدار دهی اولیه ارایه های یک بعدی مثال int A[3]={5,2,8}; می توان فقط به تعدادی از المان ها مقدار اولیه داد بقیه المان ها بطور خود کار مقدار صفر می گیرند Int B[10]={5,8} ; از المان B[2] به بعد صفر خواهد بود در صورت مقدار دهي اوليه ارايه ميتوان تعداد عناصر آن راذكر نكرد Int C[ ] = {10,15,20} // يعني ارايه با سه عضو ارايه ها در برنامه نويسی فرترن، عباسپور
استفاده از متغير هاي ثابت جهت تعيين اندازه آرايه بجاي عدد صحيح (ثابت صحيح) مي توان از متغير ثابت استفاده كرد اول اعلان و مقدار دهي متغير بعد استفاده براي تعيين اندازه ارايه باعث خوانايي برنامه مي شود تنها با تغيير مقدار متغير در برنامه اندازه ارايه تغيير مي كند ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور مثال: دانشكده داراي ده رشته با ده كد عددي (1 تا 10) است برنامه اي بنويسيد كه كد رشته را دريافت و سپس تعداد دانشجويان را چاپ كند # include <stdio.h> const int majorno=10; تعیین اندازه متغیر ثابت void main() { int count [majorno] // ارايه حاوي شمارنده هر رشته int code, // كد رشته دانشجو i,n; printf(“enter number of students:”); scanf(“%d”&n); //در يافت تعداد دانشجويان // حلقه دريافت كد دانشجويان for (i=0; i<n; i++){ printf(“enter major code:”); scanf(“%d”, &code); if (code>=1 && code<=majorno) count [code-1]++; } // حلقه چاپ تعداد دانشجويان هر رشته for (i=0; i<majorno; i++) printf(“major code= %d count= %d \n “, i+1, count[i]; ارايه ها در برنامه نويسی فرترن، عباسپور
برنامه اي بنويسيد كه واريانس تعدادي عدد اعشاري را محاسبه كند # include <stdio.h> const int size=100; void main() { float data [size] ; // ارايه نگهداري داده ها float difference; float average=0.0, variance=0.0; int i, n; printf(“enter n: ”); scanf(“%d”, &n); // حلقه دريافت داده ها و محاسبه ميانگين آنها for (i=0; i<n; i++){ printf( “enter number:”); scanf(“%f”, &data [i]); average+= data[i]; } average/=n; /// حلقه محاسبه واريانس difference= data[i] – average variance = difference * difference variance/=n; printf(“variance =%f”, variance); ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور آرايه هاي چند بعدي در C فرم كلي اعلان <type> <var-name> [<size 1>] [<size 2>]… [<size n>]; مثال اعلان ارايه دو بعدي int A[5] [8]; ارايه اي با 5 رديف و 8 ستون براي دسترسي به هر عنصر بايد از انديس انها استفاده كرد (از صفر) A[3][1] = 24; 1 2 3 4 5 6 7 24 1 A[1][6] 2 3 4 A[2][3] ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور ارايه هاي چند بعدي ارايه با ابعاد بالا تر Int B [3][4][6]; // ستون، سطر عمق مثال: مقدار در عمق صفر، سطر2 و ستون3 B[0][2][3] = 12; براي پرداز ش روي تمام عناصر بايد به تعداد ابعاد حلقه تكرار متداخل استفاده شود ( براي دو بعدي دو حلقه متداخل) مثال دريافت مقادير از كاربر int i,j; int a[5][8]; for (i=0; i<5; i++) for (j<0; j<8; j++) scanf(“%d”, &a[i][j]); ارايه ها در برنامه نويسی فرترن، عباسپور
مقدار دهي اوليه به ارايه هاي چند بعدي استفاده از {} براي كل ارايه و براي هر رديف مثال ارايه دو بعدي Int A[3][4]={{12,5,3,8},{-3,7,-9,2},{4,22,18,6}}; مثال ارايه 3 بعدي Int A[2][3][4]={{{12,5,3,8},{-3,7,-9,2},{4,22,18,6}}, {{8,1,-3,4},{-2,8,11,21},{7,3,-15,-8}}}; بصورت دو ارايه 3Χ4 در نظر گرفته شده است مثل ارايه يك بعدي اگر هر رديف ناقص مقدار دهي شود عناصر بعد صفر مي شود ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور مثال مدير يك شركت توليد قطعات يدكي تراكتور مي خواهد از مشتريان خود در مورد كيفيت محصولات توليدي خود نظر سنجي نمايد. تعداد محصولات 20 عدد با كد از يك تا 20 و كد اعمال نظر بصورت زير مي باشد 1- عالي؛ 2- متوسط ؛ 3- ضعيف ؛ 4- نخريده ام. بر نامه اي بنويسيد كه براي محصولات 20 گانه براي هر يك از محصولات به تفكيك اراء مشتريان چاپ شود ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور #include <stdio.h> const int productNo=20; void main(){ int votes[productNo][4]={{0}}; int voteCode; int i,j,n; printf(“enter number of customers:”); scanf(“%d”,&n); for (i=0; i<n; i++){ // حلقه دريافت اراء مشتريان printf(“ customer no %d:” i+1); // حلقه دريافت نظر مشتري براي هر محصول for (j=0; j<productNo; j++) { printf(“ enter vote for product no %d:” j+1); scanf(“%d”,&voteCode); if(voteCode>=1 && voteCode<=4) votes [j][voteCode-1]++; } // حلقه چاپ اراي مشتريان for (i=0; i<productNo; i++) { printf (product no %d:”, i+1); printf( “ecllent=%d intermediate= %d bad= %d no purchase=%d\n”, votes{i][0], votes{i][1], votes{i][2], votes{i][3]); عالي متوسط بد خريد نشده محصول اول محصول دوم محصول بيستم ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور ارایه های نویسه ای در C برای این کار از یک آرایه دو بعدی استفاده می کنیم مثال: char nameList [5][10]={“ali”, “reza”,”ahmad”,”babak”,”hamid”}; یعنی ارایه ای 5 عضوی هر کدام با 10 کاراکتر شماره عضو ها از صفر شروع می شود nameList[0]مقدار ali را بخود گرفته است دسترسی به اعضا از طریق دو اندیس nameList[0][0] برابر ‘a’ است برای کل رشته هم باید از اندیس اول استفاده نمود. nameList[4] مقدار “hamid” را در خود جای داده است می توان از روش فوق برای ارگومان توابع هم استفاده نمود Gets (nameList[2]) دستور فوق مقدار سومین رشته را از کاربر دریافت می کند ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور مثال: برنامه ای بنویسید که شماره دانشجویی، نام و معدل تعدادی دانشجو را دریافت و با دریافت شماره دانشجویی هر فرد اطلاعات او را جستجو و در صورت پیدا شدن چاپ نماید برنامه با شماره دانشجویی صفر خاتمه می یابد # include<stdio.h> Const int maxStudent=100; // حداکثر تعداد دانشجو Const int maxNameLen=20; // حداکثر طول نام هر دانشجو Void main () { Long int idList[maxStudent]; //ارایه حاوی شماره دانشجویی Float averageList[maxStudent]; // ارایه حاوی معدل دانشجویان Char nameList[maxStudent][maxNameLen]; // ارایه حاوی نام دانشجویان Long int searchId; Int i,n; Printf(“please enter number of students:’); Scanf(“%d”,&n); // در یافت اطلاعات دانشجویان For (i=0; I<n; i++) { printf(“student #%d:\n”,i+1); printf(“enter id:”); scanf(“%ld”, &idlist[i]); printf(“enter name:”); scanf(“%s”, nameList[i]; /// gets (nameList[i]) مشابه هم printf(“enter average:”); scanf(“%f”, &averageList[i]); } ارايه ها در برنامه نويسی فرترن، عباسپور
ارايه ها در برنامه نويسی فرترن، عباسپور // حلقه جستجوی دانشجو While (1) { // حلقه ای بدون انتها Prinf(“enter student id (0 to exit):”); Scanf(“%ld”, &searchId); If (!searchId)break; For (i=0; i<n; i++) if (idList[i]==searchId) break; If(i<n) { printf(“student specification:\n); printf( “id=%ld name= %s average =%f\n”, idList[i], nameList[i], averageList[i]); } else printf (“student not found”); ارايه ها در برنامه نويسی فرترن، عباسپور